From 666da2e9eef736d314851c7ee1bb021bb2ee28a6 Mon Sep 17 00:00:00 2001 From: aan Date: Tue, 6 Aug 2024 17:37:49 +0200 Subject: [PATCH 01/11] feat: add data model. --- poetry.lock | 1658 ++++++++++++++++++++++-- pyproject.toml | 4 + tests/conftest.py | 60 + tests/house.json | 363 ++++++ tests/house.yaml | 163 +++ tests/test_schema.py | 72 + tests/test_template.py | 61 +- trano/construction.py | 9 +- trano/data_models/__init__.py | 0 trano/data_models/conversion.py | 122 ++ trano/data_models/trano.yaml | 750 +++++++++++ trano/material.py | 9 +- trano/models/elements/base.py | 11 +- trano/models/elements/envelope/base.py | 4 +- trano/models/elements/space.py | 14 +- 15 files changed, 3130 insertions(+), 170 deletions(-) create mode 100644 tests/house.json create mode 100644 tests/house.yaml create mode 100644 tests/test_schema.py create mode 100644 trano/data_models/__init__.py create mode 100644 trano/data_models/conversion.py create mode 100644 trano/data_models/trano.yaml diff --git a/poetry.lock b/poetry.lock index 6696ad4..a96cc72 100644 --- a/poetry.lock +++ b/poetry.lock @@ -12,6 +12,17 @@ files = [ {file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"}, ] +[[package]] +name = "antlr4-python3-runtime" +version = "4.9.3" +description = "ANTLR 4.9.3 runtime for Python 3.7" +category = "main" +optional = false +python-versions = "*" +files = [ + {file = "antlr4-python3-runtime-4.9.3.tar.gz", hash = "sha256:f224469b4168294902bb1efa80a8bf7855f24c99aef99cbefc1bcd3cce77881b"}, +] + [[package]] name = "anytree" version = "2.12.1" @@ -42,6 +53,26 @@ files = [ [package.extras] test = ["coverage", "mypy", "pexpect", "ruff", "wheel"] +[[package]] +name = "arrow" +version = "1.3.0" +description = "Better dates & times for Python" +category = "main" +optional = false +python-versions = ">=3.8" +files = [ + {file = "arrow-1.3.0-py3-none-any.whl", hash = "sha256:c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80"}, + {file = "arrow-1.3.0.tar.gz", hash = "sha256:d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85"}, +] + +[package.dependencies] +python-dateutil = ">=2.7.0" +types-python-dateutil = ">=2.8.10" + +[package.extras] +doc = ["doc8", "sphinx (>=7.0.0)", "sphinx-autobuild", "sphinx-autodoc-typehints", "sphinx_rtd_theme (>=1.3.0)"] +test = ["dateparser (>=1.0.0,<2.0.0)", "pre-commit", "pytest", "pytest-cov", "pytest-mock", "pytz (==2021.1)", "simplejson (>=3.0.0,<4.0.0)"] + [[package]] name = "asttokens" version = "2.4.1" @@ -61,6 +92,41 @@ six = ">=1.12.0" astroid = ["astroid (>=1,<2)", "astroid (>=2,<4)"] test = ["astroid (>=1,<2)", "astroid (>=2,<4)", "pytest"] +[[package]] +name = "attrs" +version = "23.2.0" +description = "Classes Without Boilerplate" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "attrs-23.2.0-py3-none-any.whl", hash = "sha256:99b87a485a5820b23b879f04c2305b44b951b502fd64be915879d77a7e8fc6f1"}, + {file = "attrs-23.2.0.tar.gz", hash = "sha256:935dc3b529c262f6cf76e50877d35a4bd3c1de194fd41f47a2b7ae8f19971f30"}, +] + +[package.extras] +cov = ["attrs[tests]", "coverage[toml] (>=5.3)"] +dev = ["attrs[tests]", "pre-commit"] +docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"] +tests = ["attrs[tests-no-zope]", "zope-interface"] +tests-mypy = ["mypy (>=1.6)", "pytest-mypy-plugins"] +tests-no-zope = ["attrs[tests-mypy]", "cloudpickle", "hypothesis", "pympler", "pytest (>=4.3.0)", "pytest-xdist[psutil]"] + +[[package]] +name = "binaryornot" +version = "0.4.4" +description = "Ultra-lightweight pure Python package to check if a file is binary or text." +category = "main" +optional = false +python-versions = "*" +files = [ + {file = "binaryornot-0.4.4-py2.py3-none-any.whl", hash = "sha256:b8b71173c917bddcd2c16070412e369c3ed7f0528926f70cac18a6c97fd563e4"}, + {file = "binaryornot-0.4.4.tar.gz", hash = "sha256:359501dfc9d40632edc9fac890e19542db1a287bbcfa58175b66658392018061"}, +] + +[package.dependencies] +chardet = ">=3.0.2" + [[package]] name = "buildingspy" version = "5.1.0" @@ -100,16 +166,30 @@ files = [ [[package]] name = "certifi" -version = "2024.6.2" +version = "2024.7.4" description = "Python package for providing Mozilla's CA Bundle." category = "main" optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2024.6.2-py3-none-any.whl", hash = "sha256:ddc6c8ce995e6987e7faf5e3f1b02b302836a0e5d98ece18392cb1a36c72ad56"}, - {file = "certifi-2024.6.2.tar.gz", hash = "sha256:3cd43f1c6fa7dedc5899d69d3ad0398fd018ad1a17fba83ddaf78aa46c747516"}, + {file = "certifi-2024.7.4-py3-none-any.whl", hash = "sha256:c198e21b1289c2ab85ee4e67bb4b4ef3ead0892059901a8d5b622f24a1101e90"}, + {file = "certifi-2024.7.4.tar.gz", hash = "sha256:5a1e7645bc0ec61a09e26c36f6106dd4cf40c6db3a1fb6352b0244e7fb057c7b"}, +] + +[[package]] +name = "cfgraph" +version = "0.2.1" +description = "rdflib collections flattening graph" +category = "main" +optional = false +python-versions = "*" +files = [ + {file = "CFGraph-0.2.1.tar.gz", hash = "sha256:b57fe7044a10b8ff65aa3a8a8ddc7d4cd77bf511b42e57289cd52cbc29f8fe74"}, ] +[package.dependencies] +rdflib = ">=0.4.2" + [[package]] name = "cfgv" version = "3.4.0" @@ -122,6 +202,18 @@ files = [ {file = "cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560"}, ] +[[package]] +name = "chardet" +version = "5.2.0" +description = "Universal encoding detector for Python 3" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "chardet-5.2.0-py3-none-any.whl", hash = "sha256:e1cf59446890a00105fe7b7912492ea04b6e6f06d4b742b2c788469e34c82970"}, + {file = "chardet-5.2.0.tar.gz", hash = "sha256:1b3b6ff479a8c414bc3fa2c0852995695c4a026dcd6d0633b2dd092ca39c1cf7"}, +] + [[package]] name = "charset-normalizer" version = "3.3.2" @@ -222,6 +314,21 @@ files = [ {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, ] +[[package]] +name = "click" +version = "8.1.7" +description = "Composable command line interface toolkit" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, + {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + [[package]] name = "colorama" version = "0.4.6" @@ -316,6 +423,74 @@ mypy = ["contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.8.0)", "types-Pill test = ["Pillow", "contourpy[test-no-images]", "matplotlib"] test-no-images = ["pytest", "pytest-cov", "pytest-xdist", "wurlitzer"] +[[package]] +name = "cookiecutter" +version = "2.6.0" +description = "A command-line utility that creates projects from project templates, e.g. creating a Python package project from a Python package project template." +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "cookiecutter-2.6.0-py3-none-any.whl", hash = "sha256:a54a8e37995e4ed963b3e82831072d1ad4b005af736bb17b99c2cbd9d41b6e2d"}, + {file = "cookiecutter-2.6.0.tar.gz", hash = "sha256:db21f8169ea4f4fdc2408d48ca44859349de2647fbe494a9d6c3edfc0542c21c"}, +] + +[package.dependencies] +arrow = "*" +binaryornot = ">=0.4.4" +click = ">=7.0,<9.0.0" +Jinja2 = ">=2.7,<4.0.0" +python-slugify = ">=4.0.0" +pyyaml = ">=5.3.1" +requests = ">=2.23.0" +rich = "*" + +[[package]] +name = "cruft" +version = "2.15.0" +description = "Allows you to maintain all the necessary cruft for packaging and building projects separate from the code you intentionally write. Built on-top of CookieCutter." +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "cruft-2.15.0-py3-none-any.whl", hash = "sha256:2c1c6c7c512b8bc3afc66cefa829247dc067409a78ba2609d629d413444bc153"}, + {file = "cruft-2.15.0.tar.gz", hash = "sha256:9802af66037418655e7e4b6f30b531591e0761939b3ff5dd45d27c3a3f588abe"}, +] + +[package.dependencies] +click = ">=7.1.2" +cookiecutter = ">=1.7" +gitpython = ">=3.0" +typer = ">=0.4.0" + +[package.extras] +pyproject = ["toml (>=0.10)"] + +[[package]] +name = "curies" +version = "0.7.9" +description = "Idiomatic conversion between URIs and compact URIs (CURIEs)." +category = "main" +optional = false +python-versions = ">=3.8" +files = [ + {file = "curies-0.7.9-py3-none-any.whl", hash = "sha256:e4c5beb91642376953c94db0ee2fb5d2b011c3b16749516436114ba61442f260"}, + {file = "curies-0.7.9.tar.gz", hash = "sha256:3b63c5fea7b0e967629a3a384b1a8c59b56c503487c1dcbacddeab59e25db4d8"}, +] + +[package.dependencies] +pydantic = "*" +pytrie = "*" +requests = "*" + +[package.extras] +docs = ["sphinx", "sphinx-automodapi", "sphinx-rtd-theme"] +fastapi = ["defusedxml", "fastapi", "httpx", "python-multipart", "uvicorn"] +flask = ["defusedxml", "flask"] +pandas = ["pandas"] +rdflib = ["rdflib"] +tests = ["coverage", "pytest"] + [[package]] name = "cycler" version = "0.12.1" @@ -344,6 +519,24 @@ files = [ {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, ] +[[package]] +name = "deprecated" +version = "1.2.14" +description = "Python @deprecated decorator to deprecate old python classes, functions or methods." +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "Deprecated-1.2.14-py2.py3-none-any.whl", hash = "sha256:6fac8b097794a90302bdbb17b9b815e732d3c4720583ff1b198499d78470466c"}, + {file = "Deprecated-1.2.14.tar.gz", hash = "sha256:e5323eb936458dccc2582dc6f9c322c852a775a27065ff2b0c4970b9d53d01b3"}, +] + +[package.dependencies] +wrapt = ">=1.10,<2" + +[package.extras] +dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "sphinx (<2)", "tox"] + [[package]] name = "distlib" version = "0.3.8" @@ -400,6 +593,18 @@ docs = ["myst-parser (==0.18.0)", "sphinx (==5.1.1)"] ssh = ["paramiko (>=2.4.3)"] websockets = ["websocket-client (>=1.3.0)"] +[[package]] +name = "et-xmlfile" +version = "1.1.0" +description = "An implementation of lxml.xmlfile for the standard library" +category = "main" +optional = false +python-versions = ">=3.6" +files = [ + {file = "et_xmlfile-1.1.0-py3-none-any.whl", hash = "sha256:a2ba85d1d6a74ef63837eed693bcb89c3f752169b0e3e7ae5b16ca5e1b3deada"}, + {file = "et_xmlfile-1.1.0.tar.gz", hash = "sha256:8eb9e2bc2f8c97e37a2dc85a09ecdcdec9d8a396530a6d5a33b30b9a92da0c5c"}, +] + [[package]] name = "exceptiongroup" version = "1.2.1" @@ -513,6 +718,18 @@ ufo = ["fs (>=2.2.0,<3)"] unicode = ["unicodedata2 (>=15.1.0)"] woff = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "zopfli (>=0.1.4)"] +[[package]] +name = "fqdn" +version = "1.5.1" +description = "Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0, !=3.1, !=3.2, !=3.3, !=3.4, <4" +files = [ + {file = "fqdn-1.5.1-py3-none-any.whl", hash = "sha256:3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014"}, + {file = "fqdn-1.5.1.tar.gz", hash = "sha256:105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f"}, +] + [[package]] name = "gitdb" version = "4.0.11" @@ -547,6 +764,107 @@ gitdb = ">=4.0.1,<5" doc = ["sphinx (==4.3.2)", "sphinx-autodoc-typehints", "sphinx-rtd-theme", "sphinxcontrib-applehelp (>=1.0.2,<=1.0.4)", "sphinxcontrib-devhelp (==1.0.2)", "sphinxcontrib-htmlhelp (>=2.0.0,<=2.0.1)", "sphinxcontrib-qthelp (==1.0.3)", "sphinxcontrib-serializinghtml (==1.1.5)"] test = ["coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock", "mypy", "pre-commit", "pytest (>=7.3.1)", "pytest-cov", "pytest-instafail", "pytest-mock", "pytest-sugar", "typing-extensions"] +[[package]] +name = "graphviz" +version = "0.20.3" +description = "Simple Python interface for Graphviz" +category = "main" +optional = false +python-versions = ">=3.8" +files = [ + {file = "graphviz-0.20.3-py3-none-any.whl", hash = "sha256:81f848f2904515d8cd359cc611faba817598d2feaac4027b266aa3eda7b3dde5"}, + {file = "graphviz-0.20.3.zip", hash = "sha256:09d6bc81e6a9fa392e7ba52135a9d49f1ed62526f96499325930e87ca1b5925d"}, +] + +[package.extras] +dev = ["flake8", "pep8-naming", "tox (>=3)", "twine", "wheel"] +docs = ["sphinx (>=5,<7)", "sphinx-autodoc-typehints", "sphinx-rtd-theme"] +test = ["coverage", "pytest (>=7,<8.1)", "pytest-cov", "pytest-mock (>=3)"] + +[[package]] +name = "greenlet" +version = "3.0.3" +description = "Lightweight in-process concurrent programming" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "greenlet-3.0.3-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:9da2bd29ed9e4f15955dd1595ad7bc9320308a3b766ef7f837e23ad4b4aac31a"}, + {file = "greenlet-3.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d353cadd6083fdb056bb46ed07e4340b0869c305c8ca54ef9da3421acbdf6881"}, + {file = "greenlet-3.0.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dca1e2f3ca00b84a396bc1bce13dd21f680f035314d2379c4160c98153b2059b"}, + {file = "greenlet-3.0.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3ed7fb269f15dc662787f4119ec300ad0702fa1b19d2135a37c2c4de6fadfd4a"}, + {file = "greenlet-3.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd4f49ae60e10adbc94b45c0b5e6a179acc1736cf7a90160b404076ee283cf83"}, + {file = "greenlet-3.0.3-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:73a411ef564e0e097dbe7e866bb2dda0f027e072b04da387282b02c308807405"}, + {file = "greenlet-3.0.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:7f362975f2d179f9e26928c5b517524e89dd48530a0202570d55ad6ca5d8a56f"}, + {file = "greenlet-3.0.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:649dde7de1a5eceb258f9cb00bdf50e978c9db1b996964cd80703614c86495eb"}, + {file = "greenlet-3.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:68834da854554926fbedd38c76e60c4a2e3198c6fbed520b106a8986445caaf9"}, + {file = "greenlet-3.0.3-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:b1b5667cced97081bf57b8fa1d6bfca67814b0afd38208d52538316e9422fc61"}, + {file = "greenlet-3.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:52f59dd9c96ad2fc0d5724107444f76eb20aaccb675bf825df6435acb7703559"}, + {file = "greenlet-3.0.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:afaff6cf5200befd5cec055b07d1c0a5a06c040fe5ad148abcd11ba6ab9b114e"}, + {file = "greenlet-3.0.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fe754d231288e1e64323cfad462fcee8f0288654c10bdf4f603a39ed923bef33"}, + {file = "greenlet-3.0.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2797aa5aedac23af156bbb5a6aa2cd3427ada2972c828244eb7d1b9255846379"}, + {file = "greenlet-3.0.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b7f009caad047246ed379e1c4dbcb8b020f0a390667ea74d2387be2998f58a22"}, + {file = "greenlet-3.0.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c5e1536de2aad7bf62e27baf79225d0d64360d4168cf2e6becb91baf1ed074f3"}, + {file = "greenlet-3.0.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:894393ce10ceac937e56ec00bb71c4c2f8209ad516e96033e4b3b1de270e200d"}, + {file = "greenlet-3.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:1ea188d4f49089fc6fb283845ab18a2518d279c7cd9da1065d7a84e991748728"}, + {file = "greenlet-3.0.3-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:70fb482fdf2c707765ab5f0b6655e9cfcf3780d8d87355a063547b41177599be"}, + {file = "greenlet-3.0.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4d1ac74f5c0c0524e4a24335350edad7e5f03b9532da7ea4d3c54d527784f2e"}, + {file = "greenlet-3.0.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:149e94a2dd82d19838fe4b2259f1b6b9957d5ba1b25640d2380bea9c5df37676"}, + {file = "greenlet-3.0.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:15d79dd26056573940fcb8c7413d84118086f2ec1a8acdfa854631084393efcc"}, + {file = "greenlet-3.0.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:881b7db1ebff4ba09aaaeae6aa491daeb226c8150fc20e836ad00041bcb11230"}, + {file = "greenlet-3.0.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fcd2469d6a2cf298f198f0487e0a5b1a47a42ca0fa4dfd1b6862c999f018ebbf"}, + {file = "greenlet-3.0.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:1f672519db1796ca0d8753f9e78ec02355e862d0998193038c7073045899f305"}, + {file = "greenlet-3.0.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2516a9957eed41dd8f1ec0c604f1cdc86758b587d964668b5b196a9db5bfcde6"}, + {file = "greenlet-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:bba5387a6975598857d86de9eac14210a49d554a77eb8261cc68b7d082f78ce2"}, + {file = "greenlet-3.0.3-cp37-cp37m-macosx_11_0_universal2.whl", hash = "sha256:5b51e85cb5ceda94e79d019ed36b35386e8c37d22f07d6a751cb659b180d5274"}, + {file = "greenlet-3.0.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:daf3cb43b7cf2ba96d614252ce1684c1bccee6b2183a01328c98d36fcd7d5cb0"}, + {file = "greenlet-3.0.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:99bf650dc5d69546e076f413a87481ee1d2d09aaaaaca058c9251b6d8c14783f"}, + {file = "greenlet-3.0.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2dd6e660effd852586b6a8478a1d244b8dc90ab5b1321751d2ea15deb49ed414"}, + {file = "greenlet-3.0.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e3391d1e16e2a5a1507d83e4a8b100f4ee626e8eca43cf2cadb543de69827c4c"}, + {file = "greenlet-3.0.3-cp37-cp37m-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e1f145462f1fa6e4a4ae3c0f782e580ce44d57c8f2c7aae1b6fa88c0b2efdb41"}, + {file = "greenlet-3.0.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:1a7191e42732df52cb5f39d3527217e7ab73cae2cb3694d241e18f53d84ea9a7"}, + {file = "greenlet-3.0.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:0448abc479fab28b00cb472d278828b3ccca164531daab4e970a0458786055d6"}, + {file = "greenlet-3.0.3-cp37-cp37m-win32.whl", hash = "sha256:b542be2440edc2d48547b5923c408cbe0fc94afb9f18741faa6ae970dbcb9b6d"}, + {file = "greenlet-3.0.3-cp37-cp37m-win_amd64.whl", hash = "sha256:01bc7ea167cf943b4c802068e178bbf70ae2e8c080467070d01bfa02f337ee67"}, + {file = "greenlet-3.0.3-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:1996cb9306c8595335bb157d133daf5cf9f693ef413e7673cb07e3e5871379ca"}, + {file = "greenlet-3.0.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ddc0f794e6ad661e321caa8d2f0a55ce01213c74722587256fb6566049a8b04"}, + {file = "greenlet-3.0.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c9db1c18f0eaad2f804728c67d6c610778456e3e1cc4ab4bbd5eeb8e6053c6fc"}, + {file = "greenlet-3.0.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7170375bcc99f1a2fbd9c306f5be8764eaf3ac6b5cb968862cad4c7057756506"}, + {file = "greenlet-3.0.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b66c9c1e7ccabad3a7d037b2bcb740122a7b17a53734b7d72a344ce39882a1b"}, + {file = "greenlet-3.0.3-cp38-cp38-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:098d86f528c855ead3479afe84b49242e174ed262456c342d70fc7f972bc13c4"}, + {file = "greenlet-3.0.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:81bb9c6d52e8321f09c3d165b2a78c680506d9af285bfccbad9fb7ad5a5da3e5"}, + {file = "greenlet-3.0.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fd096eb7ffef17c456cfa587523c5f92321ae02427ff955bebe9e3c63bc9f0da"}, + {file = "greenlet-3.0.3-cp38-cp38-win32.whl", hash = "sha256:d46677c85c5ba00a9cb6f7a00b2bfa6f812192d2c9f7d9c4f6a55b60216712f3"}, + {file = "greenlet-3.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:419b386f84949bf0e7c73e6032e3457b82a787c1ab4a0e43732898a761cc9dbf"}, + {file = "greenlet-3.0.3-cp39-cp39-macosx_11_0_universal2.whl", hash = "sha256:da70d4d51c8b306bb7a031d5cff6cc25ad253affe89b70352af5f1cb68e74b53"}, + {file = "greenlet-3.0.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:086152f8fbc5955df88382e8a75984e2bb1c892ad2e3c80a2508954e52295257"}, + {file = "greenlet-3.0.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d73a9fe764d77f87f8ec26a0c85144d6a951a6c438dfe50487df5595c6373eac"}, + {file = "greenlet-3.0.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b7dcbe92cc99f08c8dd11f930de4d99ef756c3591a5377d1d9cd7dd5e896da71"}, + {file = "greenlet-3.0.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1551a8195c0d4a68fac7a4325efac0d541b48def35feb49d803674ac32582f61"}, + {file = "greenlet-3.0.3-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:64d7675ad83578e3fc149b617a444fab8efdafc9385471f868eb5ff83e446b8b"}, + {file = "greenlet-3.0.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b37eef18ea55f2ffd8f00ff8fe7c8d3818abd3e25fb73fae2ca3b672e333a7a6"}, + {file = "greenlet-3.0.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:77457465d89b8263bca14759d7c1684df840b6811b2499838cc5b040a8b5b113"}, + {file = "greenlet-3.0.3-cp39-cp39-win32.whl", hash = "sha256:57e8974f23e47dac22b83436bdcf23080ade568ce77df33159e019d161ce1d1e"}, + {file = "greenlet-3.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:c5ee858cfe08f34712f548c3c363e807e7186f03ad7a5039ebadb29e8c6be067"}, + {file = "greenlet-3.0.3.tar.gz", hash = "sha256:43374442353259554ce33599da8b692d5aa96f8976d567d4badf263371fbe491"}, +] + +[package.extras] +docs = ["Sphinx", "furo"] +test = ["objgraph", "psutil"] + +[[package]] +name = "hbreader" +version = "0.9.1" +description = "Honey Badger reader - a generic file/url/string open and read tool" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "hbreader-0.9.1-py3-none-any.whl", hash = "sha256:9a6e76c9d1afc1b977374a5dc430a1ebb0ea0488205546d4678d6e31cc5f6801"}, + {file = "hbreader-0.9.1.tar.gz", hash = "sha256:d2c132f8ba6276d794c66224c3297cec25c8079d0a4cf019c061611e0a3b94fa"}, +] + [[package]] name = "identify" version = "2.5.36" @@ -625,6 +943,36 @@ qtconsole = ["qtconsole"] test = ["packaging", "pickleshare", "pytest", "pytest-asyncio (<0.22)", "testpath"] test-extra = ["curio", "ipython[test]", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.23)", "pandas", "trio"] +[[package]] +name = "isodate" +version = "0.6.1" +description = "An ISO 8601 date/time/duration parser and formatter" +category = "main" +optional = false +python-versions = "*" +files = [ + {file = "isodate-0.6.1-py2.py3-none-any.whl", hash = "sha256:0751eece944162659049d35f4f549ed815792b38793f07cf73381c1c87cbed96"}, + {file = "isodate-0.6.1.tar.gz", hash = "sha256:48c5881de7e8b0a0d648cb024c8062dc84e7b840ed81e864c7614fd3c127bde9"}, +] + +[package.dependencies] +six = "*" + +[[package]] +name = "isoduration" +version = "20.11.0" +description = "Operations with ISO 8601 durations" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "isoduration-20.11.0-py3-none-any.whl", hash = "sha256:b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042"}, + {file = "isoduration-20.11.0.tar.gz", hash = "sha256:ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9"}, +] + +[package.dependencies] +arrow = ">=0.15.0" + [[package]] name = "jedi" version = "0.19.1" @@ -663,6 +1011,22 @@ MarkupSafe = ">=2.0" [package.extras] i18n = ["Babel (>=2.7)"] +[[package]] +name = "json-flattener" +version = "0.1.9" +description = "Python library for denormalizing nested dicts or json objects to tables and back" +category = "main" +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "json_flattener-0.1.9-py3-none-any.whl", hash = "sha256:6b027746f08bf37a75270f30c6690c7149d5f704d8af1740c346a3a1236bc941"}, + {file = "json_flattener-0.1.9.tar.gz", hash = "sha256:84cf8523045ffb124301a602602201665fcb003a171ece87e6f46ed02f7f0c15"}, +] + +[package.dependencies] +click = "*" +pyyaml = "*" + [[package]] name = "json2html" version = "1.3.0" @@ -674,6 +1038,63 @@ files = [ {file = "json2html-1.3.0.tar.gz", hash = "sha256:8951a53662ae9cfd812685facdba693fc950ffc1c1fd1a8a2d3cf4c34600689c"}, ] +[[package]] +name = "jsonasobj" +version = "1.3.1" +description = "JSON as python objects" +category = "main" +optional = false +python-versions = "*" +files = [ + {file = "jsonasobj-1.3.1-py3-none-any.whl", hash = "sha256:b9e329dc1ceaae7cf5d5b214684a0b100e0dad0be6d5bbabac281ec35ddeca65"}, + {file = "jsonasobj-1.3.1.tar.gz", hash = "sha256:d52e0544a54a08f6ea3f77fa3387271e3648655e0eace2f21e825c26370e44a2"}, +] + +[[package]] +name = "jsonasobj2" +version = "1.0.4" +description = "JSON as python objects - version 2" +category = "main" +optional = false +python-versions = ">=3.6" +files = [ + {file = "jsonasobj2-1.0.4-py3-none-any.whl", hash = "sha256:12e86f86324d54fcf60632db94ea74488d5314e3da554c994fe1e2c6f29acb79"}, + {file = "jsonasobj2-1.0.4.tar.gz", hash = "sha256:f50b1668ef478004aa487b2d2d094c304e5cb6b79337809f4a1f2975cc7fbb4e"}, +] + +[package.dependencies] +hbreader = "*" + +[[package]] +name = "jsonpatch" +version = "1.33" +description = "Apply JSON-Patches (RFC 6902)" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*" +files = [ + {file = "jsonpatch-1.33-py2.py3-none-any.whl", hash = "sha256:0ae28c0cd062bbd8b8ecc26d7d164fbbea9652a1a3693f3b956c1eae5145dade"}, + {file = "jsonpatch-1.33.tar.gz", hash = "sha256:9fcd4009c41e6d12348b4a0ff2563ba56a2923a7dfee731d004e212e1ee5030c"}, +] + +[package.dependencies] +jsonpointer = ">=1.9" + +[[package]] +name = "jsonpath-ng" +version = "1.6.1" +description = "A final implementation of JSONPath for Python that aims to be standard compliant, including arithmetic and binary comparison operators and providing clear AST for metaprogramming." +category = "main" +optional = false +python-versions = "*" +files = [ + {file = "jsonpath-ng-1.6.1.tar.gz", hash = "sha256:086c37ba4917304850bd837aeab806670224d3f038fe2833ff593a672ef0a5fa"}, + {file = "jsonpath_ng-1.6.1-py3-none-any.whl", hash = "sha256:8f22cd8273d7772eea9aaa84d922e0841aa36fdb8a2c6b7f6c3791a16a9bc0be"}, +] + +[package.dependencies] +ply = "*" + [[package]] name = "jsonpickle" version = "3.2.2" @@ -691,6 +1112,63 @@ docs = ["furo", "rst.linker (>=1.9)", "sphinx"] packaging = ["build", "twine"] testing = ["bson", "ecdsa", "feedparser", "gmpy2", "numpy", "pandas", "pymongo", "pytest (>=3.5,!=3.7.3)", "pytest-benchmark", "pytest-benchmark[histogram]", "pytest-checkdocs (>=1.2.3)", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-ruff (>=0.2.1)", "scikit-learn", "scipy", "scipy (>=1.9.3)", "simplejson", "sqlalchemy", "ujson"] +[[package]] +name = "jsonpointer" +version = "3.0.0" +description = "Identify specific nodes in a JSON document (RFC 6901)" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "jsonpointer-3.0.0-py2.py3-none-any.whl", hash = "sha256:13e088adc14fca8b6aa8177c044e12701e6ad4b28ff10e65f2267a90109c9942"}, + {file = "jsonpointer-3.0.0.tar.gz", hash = "sha256:2b2d729f2091522d61c3b31f82e11870f60b68f43fbc705cb76bf4b832af59ef"}, +] + +[[package]] +name = "jsonschema" +version = "4.22.0" +description = "An implementation of JSON Schema validation for Python" +category = "main" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jsonschema-4.22.0-py3-none-any.whl", hash = "sha256:ff4cfd6b1367a40e7bc6411caec72effadd3db0bbe5017de188f2d6108335802"}, + {file = "jsonschema-4.22.0.tar.gz", hash = "sha256:5b22d434a45935119af990552c862e5d6d564e8f6601206b305a61fdf661a2b7"}, +] + +[package.dependencies] +attrs = ">=22.2.0" +fqdn = {version = "*", optional = true, markers = "extra == \"format\""} +idna = {version = "*", optional = true, markers = "extra == \"format\""} +isoduration = {version = "*", optional = true, markers = "extra == \"format\""} +jsonpointer = {version = ">1.13", optional = true, markers = "extra == \"format\""} +jsonschema-specifications = ">=2023.03.6" +referencing = ">=0.28.4" +rfc3339-validator = {version = "*", optional = true, markers = "extra == \"format\""} +rfc3987 = {version = "*", optional = true, markers = "extra == \"format\""} +rpds-py = ">=0.7.1" +uri-template = {version = "*", optional = true, markers = "extra == \"format\""} +webcolors = {version = ">=1.11", optional = true, markers = "extra == \"format\""} + +[package.extras] +format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"] +format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"] + +[[package]] +name = "jsonschema-specifications" +version = "2023.12.1" +description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" +category = "main" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jsonschema_specifications-2023.12.1-py3-none-any.whl", hash = "sha256:87e4fdf3a94858b8a2ba2778d9ba57d8a9cafca7c7489c46ba0d30a8bc6a9c3c"}, + {file = "jsonschema_specifications-2023.12.1.tar.gz", hash = "sha256:48a76787b3e70f5ed53f1160d2b81f586e4ca6d1548c5de7085d1682674764cc"}, +] + +[package.dependencies] +referencing = ">=0.31.0" + [[package]] name = "kiwisolver" version = "1.4.5" @@ -805,6 +1283,95 @@ files = [ {file = "kiwisolver-1.4.5.tar.gz", hash = "sha256:e57e563a57fb22a142da34f38acc2fc1a5c864bc29ca1517a88abc963e60d6ec"}, ] +[[package]] +name = "linkml" +version = "1.8.1" +description = "Linked Open Data Modeling Language" +category = "main" +optional = false +python-versions = "<4.0.0,>=3.8.1" +files = [ + {file = "linkml-1.8.1-py3-none-any.whl", hash = "sha256:a68cb4f9bfa16353a4f84ae581db8272a5d151db46f1d6b601c87cb0be6e2d28"}, + {file = "linkml-1.8.1.tar.gz", hash = "sha256:19e53478119af11e7a6633d764c13dc9d849d3ff9e7d2efc87c9158041e7b7bb"}, +] + +[package.dependencies] +antlr4-python3-runtime = ">=4.9.0,<4.10" +click = ">=7.0" +graphviz = ">=0.10.1" +hbreader = "*" +isodate = ">=0.6.0" +jinja2 = ">=3.1.0" +jsonasobj2 = ">=1.0.3,<2.0.0" +jsonschema = {version = ">=4.0.0", extras = ["format"]} +linkml-dataops = "*" +linkml-runtime = "1.8.0" +openpyxl = "*" +parse = "*" +prefixcommons = ">=0.1.7" +prefixmaps = ">=0.2.2" +pydantic = ">=1.0.0,<3.0.0" +pyjsg = ">=0.11.6" +pyshex = ">=0.7.20" +pyshexc = ">=0.8.3" +python-dateutil = "*" +pyyaml = "*" +rdflib = ">=6.0.0" +requests = ">=2.22" +sqlalchemy = ">=1.4.31" +watchdog = ">=0.9.0" + +[package.extras] +black = ["black (>=24.0.0)"] +shacl = ["pyshacl (>=0.25.0,<0.26.0)"] +tests = ["black (>=24.0.0)", "pyshacl (>=0.25.0,<0.26.0)"] + +[[package]] +name = "linkml-dataops" +version = "0.1.0" +description = "LinkML Data Operations API" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "linkml_dataops-0.1.0-py3-none-any.whl", hash = "sha256:193cf7f659e5f07946d2c2761896910d5f7151d91282543b1363801f68307f4c"}, + {file = "linkml_dataops-0.1.0.tar.gz", hash = "sha256:4550eab65e78b70dc3b9c651724a94ac2b1d1edb2fbe576465f1d6951a54ed04"}, +] + +[package.dependencies] +jinja2 = "*" +jsonpatch = "*" +jsonpath-ng = "*" +linkml-runtime = ">=1.1.6" +"ruamel.yaml" = "*" + +[[package]] +name = "linkml-runtime" +version = "1.8.0" +description = "Runtime environment for LinkML, the Linked open data modeling language" +category = "main" +optional = false +python-versions = "<4.0,>=3.8" +files = [ + {file = "linkml_runtime-1.8.0-py3-none-any.whl", hash = "sha256:e99a809eda52640633f07a9e8b391d1a9da863eb68a475dfd74a79335b909931"}, + {file = "linkml_runtime-1.8.0.tar.gz", hash = "sha256:436381a7bf791e9af4ef0a5adcac86762d451b77670fbdb3ba083d2c177fb5f2"}, +] + +[package.dependencies] +click = "*" +curies = ">=0.5.4" +deprecated = "*" +hbreader = "*" +json-flattener = ">=0.1.9" +jsonasobj2 = ">=1.0.4,<2.dev0" +jsonschema = ">=3.2.0" +prefixcommons = ">=0.1.12" +prefixmaps = ">=0.1.4" +pydantic = ">=1.10.2,<3.0.0" +pyyaml = "*" +rdflib = ">=6.0.0" +requests = "*" + [[package]] name = "lxml" version = "4.9.4" @@ -914,6 +1481,31 @@ html5 = ["html5lib"] htmlsoup = ["BeautifulSoup4"] source = ["Cython (==0.29.37)"] +[[package]] +name = "markdown-it-py" +version = "3.0.0" +description = "Python port of markdown-it. Markdown parsing, done right!" +category = "main" +optional = false +python-versions = ">=3.8" +files = [ + {file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"}, + {file = "markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"}, +] + +[package.dependencies] +mdurl = ">=0.1,<1.0" + +[package.extras] +benchmarking = ["psutil", "pytest", "pytest-benchmark"] +code-style = ["pre-commit (>=3.0,<4.0)"] +compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "mistletoe (>=1.0,<2.0)", "mistune (>=2.0,<3.0)", "panflute (>=2.3,<3.0)"] +linkify = ["linkify-it-py (>=1,<3)"] +plugins = ["mdit-py-plugins"] +profiling = ["gprof2dot"] +rtd = ["jupyter_sphinx", "mdit-py-plugins", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] +testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] + [[package]] name = "markupsafe" version = "2.1.5" @@ -1064,6 +1656,18 @@ files = [ [package.dependencies] traitlets = "*" +[[package]] +name = "mdurl" +version = "0.1.2" +description = "Markdown URL utilities" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, + {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, +] + [[package]] name = "mirakuru" version = "2.5.2" @@ -1264,6 +1868,35 @@ files = [ {file = "numpy-2.0.0.tar.gz", hash = "sha256:cf5d1c9e6837f8af9f92b6bd3e86d513cdc11f60fd62185cc49ec7d1aba34864"}, ] +[[package]] +name = "openpyxl" +version = "3.1.5" +description = "A Python library to read/write Excel 2010 xlsx/xlsm files" +category = "main" +optional = false +python-versions = ">=3.8" +files = [ + {file = "openpyxl-3.1.5-py2.py3-none-any.whl", hash = "sha256:5282c12b107bffeef825f4617dc029afaf41d0ea60823bbb665ef3079dc79de2"}, + {file = "openpyxl-3.1.5.tar.gz", hash = "sha256:cf0e3cf56142039133628b5acffe8ef0c12bc902d2aadd3e0fe5878dc08d1050"}, +] + +[package.dependencies] +et-xmlfile = "*" + +[[package]] +name = "owlready2" +version = "0.46" +description = "A package for ontology-oriented programming in Python: load OWL 2.0 ontologies as Python objects, modify them, save them, and perform reasoning via HermiT. Includes an optimized RDF quadstore." +category = "main" +optional = false +python-versions = ">=3.6" +files = [ + {file = "owlready2-0.46.tar.gz", hash = "sha256:3c1b06dbe85df77dfa2de5a13ba1d11b4b8543c1c0ccdc5be252a81e3c0de55a"}, +] + +[package.extras] +test = ["flask", "gevent", "rdflib"] + [[package]] name = "packaging" version = "24.1" @@ -1369,6 +2002,18 @@ numpy = [ ] types-pytz = ">=2022.1.1" +[[package]] +name = "parse" +version = "1.20.2" +description = "parse() is the opposite of format()" +category = "main" +optional = false +python-versions = "*" +files = [ + {file = "parse-1.20.2-py2.py3-none-any.whl", hash = "sha256:967095588cb802add9177d0c0b6133b5ba33b1ea9007ca800e526f42a85af558"}, + {file = "parse-1.20.2.tar.gz", hash = "sha256:b41d604d16503c79d81af5165155c0b20f6c8d6c559efa66b4b695c3e5a0a0ce"}, +] + [[package]] name = "parso" version = "0.8.4" @@ -1547,6 +2192,18 @@ files = [ dev = ["pre-commit", "tox"] testing = ["pytest", "pytest-benchmark"] +[[package]] +name = "ply" +version = "3.11" +description = "Python Lex & Yacc" +category = "main" +optional = false +python-versions = "*" +files = [ + {file = "ply-3.11-py2.py3-none-any.whl", hash = "sha256:096f9b8350b65ebd2fd1346b12452efe5b9607f7482813ffca50c22722a807ce"}, + {file = "ply-3.11.tar.gz", hash = "sha256:00c7c1aaa88358b9c765b6d3000c6eec0ba42abca5351b095321aef446081da3"}, +] + [[package]] name = "port-for" version = "0.7.2" @@ -1578,6 +2235,40 @@ nodeenv = ">=0.11.1" pyyaml = ">=5.1" virtualenv = ">=20.10.0" +[[package]] +name = "prefixcommons" +version = "0.1.12" +description = "A python API for working with ID prefixes" +category = "main" +optional = false +python-versions = ">=3.7,<4.0" +files = [ + {file = "prefixcommons-0.1.12-py3-none-any.whl", hash = "sha256:16dbc0a1f775e003c724f19a694fcfa3174608f5c8b0e893d494cf8098ac7f8b"}, + {file = "prefixcommons-0.1.12.tar.gz", hash = "sha256:22c4e2d37b63487b3ab48f0495b70f14564cb346a15220f23919eb0c1851f69f"}, +] + +[package.dependencies] +click = ">=8.1.3,<9.0.0" +pytest-logging = ">=2015.11.4,<2016.0.0" +PyYAML = ">=6.0,<7.0" +requests = ">=2.28.1,<3.0.0" + +[[package]] +name = "prefixmaps" +version = "0.2.4" +description = "A python library for retrieving semantic prefix maps" +category = "main" +optional = false +python-versions = "<4.0,>=3.8" +files = [ + {file = "prefixmaps-0.2.4-py3-none-any.whl", hash = "sha256:89bf0e6fb08c276f754f9624c42adf2e87c64ee92a3dde1f7eff01f22d85b512"}, + {file = "prefixmaps-0.2.4.tar.gz", hash = "sha256:ae86a1b31189d0516d199756d5808f75f44b39e86546c356cc78c0fe8d2078af"}, +] + +[package.dependencies] +curies = ">=0.5.3" +pyyaml = ">=5.3.1" + [[package]] name = "prompt-toolkit" version = "3.0.47" @@ -1652,19 +2343,19 @@ tests = ["pytest"] [[package]] name = "pydantic" -version = "2.8.0" +version = "2.8.2" description = "Data validation using Python type hints" category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic-2.8.0-py3-none-any.whl", hash = "sha256:ead4f3a1e92386a734ca1411cb25d94147cf8778ed5be6b56749047676d6364e"}, - {file = "pydantic-2.8.0.tar.gz", hash = "sha256:d970ffb9d030b710795878940bd0489842c638e7252fc4a19c3ae2f7da4d6141"}, + {file = "pydantic-2.8.2-py3-none-any.whl", hash = "sha256:73ee9fddd406dc318b885c7a2eab8a6472b68b8fb5ba8150949fc3db939f23c8"}, + {file = "pydantic-2.8.2.tar.gz", hash = "sha256:6f62c13d067b0755ad1c21a34bdd06c0c12625a22b0fc09c6b149816604f7c2a"}, ] [package.dependencies] annotated-types = ">=0.4.0" -pydantic-core = "2.20.0" +pydantic-core = "2.20.1" typing-extensions = [ {version = ">=4.6.1", markers = "python_version < \"3.13\""}, {version = ">=4.12.2", markers = "python_version >= \"3.13\""}, @@ -1675,100 +2366,101 @@ email = ["email-validator (>=2.0.0)"] [[package]] name = "pydantic-core" -version = "2.20.0" +version = "2.20.1" description = "Core functionality for Pydantic validation and serialization" category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic_core-2.20.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:e9dcd7fb34f7bfb239b5fa420033642fff0ad676b765559c3737b91f664d4fa9"}, - {file = "pydantic_core-2.20.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:649a764d9b0da29816889424697b2a3746963ad36d3e0968784ceed6e40c6355"}, - {file = "pydantic_core-2.20.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7701df088d0b05f3460f7ba15aec81ac8b0fb5690367dfd072a6c38cf5b7fdb5"}, - {file = "pydantic_core-2.20.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ab760f17c3e792225cdaef31ca23c0aea45c14ce80d8eff62503f86a5ab76bff"}, - {file = "pydantic_core-2.20.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cb1ad5b4d73cde784cf64580166568074f5ccd2548d765e690546cff3d80937d"}, - {file = "pydantic_core-2.20.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b81ec2efc04fc1dbf400647d4357d64fb25543bae38d2d19787d69360aad21c9"}, - {file = "pydantic_core-2.20.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c4a9732a5cad764ba37f3aa873dccb41b584f69c347a57323eda0930deec8e10"}, - {file = "pydantic_core-2.20.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6dc85b9e10cc21d9c1055f15684f76fa4facadddcb6cd63abab702eb93c98943"}, - {file = "pydantic_core-2.20.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:21d9f7e24f63fdc7118e6cc49defaab8c1d27570782f7e5256169d77498cf7c7"}, - {file = "pydantic_core-2.20.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8b315685832ab9287e6124b5d74fc12dda31e6421d7f6b08525791452844bc2d"}, - {file = "pydantic_core-2.20.0-cp310-none-win32.whl", hash = "sha256:c3dc8ec8b87c7ad534c75b8855168a08a7036fdb9deeeed5705ba9410721c84d"}, - {file = "pydantic_core-2.20.0-cp310-none-win_amd64.whl", hash = "sha256:85770b4b37bb36ef93a6122601795231225641003e0318d23c6233c59b424279"}, - {file = "pydantic_core-2.20.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:58e251bb5a5998f7226dc90b0b753eeffa720bd66664eba51927c2a7a2d5f32c"}, - {file = "pydantic_core-2.20.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:78d584caac52c24240ef9ecd75de64c760bbd0e20dbf6973631815e3ef16ef8b"}, - {file = "pydantic_core-2.20.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5084ec9721f82bef5ff7c4d1ee65e1626783abb585f8c0993833490b63fe1792"}, - {file = "pydantic_core-2.20.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6d0f52684868db7c218437d260e14d37948b094493f2646f22d3dda7229bbe3f"}, - {file = "pydantic_core-2.20.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1def125d59a87fe451212a72ab9ed34c118ff771e5473fef4f2f95d8ede26d75"}, - {file = "pydantic_core-2.20.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b34480fd6778ab356abf1e9086a4ced95002a1e195e8d2fd182b0def9d944d11"}, - {file = "pydantic_core-2.20.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d42669d319db366cb567c3b444f43caa7ffb779bf9530692c6f244fc635a41eb"}, - {file = "pydantic_core-2.20.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:53b06aea7a48919a254b32107647be9128c066aaa6ee6d5d08222325f25ef175"}, - {file = "pydantic_core-2.20.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:1f038156b696a1c39d763b2080aeefa87ddb4162c10aa9fabfefffc3dd8180fa"}, - {file = "pydantic_core-2.20.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3f0f3a4a23717280a5ee3ac4fb1f81d6fde604c9ec5100f7f6f987716bb8c137"}, - {file = "pydantic_core-2.20.0-cp311-none-win32.whl", hash = "sha256:316fe7c3fec017affd916a0c83d6f1ec697cbbbdf1124769fa73328e7907cc2e"}, - {file = "pydantic_core-2.20.0-cp311-none-win_amd64.whl", hash = "sha256:2d06a7fa437f93782e3f32d739c3ec189f82fca74336c08255f9e20cea1ed378"}, - {file = "pydantic_core-2.20.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:d6f8c49657f3eb7720ed4c9b26624063da14937fc94d1812f1e04a2204db3e17"}, - {file = "pydantic_core-2.20.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ad1bd2f377f56fec11d5cfd0977c30061cd19f4fa199bf138b200ec0d5e27eeb"}, - {file = "pydantic_core-2.20.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ed741183719a5271f97d93bbcc45ed64619fa38068aaa6e90027d1d17e30dc8d"}, - {file = "pydantic_core-2.20.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d82e5ed3a05f2dcb89c6ead2fd0dbff7ac09bc02c1b4028ece2d3a3854d049ce"}, - {file = "pydantic_core-2.20.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b2ba34a099576234671f2e4274e5bc6813b22e28778c216d680eabd0db3f7dad"}, - {file = "pydantic_core-2.20.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:879ae6bb08a063b3e1b7ac8c860096d8fd6b48dd9b2690b7f2738b8c835e744b"}, - {file = "pydantic_core-2.20.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b0eefc7633a04c0694340aad91fbfd1986fe1a1e0c63a22793ba40a18fcbdc8"}, - {file = "pydantic_core-2.20.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:73deadd6fd8a23e2f40b412b3ac617a112143c8989a4fe265050fd91ba5c0608"}, - {file = "pydantic_core-2.20.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:35681445dc85446fb105943d81ae7569aa7e89de80d1ca4ac3229e05c311bdb1"}, - {file = "pydantic_core-2.20.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:0f6dd3612a3b9f91f2e63924ea18a4476656c6d01843ca20a4c09e00422195af"}, - {file = "pydantic_core-2.20.0-cp312-none-win32.whl", hash = "sha256:7e37b6bb6e90c2b8412b06373c6978d9d81e7199a40e24a6ef480e8acdeaf918"}, - {file = "pydantic_core-2.20.0-cp312-none-win_amd64.whl", hash = "sha256:7d4df13d1c55e84351fab51383520b84f490740a9f1fec905362aa64590b7a5d"}, - {file = "pydantic_core-2.20.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:d43e7ab3b65e4dc35a7612cfff7b0fd62dce5bc11a7cd198310b57f39847fd6c"}, - {file = "pydantic_core-2.20.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b6a24d7b5893392f2b8e3b7a0031ae3b14c6c1942a4615f0d8794fdeeefb08b"}, - {file = "pydantic_core-2.20.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b2f13c3e955a087c3ec86f97661d9f72a76e221281b2262956af381224cfc243"}, - {file = "pydantic_core-2.20.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:72432fd6e868c8d0a6849869e004b8bcae233a3c56383954c228316694920b38"}, - {file = "pydantic_core-2.20.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d70a8ff2d4953afb4cbe6211f17268ad29c0b47e73d3372f40e7775904bc28fc"}, - {file = "pydantic_core-2.20.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e49524917b8d3c2f42cd0d2df61178e08e50f5f029f9af1f402b3ee64574392"}, - {file = "pydantic_core-2.20.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a4f0f71653b1c1bad0350bc0b4cc057ab87b438ff18fa6392533811ebd01439c"}, - {file = "pydantic_core-2.20.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:16197e6f4fdecb9892ed2436e507e44f0a1aa2cff3b9306d1c879ea2f9200997"}, - {file = "pydantic_core-2.20.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:763602504bf640b3ded3bba3f8ed8a1cc2fc6a87b8d55c1c5689f428c49c947e"}, - {file = "pydantic_core-2.20.0-cp313-none-win32.whl", hash = "sha256:a3f243f318bd9523277fa123b3163f4c005a3e8619d4b867064de02f287a564d"}, - {file = "pydantic_core-2.20.0-cp313-none-win_amd64.whl", hash = "sha256:03aceaf6a5adaad3bec2233edc5a7905026553916615888e53154807e404545c"}, - {file = "pydantic_core-2.20.0-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:d6f2d8b8da1f03f577243b07bbdd3412eee3d37d1f2fd71d1513cbc76a8c1239"}, - {file = "pydantic_core-2.20.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a272785a226869416c6b3c1b7e450506152d3844207331f02f27173562c917e0"}, - {file = "pydantic_core-2.20.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:efbb412d55a4ffe73963fed95c09ccb83647ec63b711c4b3752be10a56f0090b"}, - {file = "pydantic_core-2.20.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1e4f46189d8740561b43655263a41aac75ff0388febcb2c9ec4f1b60a0ec12f3"}, - {file = "pydantic_core-2.20.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:87d3df115f4a3c8c5e4d5acf067d399c6466d7e604fc9ee9acbe6f0c88a0c3cf"}, - {file = "pydantic_core-2.20.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a340d2bdebe819d08f605e9705ed551c3feb97e4fd71822d7147c1e4bdbb9508"}, - {file = "pydantic_core-2.20.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:616b9c2f882393d422ba11b40e72382fe975e806ad693095e9a3b67c59ea6150"}, - {file = "pydantic_core-2.20.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:25c46bb2ff6084859bbcfdf4f1a63004b98e88b6d04053e8bf324e115398e9e7"}, - {file = "pydantic_core-2.20.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:23425eccef8f2c342f78d3a238c824623836c6c874d93c726673dbf7e56c78c0"}, - {file = "pydantic_core-2.20.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:52527e8f223ba29608d999d65b204676398009725007c9336651c2ec2d93cffc"}, - {file = "pydantic_core-2.20.0-cp38-none-win32.whl", hash = "sha256:1c3c5b7f70dd19a6845292b0775295ea81c61540f68671ae06bfe4421b3222c2"}, - {file = "pydantic_core-2.20.0-cp38-none-win_amd64.whl", hash = "sha256:8093473d7b9e908af1cef30025609afc8f5fd2a16ff07f97440fd911421e4432"}, - {file = "pydantic_core-2.20.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:ee7785938e407418795e4399b2bf5b5f3cf6cf728077a7f26973220d58d885cf"}, - {file = "pydantic_core-2.20.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0e75794883d635071cf6b4ed2a5d7a1e50672ab7a051454c76446ef1ebcdcc91"}, - {file = "pydantic_core-2.20.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:344e352c96e53b4f56b53d24728217c69399b8129c16789f70236083c6ceb2ac"}, - {file = "pydantic_core-2.20.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:978d4123ad1e605daf1ba5e01d4f235bcf7b6e340ef07e7122e8e9cfe3eb61ab"}, - {file = "pydantic_core-2.20.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3c05eaf6c863781eb834ab41f5963604ab92855822a2062897958089d1335dad"}, - {file = "pydantic_core-2.20.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bc7e43b4a528ffca8c9151b6a2ca34482c2fdc05e6aa24a84b7f475c896fc51d"}, - {file = "pydantic_core-2.20.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:658287a29351166510ebbe0a75c373600cc4367a3d9337b964dada8d38bcc0f4"}, - {file = "pydantic_core-2.20.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1dacf660d6de692fe351e8c806e7efccf09ee5184865893afbe8e59be4920b4a"}, - {file = "pydantic_core-2.20.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:3e147fc6e27b9a487320d78515c5f29798b539179f7777018cedf51b7749e4f4"}, - {file = "pydantic_core-2.20.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c867230d715a3dd1d962c8d9bef0d3168994ed663e21bf748b6e3a529a129aab"}, - {file = "pydantic_core-2.20.0-cp39-none-win32.whl", hash = "sha256:22b813baf0dbf612752d8143a2dbf8e33ccb850656b7850e009bad2e101fc377"}, - {file = "pydantic_core-2.20.0-cp39-none-win_amd64.whl", hash = "sha256:3a7235b46c1bbe201f09b6f0f5e6c36b16bad3d0532a10493742f91fbdc8035f"}, - {file = "pydantic_core-2.20.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:cafde15a6f7feaec2f570646e2ffc5b73412295d29134a29067e70740ec6ee20"}, - {file = "pydantic_core-2.20.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:2aec8eeea0b08fd6bc2213d8e86811a07491849fd3d79955b62d83e32fa2ad5f"}, - {file = "pydantic_core-2.20.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:840200827984f1c4e114008abc2f5ede362d6e11ed0b5931681884dd41852ff1"}, - {file = "pydantic_core-2.20.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8ea1d8b7df522e5ced34993c423c3bf3735c53df8b2a15688a2f03a7d678800"}, - {file = "pydantic_core-2.20.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d5b8376a867047bf08910573deb95d3c8dfb976eb014ee24f3b5a61ccc5bee1b"}, - {file = "pydantic_core-2.20.0-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:d08264b4460326cefacc179fc1411304d5af388a79910832835e6f641512358b"}, - {file = "pydantic_core-2.20.0-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:7a3639011c2e8a9628466f616ed7fb413f30032b891898e10895a0a8b5857d6c"}, - {file = "pydantic_core-2.20.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:05e83ce2f7eba29e627dd8066aa6c4c0269b2d4f889c0eba157233a353053cea"}, - {file = "pydantic_core-2.20.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:603a843fea76a595c8f661cd4da4d2281dff1e38c4a836a928eac1a2f8fe88e4"}, - {file = "pydantic_core-2.20.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:ac76f30d5d3454f4c28826d891fe74d25121a346c69523c9810ebba43f3b1cec"}, - {file = "pydantic_core-2.20.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22e3b1d4b1b3f6082849f9b28427ef147a5b46a6132a3dbaf9ca1baa40c88609"}, - {file = "pydantic_core-2.20.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2761f71faed820e25ec62eacba670d1b5c2709bb131a19fcdbfbb09884593e5a"}, - {file = "pydantic_core-2.20.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a0586cddbf4380e24569b8a05f234e7305717cc8323f50114dfb2051fcbce2a3"}, - {file = "pydantic_core-2.20.0-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:b8c46a8cf53e849eea7090f331ae2202cd0f1ceb090b00f5902c423bd1e11805"}, - {file = "pydantic_core-2.20.0-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:b4a085bd04af7245e140d1b95619fe8abb445a3d7fdf219b3f80c940853268ef"}, - {file = "pydantic_core-2.20.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:116b326ac82c8b315e7348390f6d30bcfe6e688a7d3f1de50ff7bcc2042a23c2"}, - {file = "pydantic_core-2.20.0.tar.gz", hash = "sha256:366be8e64e0cb63d87cf79b4e1765c0703dd6313c729b22e7b9e378db6b96877"}, + {file = "pydantic_core-2.20.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:3acae97ffd19bf091c72df4d726d552c473f3576409b2a7ca36b2f535ffff4a3"}, + {file = "pydantic_core-2.20.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:41f4c96227a67a013e7de5ff8f20fb496ce573893b7f4f2707d065907bffdbd6"}, + {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f239eb799a2081495ea659d8d4a43a8f42cd1fe9ff2e7e436295c38a10c286a"}, + {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:53e431da3fc53360db73eedf6f7124d1076e1b4ee4276b36fb25514544ceb4a3"}, + {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f1f62b2413c3a0e846c3b838b2ecd6c7a19ec6793b2a522745b0869e37ab5bc1"}, + {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5d41e6daee2813ecceea8eda38062d69e280b39df793f5a942fa515b8ed67953"}, + {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d482efec8b7dc6bfaedc0f166b2ce349df0011f5d2f1f25537ced4cfc34fd98"}, + {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e93e1a4b4b33daed65d781a57a522ff153dcf748dee70b40c7258c5861e1768a"}, + {file = "pydantic_core-2.20.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e7c4ea22b6739b162c9ecaaa41d718dfad48a244909fe7ef4b54c0b530effc5a"}, + {file = "pydantic_core-2.20.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4f2790949cf385d985a31984907fecb3896999329103df4e4983a4a41e13e840"}, + {file = "pydantic_core-2.20.1-cp310-none-win32.whl", hash = "sha256:5e999ba8dd90e93d57410c5e67ebb67ffcaadcea0ad973240fdfd3a135506250"}, + {file = "pydantic_core-2.20.1-cp310-none-win_amd64.whl", hash = "sha256:512ecfbefef6dac7bc5eaaf46177b2de58cdf7acac8793fe033b24ece0b9566c"}, + {file = "pydantic_core-2.20.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d2a8fa9d6d6f891f3deec72f5cc668e6f66b188ab14bb1ab52422fe8e644f312"}, + {file = "pydantic_core-2.20.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:175873691124f3d0da55aeea1d90660a6ea7a3cfea137c38afa0a5ffabe37b88"}, + {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:37eee5b638f0e0dcd18d21f59b679686bbd18917b87db0193ae36f9c23c355fc"}, + {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:25e9185e2d06c16ee438ed39bf62935ec436474a6ac4f9358524220f1b236e43"}, + {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:150906b40ff188a3260cbee25380e7494ee85048584998c1e66df0c7a11c17a6"}, + {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ad4aeb3e9a97286573c03df758fc7627aecdd02f1da04516a86dc159bf70121"}, + {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3f3ed29cd9f978c604708511a1f9c2fdcb6c38b9aae36a51905b8811ee5cbf1"}, + {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b0dae11d8f5ded51699c74d9548dcc5938e0804cc8298ec0aa0da95c21fff57b"}, + {file = "pydantic_core-2.20.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:faa6b09ee09433b87992fb5a2859efd1c264ddc37280d2dd5db502126d0e7f27"}, + {file = "pydantic_core-2.20.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9dc1b507c12eb0481d071f3c1808f0529ad41dc415d0ca11f7ebfc666e66a18b"}, + {file = "pydantic_core-2.20.1-cp311-none-win32.whl", hash = "sha256:fa2fddcb7107e0d1808086ca306dcade7df60a13a6c347a7acf1ec139aa6789a"}, + {file = "pydantic_core-2.20.1-cp311-none-win_amd64.whl", hash = "sha256:40a783fb7ee353c50bd3853e626f15677ea527ae556429453685ae32280c19c2"}, + {file = "pydantic_core-2.20.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:595ba5be69b35777474fa07f80fc260ea71255656191adb22a8c53aba4479231"}, + {file = "pydantic_core-2.20.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a4f55095ad087474999ee28d3398bae183a66be4823f753cd7d67dd0153427c9"}, + {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f9aa05d09ecf4c75157197f27cdc9cfaeb7c5f15021c6373932bf3e124af029f"}, + {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e97fdf088d4b31ff4ba35db26d9cc472ac7ef4a2ff2badeabf8d727b3377fc52"}, + {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bc633a9fe1eb87e250b5c57d389cf28998e4292336926b0b6cdaee353f89a237"}, + {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d573faf8eb7e6b1cbbcb4f5b247c60ca8be39fe2c674495df0eb4318303137fe"}, + {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26dc97754b57d2fd00ac2b24dfa341abffc380b823211994c4efac7f13b9e90e"}, + {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:33499e85e739a4b60c9dac710c20a08dc73cb3240c9a0e22325e671b27b70d24"}, + {file = "pydantic_core-2.20.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:bebb4d6715c814597f85297c332297c6ce81e29436125ca59d1159b07f423eb1"}, + {file = "pydantic_core-2.20.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:516d9227919612425c8ef1c9b869bbbee249bc91912c8aaffb66116c0b447ebd"}, + {file = "pydantic_core-2.20.1-cp312-none-win32.whl", hash = "sha256:469f29f9093c9d834432034d33f5fe45699e664f12a13bf38c04967ce233d688"}, + {file = "pydantic_core-2.20.1-cp312-none-win_amd64.whl", hash = "sha256:035ede2e16da7281041f0e626459bcae33ed998cca6a0a007a5ebb73414ac72d"}, + {file = "pydantic_core-2.20.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:0827505a5c87e8aa285dc31e9ec7f4a17c81a813d45f70b1d9164e03a813a686"}, + {file = "pydantic_core-2.20.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:19c0fa39fa154e7e0b7f82f88ef85faa2a4c23cc65aae2f5aea625e3c13c735a"}, + {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa223cd1e36b642092c326d694d8bf59b71ddddc94cdb752bbbb1c5c91d833b"}, + {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c336a6d235522a62fef872c6295a42ecb0c4e1d0f1a3e500fe949415761b8a19"}, + {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7eb6a0587eded33aeefea9f916899d42b1799b7b14b8f8ff2753c0ac1741edac"}, + {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:70c8daf4faca8da5a6d655f9af86faf6ec2e1768f4b8b9d0226c02f3d6209703"}, + {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e9fa4c9bf273ca41f940bceb86922a7667cd5bf90e95dbb157cbb8441008482c"}, + {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:11b71d67b4725e7e2a9f6e9c0ac1239bbc0c48cce3dc59f98635efc57d6dac83"}, + {file = "pydantic_core-2.20.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:270755f15174fb983890c49881e93f8f1b80f0b5e3a3cc1394a255706cabd203"}, + {file = "pydantic_core-2.20.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:c81131869240e3e568916ef4c307f8b99583efaa60a8112ef27a366eefba8ef0"}, + {file = "pydantic_core-2.20.1-cp313-none-win32.whl", hash = "sha256:b91ced227c41aa29c672814f50dbb05ec93536abf8f43cd14ec9521ea09afe4e"}, + {file = "pydantic_core-2.20.1-cp313-none-win_amd64.whl", hash = "sha256:65db0f2eefcaad1a3950f498aabb4875c8890438bc80b19362cf633b87a8ab20"}, + {file = "pydantic_core-2.20.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:4745f4ac52cc6686390c40eaa01d48b18997cb130833154801a442323cc78f91"}, + {file = "pydantic_core-2.20.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a8ad4c766d3f33ba8fd692f9aa297c9058970530a32c728a2c4bfd2616d3358b"}, + {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41e81317dd6a0127cabce83c0c9c3fbecceae981c8391e6f1dec88a77c8a569a"}, + {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:04024d270cf63f586ad41fff13fde4311c4fc13ea74676962c876d9577bcc78f"}, + {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eaad4ff2de1c3823fddf82f41121bdf453d922e9a238642b1dedb33c4e4f98ad"}, + {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:26ab812fa0c845df815e506be30337e2df27e88399b985d0bb4e3ecfe72df31c"}, + {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c5ebac750d9d5f2706654c638c041635c385596caf68f81342011ddfa1e5598"}, + {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2aafc5a503855ea5885559eae883978c9b6d8c8993d67766ee73d82e841300dd"}, + {file = "pydantic_core-2.20.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:4868f6bd7c9d98904b748a2653031fc9c2f85b6237009d475b1008bfaeb0a5aa"}, + {file = "pydantic_core-2.20.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:aa2f457b4af386254372dfa78a2eda2563680d982422641a85f271c859df1987"}, + {file = "pydantic_core-2.20.1-cp38-none-win32.whl", hash = "sha256:225b67a1f6d602de0ce7f6c1c3ae89a4aa25d3de9be857999e9124f15dab486a"}, + {file = "pydantic_core-2.20.1-cp38-none-win_amd64.whl", hash = "sha256:6b507132dcfc0dea440cce23ee2182c0ce7aba7054576efc65634f080dbe9434"}, + {file = "pydantic_core-2.20.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:b03f7941783b4c4a26051846dea594628b38f6940a2fdc0df00b221aed39314c"}, + {file = "pydantic_core-2.20.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1eedfeb6089ed3fad42e81a67755846ad4dcc14d73698c120a82e4ccf0f1f9f6"}, + {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:635fee4e041ab9c479e31edda27fcf966ea9614fff1317e280d99eb3e5ab6fe2"}, + {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:77bf3ac639c1ff567ae3b47f8d4cc3dc20f9966a2a6dd2311dcc055d3d04fb8a"}, + {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7ed1b0132f24beeec5a78b67d9388656d03e6a7c837394f99257e2d55b461611"}, + {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c6514f963b023aeee506678a1cf821fe31159b925c4b76fe2afa94cc70b3222b"}, + {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10d4204d8ca33146e761c79f83cc861df20e7ae9f6487ca290a97702daf56006"}, + {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2d036c7187b9422ae5b262badb87a20a49eb6c5238b2004e96d4da1231badef1"}, + {file = "pydantic_core-2.20.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9ebfef07dbe1d93efb94b4700f2d278494e9162565a54f124c404a5656d7ff09"}, + {file = "pydantic_core-2.20.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6b9d9bb600328a1ce523ab4f454859e9d439150abb0906c5a1983c146580ebab"}, + {file = "pydantic_core-2.20.1-cp39-none-win32.whl", hash = "sha256:784c1214cb6dd1e3b15dd8b91b9a53852aed16671cc3fbe4786f4f1db07089e2"}, + {file = "pydantic_core-2.20.1-cp39-none-win_amd64.whl", hash = "sha256:d2fe69c5434391727efa54b47a1e7986bb0186e72a41b203df8f5b0a19a4f669"}, + {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:a45f84b09ac9c3d35dfcf6a27fd0634d30d183205230a0ebe8373a0e8cfa0906"}, + {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d02a72df14dfdbaf228424573a07af10637bd490f0901cee872c4f434a735b94"}, + {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d2b27e6af28f07e2f195552b37d7d66b150adbaa39a6d327766ffd695799780f"}, + {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:084659fac3c83fd674596612aeff6041a18402f1e1bc19ca39e417d554468482"}, + {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:242b8feb3c493ab78be289c034a1f659e8826e2233786e36f2893a950a719bb6"}, + {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:38cf1c40a921d05c5edc61a785c0ddb4bed67827069f535d794ce6bcded919fc"}, + {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:e0bbdd76ce9aa5d4209d65f2b27fc6e5ef1312ae6c5333c26db3f5ade53a1e99"}, + {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:254ec27fdb5b1ee60684f91683be95e5133c994cc54e86a0b0963afa25c8f8a6"}, + {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:407653af5617f0757261ae249d3fba09504d7a71ab36ac057c938572d1bc9331"}, + {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:c693e916709c2465b02ca0ad7b387c4f8423d1db7b4649c551f27a529181c5ad"}, + {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5b5ff4911aea936a47d9376fd3ab17e970cc543d1b68921886e7f64bd28308d1"}, + {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:177f55a886d74f1808763976ac4efd29b7ed15c69f4d838bbd74d9d09cf6fa86"}, + {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:964faa8a861d2664f0c7ab0c181af0bea66098b1919439815ca8803ef136fc4e"}, + {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:4dd484681c15e6b9a977c785a345d3e378d72678fd5f1f3c0509608da24f2ac0"}, + {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f6d6cff3538391e8486a431569b77921adfcdef14eb18fbf19b7c0a5294d4e6a"}, + {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a6d511cc297ff0883bc3708b465ff82d7560193169a8b93260f74ecb0a5e08a7"}, + {file = "pydantic_core-2.20.1.tar.gz", hash = "sha256:26ca695eeee5f9f1aeeb211ffc12f10bcb6f71e2989988fda61dabd65db878d4"}, ] [package.dependencies] @@ -1804,6 +2496,22 @@ files = [ [package.extras] windows-terminal = ["colorama (>=0.4.6)"] +[[package]] +name = "pyjsg" +version = "0.11.10" +description = "Python JSON Schema Grammar interpreter" +category = "main" +optional = false +python-versions = "*" +files = [ + {file = "PyJSG-0.11.10-py3-none-any.whl", hash = "sha256:10af60ff42219be7e85bf7f11c19b648715b0b29eb2ddbd269e87069a7c3f26d"}, + {file = "PyJSG-0.11.10.tar.gz", hash = "sha256:4bd6e3ff2833fa2b395bbe803a2d72a5f0bab5b7285bccd0da1a1bc0aee88bfa"}, +] + +[package.dependencies] +antlr4-python3-runtime = ">=4.9.3,<4.10.0" +jsonasobj = ">=1.2.1" + [[package]] name = "pymongo" version = "4.8.0" @@ -1892,6 +2600,49 @@ files = [ [package.extras] diagrams = ["jinja2", "railroad-diagrams"] +[[package]] +name = "pyshex" +version = "0.8.1" +description = "Python ShEx Implementation" +category = "main" +optional = false +python-versions = ">=3.6" +files = [ + {file = "PyShEx-0.8.1-py3-none-any.whl", hash = "sha256:6da1b10123e191abf8dcb6bf3e54aa3e1fcf771df5d1a0ed453217c8900c8e6a"}, + {file = "PyShEx-0.8.1.tar.gz", hash = "sha256:3c5c4d45fe27faaadae803cb008c41acf8ee784da7868b04fd84967e75be70d0"}, +] + +[package.dependencies] +cfgraph = ">=0.2.1" +chardet = "*" +pyshexc = "0.9.1" +rdflib-shim = "*" +requests = ">=2.22.0" +shexjsg = ">=0.8.2" +sparqlslurper = ">=0.5.1" +sparqlwrapper = ">=1.8.5" +urllib3 = "*" + +[[package]] +name = "pyshexc" +version = "0.9.1" +description = "PyShExC - Python ShEx compiler" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "PyShExC-0.9.1-py2.py3-none-any.whl", hash = "sha256:efc55ed5cb2453e9df569b03e282505e96bb06597934288f3b23dd980ef10028"}, + {file = "PyShExC-0.9.1.tar.gz", hash = "sha256:35a9975d4b9afeb20ef710fb6680871756381d0c39fbb5470b3b506581a304d3"}, +] + +[package.dependencies] +antlr4-python3-runtime = ">=4.9.3,<4.10.0" +chardet = "*" +jsonasobj = ">=1.2.1" +pyjsg = ">=0.11.10" +rdflib-shim = "*" +shexjsg = ">=0.8.1" + [[package]] name = "pytest" version = "7.4.4" @@ -1915,6 +2666,20 @@ tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} [package.extras] testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] +[[package]] +name = "pytest-logging" +version = "2015.11.4" +description = "Configures logging and allows tweaking the log level with a py.test flag" +category = "main" +optional = false +python-versions = "*" +files = [ + {file = "pytest-logging-2015.11.4.tar.gz", hash = "sha256:cec5c85ecf18aab7b2ead5498a31b9f758680ef5a902b9054ab3f2bdbb77c896"}, +] + +[package.dependencies] +pytest = ">=2.8.1" + [[package]] name = "pytest-mongo" version = "3.1.0" @@ -1980,6 +2745,24 @@ files = [ lxml = ">=3.1.0" typing-extensions = ">=4.9.0" +[[package]] +name = "python-slugify" +version = "8.0.4" +description = "A Python slugify application that also handles Unicode" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "python-slugify-8.0.4.tar.gz", hash = "sha256:59202371d1d05b54a9e7720c5e038f928f45daaffe41dd10822f3907b937c856"}, + {file = "python_slugify-8.0.4-py2.py3-none-any.whl", hash = "sha256:276540b79961052b66b7d116620b36518847f52d5fd9e3a70164fc8c50faa6b8"}, +] + +[package.dependencies] +text-unidecode = ">=1.3" + +[package.extras] +unidecode = ["Unidecode (>=1.1.1)"] + [[package]] name = "pytidylib" version = "0.3.2" @@ -1991,6 +2774,21 @@ files = [ {file = "pytidylib-0.3.2.tar.gz", hash = "sha256:22b1c8d75970d8064ff999c2369e98af1d0685417eda4c829a5c9f56764b0af3"}, ] +[[package]] +name = "pytrie" +version = "0.4.0" +description = "A pure Python implementation of the trie data structure." +category = "main" +optional = false +python-versions = "*" +files = [ + {file = "PyTrie-0.4.0-py3-none-any.whl", hash = "sha256:f687c224ee8c66cda8e8628a903011b692635ffbb08d4b39c5f92b18eb78c950"}, + {file = "PyTrie-0.4.0.tar.gz", hash = "sha256:8f4488f402d3465993fb6b6efa09866849ed8cda7903b50647b7d0342b805379"}, +] + +[package.dependencies] +sortedcontainers = "*" + [[package]] name = "pytz" version = "2024.1" @@ -2104,6 +2902,75 @@ files = [ {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, ] +[[package]] +name = "rdflib" +version = "7.0.0" +description = "RDFLib is a Python library for working with RDF, a simple yet powerful language for representing information." +category = "main" +optional = false +python-versions = ">=3.8.1,<4.0.0" +files = [ + {file = "rdflib-7.0.0-py3-none-any.whl", hash = "sha256:0438920912a642c866a513de6fe8a0001bd86ef975057d6962c79ce4771687cd"}, + {file = "rdflib-7.0.0.tar.gz", hash = "sha256:9995eb8569428059b8c1affd26b25eac510d64f5043d9ce8c84e0d0036e995ae"}, +] + +[package.dependencies] +isodate = ">=0.6.0,<0.7.0" +pyparsing = ">=2.1.0,<4" + +[package.extras] +berkeleydb = ["berkeleydb (>=18.1.0,<19.0.0)"] +html = ["html5lib (>=1.0,<2.0)"] +lxml = ["lxml (>=4.3.0,<5.0.0)"] +networkx = ["networkx (>=2.0.0,<3.0.0)"] + +[[package]] +name = "rdflib-jsonld" +version = "0.6.1" +description = "rdflib extension adding JSON-LD parser and serializer" +category = "main" +optional = false +python-versions = "*" +files = [ + {file = "rdflib-jsonld-0.6.1.tar.gz", hash = "sha256:eda5a42a2e09f80d4da78e32b5c684bccdf275368f1541e6b7bcddfb1382a0e0"}, + {file = "rdflib_jsonld-0.6.1-py2.py3-none-any.whl", hash = "sha256:bcf84317e947a661bae0a3f2aee1eced697075fc4ac4db6065a3340ea0f10fc2"}, +] + +[package.dependencies] +rdflib = ">=5.0.0" + +[[package]] +name = "rdflib-shim" +version = "1.0.3" +description = "Shim for rdflib 5 and 6 incompatibilities" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "rdflib_shim-1.0.3-py3-none-any.whl", hash = "sha256:7a853e7750ef1e9bf4e35dea27d54e02d4ed087de5a9e0c329c4a6d82d647081"}, + {file = "rdflib_shim-1.0.3.tar.gz", hash = "sha256:d955d11e2986aab42b6830ca56ac6bc9c893abd1d049a161c6de2f1b99d4fc0d"}, +] + +[package.dependencies] +rdflib = ">=5.0.0" +rdflib-jsonld = "0.6.1" + +[[package]] +name = "referencing" +version = "0.35.1" +description = "JSON Referencing + Python" +category = "main" +optional = false +python-versions = ">=3.8" +files = [ + {file = "referencing-0.35.1-py3-none-any.whl", hash = "sha256:eda6d3234d62814d1c64e305c1331c9a3a6132da475ab6382eaa997b21ee75de"}, + {file = "referencing-0.35.1.tar.gz", hash = "sha256:25b42124a6c8b632a425174f24087783efb348a6f1e0008e63cd4466fedf703c"}, +] + +[package.dependencies] +attrs = ">=22.2.0" +rpds-py = ">=0.7.0" + [[package]] name = "requests" version = "2.32.3" @@ -2126,6 +2993,240 @@ urllib3 = ">=1.21.1,<3" socks = ["PySocks (>=1.5.6,!=1.5.7)"] use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] +[[package]] +name = "rfc3339-validator" +version = "0.1.4" +description = "A pure python RFC3339 validator" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "rfc3339_validator-0.1.4-py2.py3-none-any.whl", hash = "sha256:24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa"}, + {file = "rfc3339_validator-0.1.4.tar.gz", hash = "sha256:138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b"}, +] + +[package.dependencies] +six = "*" + +[[package]] +name = "rfc3987" +version = "1.3.8" +description = "Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987)" +category = "main" +optional = false +python-versions = "*" +files = [ + {file = "rfc3987-1.3.8-py2.py3-none-any.whl", hash = "sha256:10702b1e51e5658843460b189b185c0366d2cf4cff716f13111b0ea9fd2dce53"}, + {file = "rfc3987-1.3.8.tar.gz", hash = "sha256:d3c4d257a560d544e9826b38bc81db676890c79ab9d7ac92b39c7a253d5ca733"}, +] + +[[package]] +name = "rich" +version = "13.7.1" +description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" +category = "main" +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "rich-13.7.1-py3-none-any.whl", hash = "sha256:4edbae314f59eb482f54e9e30bf00d33350aaa94f4bfcd4e9e3110e64d0d7222"}, + {file = "rich-13.7.1.tar.gz", hash = "sha256:9be308cb1fe2f1f57d67ce99e95af38a1e2bc71ad9813b0e247cf7ffbcc3a432"}, +] + +[package.dependencies] +markdown-it-py = ">=2.2.0" +pygments = ">=2.13.0,<3.0.0" + +[package.extras] +jupyter = ["ipywidgets (>=7.5.1,<9)"] + +[[package]] +name = "rpds-py" +version = "0.18.1" +description = "Python bindings to Rust's persistent data structures (rpds)" +category = "main" +optional = false +python-versions = ">=3.8" +files = [ + {file = "rpds_py-0.18.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:d31dea506d718693b6b2cffc0648a8929bdc51c70a311b2770f09611caa10d53"}, + {file = "rpds_py-0.18.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:732672fbc449bab754e0b15356c077cc31566df874964d4801ab14f71951ea80"}, + {file = "rpds_py-0.18.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a98a1f0552b5f227a3d6422dbd61bc6f30db170939bd87ed14f3c339aa6c7c9"}, + {file = "rpds_py-0.18.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7f1944ce16401aad1e3f7d312247b3d5de7981f634dc9dfe90da72b87d37887d"}, + {file = "rpds_py-0.18.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:38e14fb4e370885c4ecd734f093a2225ee52dc384b86fa55fe3f74638b2cfb09"}, + {file = "rpds_py-0.18.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:08d74b184f9ab6289b87b19fe6a6d1a97fbfea84b8a3e745e87a5de3029bf944"}, + {file = "rpds_py-0.18.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d70129cef4a8d979caa37e7fe957202e7eee8ea02c5e16455bc9808a59c6b2f0"}, + {file = "rpds_py-0.18.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ce0bb20e3a11bd04461324a6a798af34d503f8d6f1aa3d2aa8901ceaf039176d"}, + {file = "rpds_py-0.18.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:81c5196a790032e0fc2464c0b4ab95f8610f96f1f2fa3d4deacce6a79852da60"}, + {file = "rpds_py-0.18.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:f3027be483868c99b4985fda802a57a67fdf30c5d9a50338d9db646d590198da"}, + {file = "rpds_py-0.18.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:d44607f98caa2961bab4fa3c4309724b185b464cdc3ba6f3d7340bac3ec97cc1"}, + {file = "rpds_py-0.18.1-cp310-none-win32.whl", hash = "sha256:c273e795e7a0f1fddd46e1e3cb8be15634c29ae8ff31c196debb620e1edb9333"}, + {file = "rpds_py-0.18.1-cp310-none-win_amd64.whl", hash = "sha256:8352f48d511de5f973e4f2f9412736d7dea76c69faa6d36bcf885b50c758ab9a"}, + {file = "rpds_py-0.18.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:6b5ff7e1d63a8281654b5e2896d7f08799378e594f09cf3674e832ecaf396ce8"}, + {file = "rpds_py-0.18.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8927638a4d4137a289e41d0fd631551e89fa346d6dbcfc31ad627557d03ceb6d"}, + {file = "rpds_py-0.18.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:154bf5c93d79558b44e5b50cc354aa0459e518e83677791e6adb0b039b7aa6a7"}, + {file = "rpds_py-0.18.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:07f2139741e5deb2c5154a7b9629bc5aa48c766b643c1a6750d16f865a82c5fc"}, + {file = "rpds_py-0.18.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8c7672e9fba7425f79019db9945b16e308ed8bc89348c23d955c8c0540da0a07"}, + {file = "rpds_py-0.18.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:489bdfe1abd0406eba6b3bb4fdc87c7fa40f1031de073d0cfb744634cc8fa261"}, + {file = "rpds_py-0.18.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c20f05e8e3d4fc76875fc9cb8cf24b90a63f5a1b4c5b9273f0e8225e169b100"}, + {file = "rpds_py-0.18.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:967342e045564cef76dfcf1edb700b1e20838d83b1aa02ab313e6a497cf923b8"}, + {file = "rpds_py-0.18.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2cc7c1a47f3a63282ab0f422d90ddac4aa3034e39fc66a559ab93041e6505da7"}, + {file = "rpds_py-0.18.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:f7afbfee1157e0f9376c00bb232e80a60e59ed716e3211a80cb8506550671e6e"}, + {file = "rpds_py-0.18.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9e6934d70dc50f9f8ea47081ceafdec09245fd9f6032669c3b45705dea096b88"}, + {file = "rpds_py-0.18.1-cp311-none-win32.whl", hash = "sha256:c69882964516dc143083d3795cb508e806b09fc3800fd0d4cddc1df6c36e76bb"}, + {file = "rpds_py-0.18.1-cp311-none-win_amd64.whl", hash = "sha256:70a838f7754483bcdc830444952fd89645569e7452e3226de4a613a4c1793fb2"}, + {file = "rpds_py-0.18.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:3dd3cd86e1db5aadd334e011eba4e29d37a104b403e8ca24dcd6703c68ca55b3"}, + {file = "rpds_py-0.18.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:05f3d615099bd9b13ecf2fc9cf2d839ad3f20239c678f461c753e93755d629ee"}, + {file = "rpds_py-0.18.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:35b2b771b13eee8729a5049c976197ff58a27a3829c018a04341bcf1ae409b2b"}, + {file = "rpds_py-0.18.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ee17cd26b97d537af8f33635ef38be873073d516fd425e80559f4585a7b90c43"}, + {file = "rpds_py-0.18.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b646bf655b135ccf4522ed43d6902af37d3f5dbcf0da66c769a2b3938b9d8184"}, + {file = "rpds_py-0.18.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:19ba472b9606c36716062c023afa2484d1e4220548751bda14f725a7de17b4f6"}, + {file = "rpds_py-0.18.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e30ac5e329098903262dc5bdd7e2086e0256aa762cc8b744f9e7bf2a427d3f8"}, + {file = "rpds_py-0.18.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d58ad6317d188c43750cb76e9deacf6051d0f884d87dc6518e0280438648a9ac"}, + {file = "rpds_py-0.18.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e1735502458621921cee039c47318cb90b51d532c2766593be6207eec53e5c4c"}, + {file = "rpds_py-0.18.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:f5bab211605d91db0e2995a17b5c6ee5edec1270e46223e513eaa20da20076ac"}, + {file = "rpds_py-0.18.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2fc24a329a717f9e2448f8cd1f960f9dac4e45b6224d60734edeb67499bab03a"}, + {file = "rpds_py-0.18.1-cp312-none-win32.whl", hash = "sha256:1805d5901779662d599d0e2e4159d8a82c0b05faa86ef9222bf974572286b2b6"}, + {file = "rpds_py-0.18.1-cp312-none-win_amd64.whl", hash = "sha256:720edcb916df872d80f80a1cc5ea9058300b97721efda8651efcd938a9c70a72"}, + {file = "rpds_py-0.18.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:c827576e2fa017a081346dce87d532a5310241648eb3700af9a571a6e9fc7e74"}, + {file = "rpds_py-0.18.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:aa3679e751408d75a0b4d8d26d6647b6d9326f5e35c00a7ccd82b78ef64f65f8"}, + {file = "rpds_py-0.18.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0abeee75434e2ee2d142d650d1e54ac1f8b01e6e6abdde8ffd6eeac6e9c38e20"}, + {file = "rpds_py-0.18.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ed402d6153c5d519a0faf1bb69898e97fb31613b49da27a84a13935ea9164dfc"}, + {file = "rpds_py-0.18.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:338dee44b0cef8b70fd2ef54b4e09bb1b97fc6c3a58fea5db6cc083fd9fc2724"}, + {file = "rpds_py-0.18.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7750569d9526199c5b97e5a9f8d96a13300950d910cf04a861d96f4273d5b104"}, + {file = "rpds_py-0.18.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:607345bd5912aacc0c5a63d45a1f73fef29e697884f7e861094e443187c02be5"}, + {file = "rpds_py-0.18.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:207c82978115baa1fd8d706d720b4a4d2b0913df1c78c85ba73fe6c5804505f0"}, + {file = "rpds_py-0.18.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:6d1e42d2735d437e7e80bab4d78eb2e459af48c0a46e686ea35f690b93db792d"}, + {file = "rpds_py-0.18.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:5463c47c08630007dc0fe99fb480ea4f34a89712410592380425a9b4e1611d8e"}, + {file = "rpds_py-0.18.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:06d218939e1bf2ca50e6b0ec700ffe755e5216a8230ab3e87c059ebb4ea06afc"}, + {file = "rpds_py-0.18.1-cp38-none-win32.whl", hash = "sha256:312fe69b4fe1ffbe76520a7676b1e5ac06ddf7826d764cc10265c3b53f96dbe9"}, + {file = "rpds_py-0.18.1-cp38-none-win_amd64.whl", hash = "sha256:9437ca26784120a279f3137ee080b0e717012c42921eb07861b412340f85bae2"}, + {file = "rpds_py-0.18.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:19e515b78c3fc1039dd7da0a33c28c3154458f947f4dc198d3c72db2b6b5dc93"}, + {file = "rpds_py-0.18.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a7b28c5b066bca9a4eb4e2f2663012debe680f097979d880657f00e1c30875a0"}, + {file = "rpds_py-0.18.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:673fdbbf668dd958eff750e500495ef3f611e2ecc209464f661bc82e9838991e"}, + {file = "rpds_py-0.18.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d960de62227635d2e61068f42a6cb6aae91a7fe00fca0e3aeed17667c8a34611"}, + {file = "rpds_py-0.18.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:352a88dc7892f1da66b6027af06a2e7e5d53fe05924cc2cfc56495b586a10b72"}, + {file = "rpds_py-0.18.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4e0ee01ad8260184db21468a6e1c37afa0529acc12c3a697ee498d3c2c4dcaf3"}, + {file = "rpds_py-0.18.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4c39ad2f512b4041343ea3c7894339e4ca7839ac38ca83d68a832fc8b3748ab"}, + {file = "rpds_py-0.18.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:aaa71ee43a703c321906813bb252f69524f02aa05bf4eec85f0c41d5d62d0f4c"}, + {file = "rpds_py-0.18.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:6cd8098517c64a85e790657e7b1e509b9fe07487fd358e19431cb120f7d96338"}, + {file = "rpds_py-0.18.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:4adec039b8e2928983f885c53b7cc4cda8965b62b6596501a0308d2703f8af1b"}, + {file = "rpds_py-0.18.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:32b7daaa3e9389db3695964ce8e566e3413b0c43e3394c05e4b243a4cd7bef26"}, + {file = "rpds_py-0.18.1-cp39-none-win32.whl", hash = "sha256:2625f03b105328729f9450c8badda34d5243231eef6535f80064d57035738360"}, + {file = "rpds_py-0.18.1-cp39-none-win_amd64.whl", hash = "sha256:bf18932d0003c8c4d51a39f244231986ab23ee057d235a12b2684ea26a353590"}, + {file = "rpds_py-0.18.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:cbfbea39ba64f5e53ae2915de36f130588bba71245b418060ec3330ebf85678e"}, + {file = "rpds_py-0.18.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:a3d456ff2a6a4d2adcdf3c1c960a36f4fd2fec6e3b4902a42a384d17cf4e7a65"}, + {file = "rpds_py-0.18.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7700936ef9d006b7ef605dc53aa364da2de5a3aa65516a1f3ce73bf82ecfc7ae"}, + {file = "rpds_py-0.18.1-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:51584acc5916212e1bf45edd17f3a6b05fe0cbb40482d25e619f824dccb679de"}, + {file = "rpds_py-0.18.1-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:942695a206a58d2575033ff1e42b12b2aece98d6003c6bc739fbf33d1773b12f"}, + {file = "rpds_py-0.18.1-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b906b5f58892813e5ba5c6056d6a5ad08f358ba49f046d910ad992196ea61397"}, + {file = "rpds_py-0.18.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6f8e3fecca256fefc91bb6765a693d96692459d7d4c644660a9fff32e517843"}, + {file = "rpds_py-0.18.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7732770412bab81c5a9f6d20aeb60ae943a9b36dcd990d876a773526468e7163"}, + {file = "rpds_py-0.18.1-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:bd1105b50ede37461c1d51b9698c4f4be6e13e69a908ab7751e3807985fc0346"}, + {file = "rpds_py-0.18.1-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:618916f5535784960f3ecf8111581f4ad31d347c3de66d02e728de460a46303c"}, + {file = "rpds_py-0.18.1-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:17c6d2155e2423f7e79e3bb18151c686d40db42d8645e7977442170c360194d4"}, + {file = "rpds_py-0.18.1-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:6c4c4c3f878df21faf5fac86eda32671c27889e13570645a9eea0a1abdd50922"}, + {file = "rpds_py-0.18.1-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:fab6ce90574645a0d6c58890e9bcaac8d94dff54fb51c69e5522a7358b80ab64"}, + {file = "rpds_py-0.18.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:531796fb842b53f2695e94dc338929e9f9dbf473b64710c28af5a160b2a8927d"}, + {file = "rpds_py-0.18.1-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:740884bc62a5e2bbb31e584f5d23b32320fd75d79f916f15a788d527a5e83644"}, + {file = "rpds_py-0.18.1-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:998125738de0158f088aef3cb264a34251908dd2e5d9966774fdab7402edfab7"}, + {file = "rpds_py-0.18.1-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e2be6e9dd4111d5b31ba3b74d17da54a8319d8168890fbaea4b9e5c3de630ae5"}, + {file = "rpds_py-0.18.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d0cee71bc618cd93716f3c1bf56653740d2d13ddbd47673efa8bf41435a60daa"}, + {file = "rpds_py-0.18.1-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2c3caec4ec5cd1d18e5dd6ae5194d24ed12785212a90b37f5f7f06b8bedd7139"}, + {file = "rpds_py-0.18.1-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:27bba383e8c5231cd559affe169ca0b96ec78d39909ffd817f28b166d7ddd4d8"}, + {file = "rpds_py-0.18.1-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:a888e8bdb45916234b99da2d859566f1e8a1d2275a801bb8e4a9644e3c7e7909"}, + {file = "rpds_py-0.18.1-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:6031b25fb1b06327b43d841f33842b383beba399884f8228a6bb3df3088485ff"}, + {file = "rpds_py-0.18.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:48c2faaa8adfacefcbfdb5f2e2e7bdad081e5ace8d182e5f4ade971f128e6bb3"}, + {file = "rpds_py-0.18.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:d85164315bd68c0806768dc6bb0429c6f95c354f87485ee3593c4f6b14def2bd"}, + {file = "rpds_py-0.18.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6afd80f6c79893cfc0574956f78a0add8c76e3696f2d6a15bca2c66c415cf2d4"}, + {file = "rpds_py-0.18.1-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fa242ac1ff583e4ec7771141606aafc92b361cd90a05c30d93e343a0c2d82a89"}, + {file = "rpds_py-0.18.1-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d21be4770ff4e08698e1e8e0bce06edb6ea0626e7c8f560bc08222880aca6a6f"}, + {file = "rpds_py-0.18.1-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c45a639e93a0c5d4b788b2613bd637468edd62f8f95ebc6fcc303d58ab3f0a8"}, + {file = "rpds_py-0.18.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:910e71711d1055b2768181efa0a17537b2622afeb0424116619817007f8a2b10"}, + {file = "rpds_py-0.18.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b9bb1f182a97880f6078283b3505a707057c42bf55d8fca604f70dedfdc0772a"}, + {file = "rpds_py-0.18.1-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:1d54f74f40b1f7aaa595a02ff42ef38ca654b1469bef7d52867da474243cc633"}, + {file = "rpds_py-0.18.1-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:8d2e182c9ee01135e11e9676e9a62dfad791a7a467738f06726872374a83db49"}, + {file = "rpds_py-0.18.1-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:636a15acc588f70fda1661234761f9ed9ad79ebed3f2125d44be0862708b666e"}, + {file = "rpds_py-0.18.1.tar.gz", hash = "sha256:dc48b479d540770c811fbd1eb9ba2bb66951863e448efec2e2c102625328e92f"}, +] + +[[package]] +name = "ruamel-yaml" +version = "0.18.6" +description = "ruamel.yaml is a YAML parser/emitter that supports roundtrip preservation of comments, seq/map flow style, and map key order" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "ruamel.yaml-0.18.6-py3-none-any.whl", hash = "sha256:57b53ba33def16c4f3d807c0ccbc00f8a6081827e81ba2491691b76882d0c636"}, + {file = "ruamel.yaml-0.18.6.tar.gz", hash = "sha256:8b27e6a217e786c6fbe5634d8f3f11bc63e0f80f6a5890f28863d9c45aac311b"}, +] + +[package.dependencies] +"ruamel.yaml.clib" = {version = ">=0.2.7", markers = "platform_python_implementation == \"CPython\" and python_version < \"3.13\""} + +[package.extras] +docs = ["mercurial (>5.7)", "ryd"] +jinja2 = ["ruamel.yaml.jinja2 (>=0.2)"] + +[[package]] +name = "ruamel-yaml-clib" +version = "0.2.8" +description = "C version of reader, parser and emitter for ruamel.yaml derived from libyaml" +category = "main" +optional = false +python-versions = ">=3.6" +files = [ + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b42169467c42b692c19cf539c38d4602069d8c1505e97b86387fcf7afb766e1d"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:07238db9cbdf8fc1e9de2489a4f68474e70dffcb32232db7c08fa61ca0c7c462"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:fff3573c2db359f091e1589c3d7c5fc2f86f5bdb6f24252c2d8e539d4e45f412"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-manylinux_2_24_aarch64.whl", hash = "sha256:aa2267c6a303eb483de8d02db2871afb5c5fc15618d894300b88958f729ad74f"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:840f0c7f194986a63d2c2465ca63af8ccbbc90ab1c6001b1978f05119b5e7334"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:024cfe1fc7c7f4e1aff4a81e718109e13409767e4f871443cbff3dba3578203d"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-win32.whl", hash = "sha256:c69212f63169ec1cfc9bb44723bf2917cbbd8f6191a00ef3410f5a7fe300722d"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-win_amd64.whl", hash = "sha256:cabddb8d8ead485e255fe80429f833172b4cadf99274db39abc080e068cbcc31"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:bef08cd86169d9eafb3ccb0a39edb11d8e25f3dae2b28f5c52fd997521133069"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:b16420e621d26fdfa949a8b4b47ade8810c56002f5389970db4ddda51dbff248"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:25c515e350e5b739842fc3228d662413ef28f295791af5e5110b543cf0b57d9b"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-manylinux_2_24_aarch64.whl", hash = "sha256:1707814f0d9791df063f8c19bb51b0d1278b8e9a2353abbb676c2f685dee6afe"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:46d378daaac94f454b3a0e3d8d78cafd78a026b1d71443f4966c696b48a6d899"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:09b055c05697b38ecacb7ac50bdab2240bfca1a0c4872b0fd309bb07dc9aa3a9"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-win32.whl", hash = "sha256:53a300ed9cea38cf5a2a9b069058137c2ca1ce658a874b79baceb8f892f915a7"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-win_amd64.whl", hash = "sha256:c2a72e9109ea74e511e29032f3b670835f8a59bbdc9ce692c5b4ed91ccf1eedb"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:ebc06178e8821efc9692ea7544aa5644217358490145629914d8020042c24aa1"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:edaef1c1200c4b4cb914583150dcaa3bc30e592e907c01117c08b13a07255ec2"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d176b57452ab5b7028ac47e7b3cf644bcfdc8cacfecf7e71759f7f51a59e5c92"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-manylinux_2_24_aarch64.whl", hash = "sha256:1dc67314e7e1086c9fdf2680b7b6c2be1c0d8e3a8279f2e993ca2a7545fecf62"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:3213ece08ea033eb159ac52ae052a4899b56ecc124bb80020d9bbceeb50258e9"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:aab7fd643f71d7946f2ee58cc88c9b7bfc97debd71dcc93e03e2d174628e7e2d"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-win32.whl", hash = "sha256:5c365d91c88390c8d0a8545df0b5857172824b1c604e867161e6b3d59a827eaa"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-win_amd64.whl", hash = "sha256:1758ce7d8e1a29d23de54a16ae867abd370f01b5a69e1a3ba75223eaa3ca1a1b"}, + {file = "ruamel.yaml.clib-0.2.8-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a5aa27bad2bb83670b71683aae140a1f52b0857a2deff56ad3f6c13a017a26ed"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c58ecd827313af6864893e7af0a3bb85fd529f862b6adbefe14643947cfe2942"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-macosx_12_0_arm64.whl", hash = "sha256:f481f16baec5290e45aebdc2a5168ebc6d35189ae6fea7a58787613a25f6e875"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-manylinux_2_24_aarch64.whl", hash = "sha256:77159f5d5b5c14f7c34073862a6b7d34944075d9f93e681638f6d753606c6ce6"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:7f67a1ee819dc4562d444bbafb135832b0b909f81cc90f7aa00260968c9ca1b3"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:4ecbf9c3e19f9562c7fdd462e8d18dd902a47ca046a2e64dba80699f0b6c09b7"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:87ea5ff66d8064301a154b3933ae406b0863402a799b16e4a1d24d9fbbcbe0d3"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-win32.whl", hash = "sha256:75e1ed13e1f9de23c5607fe6bd1aeaae21e523b32d83bb33918245361e9cc51b"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-win_amd64.whl", hash = "sha256:3f215c5daf6a9d7bbed4a0a4f760f3113b10e82ff4c5c44bec20a68c8014f675"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1b617618914cb00bf5c34d4357c37aa15183fa229b24767259657746c9077615"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:a6a9ffd280b71ad062eae53ac1659ad86a17f59a0fdc7699fd9be40525153337"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-manylinux_2_24_aarch64.whl", hash = "sha256:305889baa4043a09e5b76f8e2a51d4ffba44259f6b4c72dec8ca56207d9c6fe1"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:700e4ebb569e59e16a976857c8798aee258dceac7c7d6b50cab63e080058df91"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:e2b4c44b60eadec492926a7270abb100ef9f72798e18743939bdbf037aab8c28"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e79e5db08739731b0ce4850bed599235d601701d5694c36570a99a0c5ca41a9d"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-win32.whl", hash = "sha256:955eae71ac26c1ab35924203fda6220f84dce57d6d7884f189743e2abe3a9fbe"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-win_amd64.whl", hash = "sha256:56f4252222c067b4ce51ae12cbac231bce32aee1d33fbfc9d17e5b8d6966c312"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:03d1162b6d1df1caa3a4bd27aa51ce17c9afc2046c31b0ad60a0a96ec22f8001"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:bba64af9fa9cebe325a62fa398760f5c7206b215201b0ec825005f1b18b9bccf"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-manylinux_2_24_aarch64.whl", hash = "sha256:a1a45e0bb052edf6a1d3a93baef85319733a888363938e1fc9924cb00c8df24c"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:da09ad1c359a728e112d60116f626cc9f29730ff3e0e7db72b9a2dbc2e4beed5"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:184565012b60405d93838167f425713180b949e9d8dd0bbc7b49f074407c5a8b"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a75879bacf2c987c003368cf14bed0ffe99e8e85acfa6c0bfffc21a090f16880"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-win32.whl", hash = "sha256:84b554931e932c46f94ab306913ad7e11bba988104c5cff26d90d03f68258cd5"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-win_amd64.whl", hash = "sha256:25ac8c08322002b06fa1d49d1646181f0b2c72f5cbc15a85e80b4c30a544bb15"}, + {file = "ruamel.yaml.clib-0.2.8.tar.gz", hash = "sha256:beb2e0404003de9a4cab9753a8805a8fe9320ee6673136ed7f04255fe60bb512"}, +] + [[package]] name = "ruff" version = "0.3.7" @@ -2196,6 +3297,33 @@ dev = ["cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy (==1.10.0)", "pycodest doc = ["jupyterlite-pyodide-kernel", "jupyterlite-sphinx (>=0.13.1)", "jupytext", "matplotlib (>=3.5)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (>=0.15.2)", "sphinx (>=5.0.0)", "sphinx-design (>=0.4.0)"] test = ["Cython", "array-api-strict", "asv", "gmpy2", "hypothesis (>=6.30)", "meson", "mpmath", "ninja", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] +[[package]] +name = "shellingham" +version = "1.5.4" +description = "Tool to Detect Surrounding Shell" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686"}, + {file = "shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de"}, +] + +[[package]] +name = "shexjsg" +version = "0.8.2" +description = "ShExJSG - Astract Syntax Tree for the ShEx 2.0 language" +category = "main" +optional = false +python-versions = "*" +files = [ + {file = "ShExJSG-0.8.2-py2.py3-none-any.whl", hash = "sha256:3b0d8432dd313bee9e1343382c5e02e9908dd941a7dd7342bf8c0200fe523766"}, + {file = "ShExJSG-0.8.2.tar.gz", hash = "sha256:f17a629fc577fa344382bdee143cd9ff86588537f9f811f66cea6f63cdbcd0b6"}, +] + +[package.dependencies] +pyjsg = ">=0.11.10" + [[package]] name = "simplejson" version = "3.19.2" @@ -2328,6 +3456,144 @@ files = [ {file = "smmap-5.0.1.tar.gz", hash = "sha256:dceeb6c0028fdb6734471eb07c0cd2aae706ccaecab45965ee83f11c8d3b1f62"}, ] +[[package]] +name = "sortedcontainers" +version = "2.4.0" +description = "Sorted Containers -- Sorted List, Sorted Dict, Sorted Set" +category = "main" +optional = false +python-versions = "*" +files = [ + {file = "sortedcontainers-2.4.0-py2.py3-none-any.whl", hash = "sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0"}, + {file = "sortedcontainers-2.4.0.tar.gz", hash = "sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88"}, +] + +[[package]] +name = "sparqlslurper" +version = "0.5.1" +description = "SPARQL Slurper for rdflib" +category = "main" +optional = false +python-versions = ">=3.7.4" +files = [ + {file = "sparqlslurper-0.5.1-py3-none-any.whl", hash = "sha256:ae49b2d8ce3dd38df7a40465b228ad5d33fb7e11b3f248d195f9cadfc9cfff87"}, + {file = "sparqlslurper-0.5.1.tar.gz", hash = "sha256:9282ebb064fc6152a58269d194cb1e7b275b0f095425a578d75b96dcc851f546"}, +] + +[package.dependencies] +rdflib = ">=5.0.0" +rdflib-shim = "*" +sparqlwrapper = ">=1.8.2" + +[[package]] +name = "sparqlwrapper" +version = "2.0.0" +description = "SPARQL Endpoint interface to Python" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "SPARQLWrapper-2.0.0-py3-none-any.whl", hash = "sha256:c99a7204fff676ee28e6acef327dc1ff8451c6f7217dcd8d49e8872f324a8a20"}, + {file = "SPARQLWrapper-2.0.0.tar.gz", hash = "sha256:3fed3ebcc77617a4a74d2644b86fd88e0f32e7f7003ac7b2b334c026201731f1"}, +] + +[package.dependencies] +rdflib = ">=6.1.1" + +[package.extras] +dev = ["mypy (>=0.931)", "pandas (>=1.3.5)", "pandas-stubs (>=1.2.0.48)", "setuptools (>=3.7.1)"] +docs = ["sphinx (<5)", "sphinx-rtd-theme"] +keepalive = ["keepalive (>=0.5)"] +pandas = ["pandas (>=1.3.5)"] + +[[package]] +name = "sqlalchemy" +version = "2.0.31" +description = "Database Abstraction Library" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "SQLAlchemy-2.0.31-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f2a213c1b699d3f5768a7272de720387ae0122f1becf0901ed6eaa1abd1baf6c"}, + {file = "SQLAlchemy-2.0.31-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9fea3d0884e82d1e33226935dac990b967bef21315cbcc894605db3441347443"}, + {file = "SQLAlchemy-2.0.31-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3ad7f221d8a69d32d197e5968d798217a4feebe30144986af71ada8c548e9fa"}, + {file = "SQLAlchemy-2.0.31-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f2bee229715b6366f86a95d497c347c22ddffa2c7c96143b59a2aa5cc9eebbc"}, + {file = "SQLAlchemy-2.0.31-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cd5b94d4819c0c89280b7c6109c7b788a576084bf0a480ae17c227b0bc41e109"}, + {file = "SQLAlchemy-2.0.31-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:750900a471d39a7eeba57580b11983030517a1f512c2cb287d5ad0fcf3aebd58"}, + {file = "SQLAlchemy-2.0.31-cp310-cp310-win32.whl", hash = "sha256:7bd112be780928c7f493c1a192cd8c5fc2a2a7b52b790bc5a84203fb4381c6be"}, + {file = "SQLAlchemy-2.0.31-cp310-cp310-win_amd64.whl", hash = "sha256:5a48ac4d359f058474fadc2115f78a5cdac9988d4f99eae44917f36aa1476327"}, + {file = "SQLAlchemy-2.0.31-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f68470edd70c3ac3b6cd5c2a22a8daf18415203ca1b036aaeb9b0fb6f54e8298"}, + {file = "SQLAlchemy-2.0.31-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2e2c38c2a4c5c634fe6c3c58a789712719fa1bf9b9d6ff5ebfce9a9e5b89c1ca"}, + {file = "SQLAlchemy-2.0.31-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd15026f77420eb2b324dcb93551ad9c5f22fab2c150c286ef1dc1160f110203"}, + {file = "SQLAlchemy-2.0.31-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2196208432deebdfe3b22185d46b08f00ac9d7b01284e168c212919891289396"}, + {file = "SQLAlchemy-2.0.31-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:352b2770097f41bff6029b280c0e03b217c2dcaddc40726f8f53ed58d8a85da4"}, + {file = "SQLAlchemy-2.0.31-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:56d51ae825d20d604583f82c9527d285e9e6d14f9a5516463d9705dab20c3740"}, + {file = "SQLAlchemy-2.0.31-cp311-cp311-win32.whl", hash = "sha256:6e2622844551945db81c26a02f27d94145b561f9d4b0c39ce7bfd2fda5776dac"}, + {file = "SQLAlchemy-2.0.31-cp311-cp311-win_amd64.whl", hash = "sha256:ccaf1b0c90435b6e430f5dd30a5aede4764942a695552eb3a4ab74ed63c5b8d3"}, + {file = "SQLAlchemy-2.0.31-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3b74570d99126992d4b0f91fb87c586a574a5872651185de8297c6f90055ae42"}, + {file = "SQLAlchemy-2.0.31-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6f77c4f042ad493cb8595e2f503c7a4fe44cd7bd59c7582fd6d78d7e7b8ec52c"}, + {file = "SQLAlchemy-2.0.31-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cd1591329333daf94467e699e11015d9c944f44c94d2091f4ac493ced0119449"}, + {file = "SQLAlchemy-2.0.31-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:74afabeeff415e35525bf7a4ecdab015f00e06456166a2eba7590e49f8db940e"}, + {file = "SQLAlchemy-2.0.31-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b9c01990d9015df2c6f818aa8f4297d42ee71c9502026bb074e713d496e26b67"}, + {file = "SQLAlchemy-2.0.31-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:66f63278db425838b3c2b1c596654b31939427016ba030e951b292e32b99553e"}, + {file = "SQLAlchemy-2.0.31-cp312-cp312-win32.whl", hash = "sha256:0b0f658414ee4e4b8cbcd4a9bb0fd743c5eeb81fc858ca517217a8013d282c96"}, + {file = "SQLAlchemy-2.0.31-cp312-cp312-win_amd64.whl", hash = "sha256:fa4b1af3e619b5b0b435e333f3967612db06351217c58bfb50cee5f003db2a5a"}, + {file = "SQLAlchemy-2.0.31-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:f43e93057cf52a227eda401251c72b6fbe4756f35fa6bfebb5d73b86881e59b0"}, + {file = "SQLAlchemy-2.0.31-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d337bf94052856d1b330d5fcad44582a30c532a2463776e1651bd3294ee7e58b"}, + {file = "SQLAlchemy-2.0.31-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c06fb43a51ccdff3b4006aafee9fcf15f63f23c580675f7734245ceb6b6a9e05"}, + {file = "SQLAlchemy-2.0.31-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:b6e22630e89f0e8c12332b2b4c282cb01cf4da0d26795b7eae16702a608e7ca1"}, + {file = "SQLAlchemy-2.0.31-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:79a40771363c5e9f3a77f0e28b3302801db08040928146e6808b5b7a40749c88"}, + {file = "SQLAlchemy-2.0.31-cp37-cp37m-win32.whl", hash = "sha256:501ff052229cb79dd4c49c402f6cb03b5a40ae4771efc8bb2bfac9f6c3d3508f"}, + {file = "SQLAlchemy-2.0.31-cp37-cp37m-win_amd64.whl", hash = "sha256:597fec37c382a5442ffd471f66ce12d07d91b281fd474289356b1a0041bdf31d"}, + {file = "SQLAlchemy-2.0.31-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:dc6d69f8829712a4fd799d2ac8d79bdeff651c2301b081fd5d3fe697bd5b4ab9"}, + {file = "SQLAlchemy-2.0.31-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:23b9fbb2f5dd9e630db70fbe47d963c7779e9c81830869bd7d137c2dc1ad05fb"}, + {file = "SQLAlchemy-2.0.31-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2a21c97efcbb9f255d5c12a96ae14da873233597dfd00a3a0c4ce5b3e5e79704"}, + {file = "SQLAlchemy-2.0.31-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26a6a9837589c42b16693cf7bf836f5d42218f44d198f9343dd71d3164ceeeac"}, + {file = "SQLAlchemy-2.0.31-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:dc251477eae03c20fae8db9c1c23ea2ebc47331bcd73927cdcaecd02af98d3c3"}, + {file = "SQLAlchemy-2.0.31-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:2fd17e3bb8058359fa61248c52c7b09a97cf3c820e54207a50af529876451808"}, + {file = "SQLAlchemy-2.0.31-cp38-cp38-win32.whl", hash = "sha256:c76c81c52e1e08f12f4b6a07af2b96b9b15ea67ccdd40ae17019f1c373faa227"}, + {file = "SQLAlchemy-2.0.31-cp38-cp38-win_amd64.whl", hash = "sha256:4b600e9a212ed59355813becbcf282cfda5c93678e15c25a0ef896b354423238"}, + {file = "SQLAlchemy-2.0.31-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b6cf796d9fcc9b37011d3f9936189b3c8074a02a4ed0c0fbbc126772c31a6d4"}, + {file = "SQLAlchemy-2.0.31-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:78fe11dbe37d92667c2c6e74379f75746dc947ee505555a0197cfba9a6d4f1a4"}, + {file = "SQLAlchemy-2.0.31-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2fc47dc6185a83c8100b37acda27658fe4dbd33b7d5e7324111f6521008ab4fe"}, + {file = "SQLAlchemy-2.0.31-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8a41514c1a779e2aa9a19f67aaadeb5cbddf0b2b508843fcd7bafdf4c6864005"}, + {file = "SQLAlchemy-2.0.31-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:afb6dde6c11ea4525318e279cd93c8734b795ac8bb5dda0eedd9ebaca7fa23f1"}, + {file = "SQLAlchemy-2.0.31-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:3f9faef422cfbb8fd53716cd14ba95e2ef655400235c3dfad1b5f467ba179c8c"}, + {file = "SQLAlchemy-2.0.31-cp39-cp39-win32.whl", hash = "sha256:fc6b14e8602f59c6ba893980bea96571dd0ed83d8ebb9c4479d9ed5425d562e9"}, + {file = "SQLAlchemy-2.0.31-cp39-cp39-win_amd64.whl", hash = "sha256:3cb8a66b167b033ec72c3812ffc8441d4e9f5f78f5e31e54dcd4c90a4ca5bebc"}, + {file = "SQLAlchemy-2.0.31-py3-none-any.whl", hash = "sha256:69f3e3c08867a8e4856e92d7afb618b95cdee18e0bc1647b77599722c9a28911"}, + {file = "SQLAlchemy-2.0.31.tar.gz", hash = "sha256:b607489dd4a54de56984a0c7656247504bd5523d9d0ba799aef59d4add009484"}, +] + +[package.dependencies] +greenlet = {version = "!=0.4.17", markers = "python_version < \"3.13\" and (platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\")"} +typing-extensions = ">=4.6.0" + +[package.extras] +aiomysql = ["aiomysql (>=0.2.0)", "greenlet (!=0.4.17)"] +aioodbc = ["aioodbc", "greenlet (!=0.4.17)"] +aiosqlite = ["aiosqlite", "greenlet (!=0.4.17)", "typing_extensions (!=3.10.0.1)"] +asyncio = ["greenlet (!=0.4.17)"] +asyncmy = ["asyncmy (>=0.2.3,!=0.2.4,!=0.2.6)", "greenlet (!=0.4.17)"] +mariadb-connector = ["mariadb (>=1.0.1,!=1.1.2,!=1.1.5)"] +mssql = ["pyodbc"] +mssql-pymssql = ["pymssql"] +mssql-pyodbc = ["pyodbc"] +mypy = ["mypy (>=0.910)"] +mysql = ["mysqlclient (>=1.4.0)"] +mysql-connector = ["mysql-connector-python"] +oracle = ["cx_oracle (>=8)"] +oracle-oracledb = ["oracledb (>=1.0.1)"] +postgresql = ["psycopg2 (>=2.7)"] +postgresql-asyncpg = ["asyncpg", "greenlet (!=0.4.17)"] +postgresql-pg8000 = ["pg8000 (>=1.29.1)"] +postgresql-psycopg = ["psycopg (>=3.0.7)"] +postgresql-psycopg2binary = ["psycopg2-binary"] +postgresql-psycopg2cffi = ["psycopg2cffi"] +postgresql-psycopgbinary = ["psycopg[binary] (>=3.0.7)"] +pymysql = ["pymysql"] +sqlcipher = ["sqlcipher3_binary"] + [[package]] name = "stack-data" version = "0.6.3" @@ -2364,6 +3630,18 @@ files = [ doc = ["reno", "sphinx"] test = ["pytest", "tornado (>=4.5)", "typeguard"] +[[package]] +name = "text-unidecode" +version = "1.3" +description = "The most basic Text::Unidecode port" +category = "main" +optional = false +python-versions = "*" +files = [ + {file = "text-unidecode-1.3.tar.gz", hash = "sha256:bad6603bb14d279193107714b288be206cac565dfa49aa5b105294dd5c4aab93"}, + {file = "text_unidecode-1.3-py2.py3-none-any.whl", hash = "sha256:1311f10e8b895935241623731c2ba64f4c455287888b18189350b67134a822e8"}, +] + [[package]] name = "tomli" version = "2.0.1" @@ -2392,6 +3670,24 @@ files = [ docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0,<8.2)", "pytest-mock", "pytest-mypy-testing"] +[[package]] +name = "typer" +version = "0.12.3" +description = "Typer, build great CLIs. Easy to code. Based on Python type hints." +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "typer-0.12.3-py3-none-any.whl", hash = "sha256:070d7ca53f785acbccba8e7d28b08dcd88f79f1fbda035ade0aecec71ca5c914"}, + {file = "typer-0.12.3.tar.gz", hash = "sha256:49e73131481d804288ef62598d97a1ceef3058905aa536a1134f90891ba35482"}, +] + +[package.dependencies] +click = ">=8.0.0" +rich = ">=10.11.0" +shellingham = ">=1.3.0" +typing-extensions = ">=3.7.4.3" + [[package]] name = "types-beautifulsoup4" version = "4.12.0.20240511" @@ -2419,6 +3715,18 @@ files = [ {file = "types_html5lib-1.1.11.20240228-py3-none-any.whl", hash = "sha256:af5de0125cb0fe5667543b158db83849b22e25c0e36c9149836b095548bf1020"}, ] +[[package]] +name = "types-python-dateutil" +version = "2.9.0.20240316" +description = "Typing stubs for python-dateutil" +category = "main" +optional = false +python-versions = ">=3.8" +files = [ + {file = "types-python-dateutil-2.9.0.20240316.tar.gz", hash = "sha256:5d2f2e240b86905e40944dd787db6da9263f0deabef1076ddaed797351ec0202"}, + {file = "types_python_dateutil-2.9.0.20240316-py3-none-any.whl", hash = "sha256:6b8cb66d960771ce5ff974e9dd45e38facb81718cc1e208b10b1baccbfdbee3b"}, +] + [[package]] name = "types-pytz" version = "2024.1.0.20240417" @@ -2467,6 +3775,21 @@ files = [ {file = "tzdata-2024.1.tar.gz", hash = "sha256:2674120f8d891909751c38abcdfd386ac0a5a1127954fbc332af6b5ceae07efd"}, ] +[[package]] +name = "uri-template" +version = "1.3.0" +description = "RFC 6570 URI Template Processor" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "uri-template-1.3.0.tar.gz", hash = "sha256:0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7"}, + {file = "uri_template-1.3.0-py3-none-any.whl", hash = "sha256:a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363"}, +] + +[package.extras] +dev = ["flake8", "flake8-annotations", "flake8-bandit", "flake8-bugbear", "flake8-commas", "flake8-comprehensions", "flake8-continuation", "flake8-datetimez", "flake8-docstrings", "flake8-import-order", "flake8-literal", "flake8-modern-annotations", "flake8-noqa", "flake8-pyproject", "flake8-requirements", "flake8-typechecking-import", "flake8-use-fstring", "mypy", "pep8-naming", "types-PyYAML"] + [[package]] name = "urllib3" version = "2.2.2" @@ -2517,6 +3840,51 @@ platformdirs = ">=3.9.1,<5" docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2,!=7.3)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8)", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10)"] +[[package]] +name = "watchdog" +version = "4.0.1" +description = "Filesystem events monitoring" +category = "main" +optional = false +python-versions = ">=3.8" +files = [ + {file = "watchdog-4.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:da2dfdaa8006eb6a71051795856bedd97e5b03e57da96f98e375682c48850645"}, + {file = "watchdog-4.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e93f451f2dfa433d97765ca2634628b789b49ba8b504fdde5837cdcf25fdb53b"}, + {file = "watchdog-4.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ef0107bbb6a55f5be727cfc2ef945d5676b97bffb8425650dadbb184be9f9a2b"}, + {file = "watchdog-4.0.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:17e32f147d8bf9657e0922c0940bcde863b894cd871dbb694beb6704cfbd2fb5"}, + {file = "watchdog-4.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:03e70d2df2258fb6cb0e95bbdbe06c16e608af94a3ffbd2b90c3f1e83eb10767"}, + {file = "watchdog-4.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:123587af84260c991dc5f62a6e7ef3d1c57dfddc99faacee508c71d287248459"}, + {file = "watchdog-4.0.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:093b23e6906a8b97051191a4a0c73a77ecc958121d42346274c6af6520dec175"}, + {file = "watchdog-4.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:611be3904f9843f0529c35a3ff3fd617449463cb4b73b1633950b3d97fa4bfb7"}, + {file = "watchdog-4.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:62c613ad689ddcb11707f030e722fa929f322ef7e4f18f5335d2b73c61a85c28"}, + {file = "watchdog-4.0.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:d4925e4bf7b9bddd1c3de13c9b8a2cdb89a468f640e66fbfabaf735bd85b3e35"}, + {file = "watchdog-4.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cad0bbd66cd59fc474b4a4376bc5ac3fc698723510cbb64091c2a793b18654db"}, + {file = "watchdog-4.0.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a3c2c317a8fb53e5b3d25790553796105501a235343f5d2bf23bb8649c2c8709"}, + {file = "watchdog-4.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c9904904b6564d4ee8a1ed820db76185a3c96e05560c776c79a6ce5ab71888ba"}, + {file = "watchdog-4.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:667f3c579e813fcbad1b784db7a1aaa96524bed53437e119f6a2f5de4db04235"}, + {file = "watchdog-4.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d10a681c9a1d5a77e75c48a3b8e1a9f2ae2928eda463e8d33660437705659682"}, + {file = "watchdog-4.0.1-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0144c0ea9997b92615af1d94afc0c217e07ce2c14912c7b1a5731776329fcfc7"}, + {file = "watchdog-4.0.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:998d2be6976a0ee3a81fb8e2777900c28641fb5bfbd0c84717d89bca0addcdc5"}, + {file = "watchdog-4.0.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:e7921319fe4430b11278d924ef66d4daa469fafb1da679a2e48c935fa27af193"}, + {file = "watchdog-4.0.1-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:f0de0f284248ab40188f23380b03b59126d1479cd59940f2a34f8852db710625"}, + {file = "watchdog-4.0.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:bca36be5707e81b9e6ce3208d92d95540d4ca244c006b61511753583c81c70dd"}, + {file = "watchdog-4.0.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:ab998f567ebdf6b1da7dc1e5accfaa7c6992244629c0fdaef062f43249bd8dee"}, + {file = "watchdog-4.0.1-py3-none-manylinux2014_aarch64.whl", hash = "sha256:dddba7ca1c807045323b6af4ff80f5ddc4d654c8bce8317dde1bd96b128ed253"}, + {file = "watchdog-4.0.1-py3-none-manylinux2014_armv7l.whl", hash = "sha256:4513ec234c68b14d4161440e07f995f231be21a09329051e67a2118a7a612d2d"}, + {file = "watchdog-4.0.1-py3-none-manylinux2014_i686.whl", hash = "sha256:4107ac5ab936a63952dea2a46a734a23230aa2f6f9db1291bf171dac3ebd53c6"}, + {file = "watchdog-4.0.1-py3-none-manylinux2014_ppc64.whl", hash = "sha256:6e8c70d2cd745daec2a08734d9f63092b793ad97612470a0ee4cbb8f5f705c57"}, + {file = "watchdog-4.0.1-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:f27279d060e2ab24c0aa98363ff906d2386aa6c4dc2f1a374655d4e02a6c5e5e"}, + {file = "watchdog-4.0.1-py3-none-manylinux2014_s390x.whl", hash = "sha256:f8affdf3c0f0466e69f5b3917cdd042f89c8c63aebdb9f7c078996f607cdb0f5"}, + {file = "watchdog-4.0.1-py3-none-manylinux2014_x86_64.whl", hash = "sha256:ac7041b385f04c047fcc2951dc001671dee1b7e0615cde772e84b01fbf68ee84"}, + {file = "watchdog-4.0.1-py3-none-win32.whl", hash = "sha256:206afc3d964f9a233e6ad34618ec60b9837d0582b500b63687e34011e15bb429"}, + {file = "watchdog-4.0.1-py3-none-win_amd64.whl", hash = "sha256:7577b3c43e5909623149f76b099ac49a1a01ca4e167d1785c76eb52fa585745a"}, + {file = "watchdog-4.0.1-py3-none-win_ia64.whl", hash = "sha256:d7b9f5f3299e8dd230880b6c55504a1f69cf1e4316275d1b215ebdd8187ec88d"}, + {file = "watchdog-4.0.1.tar.gz", hash = "sha256:eebaacf674fa25511e8867028d281e602ee6500045b57f43b08778082f7f8b44"}, +] + +[package.extras] +watchmedo = ["PyYAML (>=3.10)"] + [[package]] name = "wcwidth" version = "0.2.13" @@ -2529,6 +3897,102 @@ files = [ {file = "wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5"}, ] +[[package]] +name = "webcolors" +version = "24.6.0" +description = "A library for working with the color formats defined by HTML and CSS." +category = "main" +optional = false +python-versions = ">=3.8" +files = [ + {file = "webcolors-24.6.0-py3-none-any.whl", hash = "sha256:8cf5bc7e28defd1d48b9e83d5fc30741328305a8195c29a8e668fa45586568a1"}, + {file = "webcolors-24.6.0.tar.gz", hash = "sha256:1d160d1de46b3e81e58d0a280d0c78b467dc80f47294b91b1ad8029d2cedb55b"}, +] + +[package.extras] +docs = ["furo", "sphinx", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-notfound-page", "sphinxext-opengraph"] +tests = ["coverage[toml]"] + +[[package]] +name = "wrapt" +version = "1.16.0" +description = "Module for decorators, wrappers and monkey patching." +category = "main" +optional = false +python-versions = ">=3.6" +files = [ + {file = "wrapt-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ffa565331890b90056c01db69c0fe634a776f8019c143a5ae265f9c6bc4bd6d4"}, + {file = "wrapt-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e4fdb9275308292e880dcbeb12546df7f3e0f96c6b41197e0cf37d2826359020"}, + {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb2dee3874a500de01c93d5c71415fcaef1d858370d405824783e7a8ef5db440"}, + {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2a88e6010048489cda82b1326889ec075a8c856c2e6a256072b28eaee3ccf487"}, + {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac83a914ebaf589b69f7d0a1277602ff494e21f4c2f743313414378f8f50a4cf"}, + {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:73aa7d98215d39b8455f103de64391cb79dfcad601701a3aa0dddacf74911d72"}, + {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:807cc8543a477ab7422f1120a217054f958a66ef7314f76dd9e77d3f02cdccd0"}, + {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bf5703fdeb350e36885f2875d853ce13172ae281c56e509f4e6eca049bdfb136"}, + {file = "wrapt-1.16.0-cp310-cp310-win32.whl", hash = "sha256:f6b2d0c6703c988d334f297aa5df18c45e97b0af3679bb75059e0e0bd8b1069d"}, + {file = "wrapt-1.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:decbfa2f618fa8ed81c95ee18a387ff973143c656ef800c9f24fb7e9c16054e2"}, + {file = "wrapt-1.16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1a5db485fe2de4403f13fafdc231b0dbae5eca4359232d2efc79025527375b09"}, + {file = "wrapt-1.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:75ea7d0ee2a15733684badb16de6794894ed9c55aa5e9903260922f0482e687d"}, + {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a452f9ca3e3267cd4d0fcf2edd0d035b1934ac2bd7e0e57ac91ad6b95c0c6389"}, + {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:43aa59eadec7890d9958748db829df269f0368521ba6dc68cc172d5d03ed8060"}, + {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72554a23c78a8e7aa02abbd699d129eead8b147a23c56e08d08dfc29cfdddca1"}, + {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d2efee35b4b0a347e0d99d28e884dfd82797852d62fcd7ebdeee26f3ceb72cf3"}, + {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:6dcfcffe73710be01d90cae08c3e548d90932d37b39ef83969ae135d36ef3956"}, + {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:eb6e651000a19c96f452c85132811d25e9264d836951022d6e81df2fff38337d"}, + {file = "wrapt-1.16.0-cp311-cp311-win32.whl", hash = "sha256:66027d667efe95cc4fa945af59f92c5a02c6f5bb6012bff9e60542c74c75c362"}, + {file = "wrapt-1.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:aefbc4cb0a54f91af643660a0a150ce2c090d3652cf4052a5397fb2de549cd89"}, + {file = "wrapt-1.16.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5eb404d89131ec9b4f748fa5cfb5346802e5ee8836f57d516576e61f304f3b7b"}, + {file = "wrapt-1.16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9090c9e676d5236a6948330e83cb89969f433b1943a558968f659ead07cb3b36"}, + {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94265b00870aa407bd0cbcfd536f17ecde43b94fb8d228560a1e9d3041462d73"}, + {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f2058f813d4f2b5e3a9eb2eb3faf8f1d99b81c3e51aeda4b168406443e8ba809"}, + {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98b5e1f498a8ca1858a1cdbffb023bfd954da4e3fa2c0cb5853d40014557248b"}, + {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:14d7dc606219cdd7405133c713f2c218d4252f2a469003f8c46bb92d5d095d81"}, + {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:49aac49dc4782cb04f58986e81ea0b4768e4ff197b57324dcbd7699c5dfb40b9"}, + {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:418abb18146475c310d7a6dc71143d6f7adec5b004ac9ce08dc7a34e2babdc5c"}, + {file = "wrapt-1.16.0-cp312-cp312-win32.whl", hash = "sha256:685f568fa5e627e93f3b52fda002c7ed2fa1800b50ce51f6ed1d572d8ab3e7fc"}, + {file = "wrapt-1.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:dcdba5c86e368442528f7060039eda390cc4091bfd1dca41e8046af7c910dda8"}, + {file = "wrapt-1.16.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:d462f28826f4657968ae51d2181a074dfe03c200d6131690b7d65d55b0f360f8"}, + {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a33a747400b94b6d6b8a165e4480264a64a78c8a4c734b62136062e9a248dd39"}, + {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b3646eefa23daeba62643a58aac816945cadc0afaf21800a1421eeba5f6cfb9c"}, + {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ebf019be5c09d400cf7b024aa52b1f3aeebeff51550d007e92c3c1c4afc2a40"}, + {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:0d2691979e93d06a95a26257adb7bfd0c93818e89b1406f5a28f36e0d8c1e1fc"}, + {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:1acd723ee2a8826f3d53910255643e33673e1d11db84ce5880675954183ec47e"}, + {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:bc57efac2da352a51cc4658878a68d2b1b67dbe9d33c36cb826ca449d80a8465"}, + {file = "wrapt-1.16.0-cp36-cp36m-win32.whl", hash = "sha256:da4813f751142436b075ed7aa012a8778aa43a99f7b36afe9b742d3ed8bdc95e"}, + {file = "wrapt-1.16.0-cp36-cp36m-win_amd64.whl", hash = "sha256:6f6eac2360f2d543cc875a0e5efd413b6cbd483cb3ad7ebf888884a6e0d2e966"}, + {file = "wrapt-1.16.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a0ea261ce52b5952bf669684a251a66df239ec6d441ccb59ec7afa882265d593"}, + {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bd2d7ff69a2cac767fbf7a2b206add2e9a210e57947dd7ce03e25d03d2de292"}, + {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9159485323798c8dc530a224bd3ffcf76659319ccc7bbd52e01e73bd0241a0c5"}, + {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a86373cf37cd7764f2201b76496aba58a52e76dedfaa698ef9e9688bfd9e41cf"}, + {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:73870c364c11f03ed072dda68ff7aea6d2a3a5c3fe250d917a429c7432e15228"}, + {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:b935ae30c6e7400022b50f8d359c03ed233d45b725cfdd299462f41ee5ffba6f"}, + {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:db98ad84a55eb09b3c32a96c576476777e87c520a34e2519d3e59c44710c002c"}, + {file = "wrapt-1.16.0-cp37-cp37m-win32.whl", hash = "sha256:9153ed35fc5e4fa3b2fe97bddaa7cbec0ed22412b85bcdaf54aeba92ea37428c"}, + {file = "wrapt-1.16.0-cp37-cp37m-win_amd64.whl", hash = "sha256:66dfbaa7cfa3eb707bbfcd46dab2bc6207b005cbc9caa2199bcbc81d95071a00"}, + {file = "wrapt-1.16.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1dd50a2696ff89f57bd8847647a1c363b687d3d796dc30d4dd4a9d1689a706f0"}, + {file = "wrapt-1.16.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:44a2754372e32ab315734c6c73b24351d06e77ffff6ae27d2ecf14cf3d229202"}, + {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e9723528b9f787dc59168369e42ae1c3b0d3fadb2f1a71de14531d321ee05b0"}, + {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dbed418ba5c3dce92619656802cc5355cb679e58d0d89b50f116e4a9d5a9603e"}, + {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:941988b89b4fd6b41c3f0bfb20e92bd23746579736b7343283297c4c8cbae68f"}, + {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6a42cd0cfa8ffc1915aef79cb4284f6383d8a3e9dcca70c445dcfdd639d51267"}, + {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1ca9b6085e4f866bd584fb135a041bfc32cab916e69f714a7d1d397f8c4891ca"}, + {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d5e49454f19ef621089e204f862388d29e6e8d8b162efce05208913dde5b9ad6"}, + {file = "wrapt-1.16.0-cp38-cp38-win32.whl", hash = "sha256:c31f72b1b6624c9d863fc095da460802f43a7c6868c5dda140f51da24fd47d7b"}, + {file = "wrapt-1.16.0-cp38-cp38-win_amd64.whl", hash = "sha256:490b0ee15c1a55be9c1bd8609b8cecd60e325f0575fc98f50058eae366e01f41"}, + {file = "wrapt-1.16.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9b201ae332c3637a42f02d1045e1d0cccfdc41f1f2f801dafbaa7e9b4797bfc2"}, + {file = "wrapt-1.16.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2076fad65c6736184e77d7d4729b63a6d1ae0b70da4868adeec40989858eb3fb"}, + {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c5cd603b575ebceca7da5a3a251e69561bec509e0b46e4993e1cac402b7247b8"}, + {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b47cfad9e9bbbed2339081f4e346c93ecd7ab504299403320bf85f7f85c7d46c"}, + {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8212564d49c50eb4565e502814f694e240c55551a5f1bc841d4fcaabb0a9b8a"}, + {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5f15814a33e42b04e3de432e573aa557f9f0f56458745c2074952f564c50e664"}, + {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db2e408d983b0e61e238cf579c09ef7020560441906ca990fe8412153e3b291f"}, + {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:edfad1d29c73f9b863ebe7082ae9321374ccb10879eeabc84ba3b69f2579d537"}, + {file = "wrapt-1.16.0-cp39-cp39-win32.whl", hash = "sha256:ed867c42c268f876097248e05b6117a65bcd1e63b779e916fe2e33cd6fd0d3c3"}, + {file = "wrapt-1.16.0-cp39-cp39-win_amd64.whl", hash = "sha256:eb1b046be06b0fce7249f1d025cd359b4b80fc1c3e24ad9eca33e0dcdb2e4a35"}, + {file = "wrapt-1.16.0-py3-none-any.whl", hash = "sha256:6906c4100a8fcbf2fa735f6059214bb13b97f75b1a61777fcf6432121ef12ef1"}, + {file = "wrapt-1.16.0.tar.gz", hash = "sha256:5f370f952971e7d17c7d1ead40e49f32345a7f7a5373571ef44d800d06b1899d"}, +] + [[package]] name = "yattag" version = "1.15.2" @@ -2543,4 +4007,4 @@ files = [ [metadata] lock-version = "2.0" python-versions = "^3.10" -content-hash = "992d751849dcda50ed0f483c9801d4c6e4b14d0b4fe0a0ffc6171c21be56f472" +content-hash = "df6522e00b7fb1fa790b9df0f876dd9489ccc40a89f0606cf324269319244324" diff --git a/pyproject.toml b/pyproject.toml index b33e653..d9bb2a3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -25,6 +25,10 @@ plotly = "^5.22.0" json2html = "^1.3.0" yattag = "^1.15.2" python-docx = "^1.1.2" +linkml = "^1.8.1" +cruft = "^2.15.0" +rdflib = "^7.0.0" +owlready2 = "^0.46" [tool.poetry.group.dev.dependencies] diff --git a/tests/conftest.py b/tests/conftest.py index 48bee1a..018e02b 100755 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,4 +1,6 @@ +import re from pathlib import Path +from typing import Set import docker import pytest @@ -54,6 +56,8 @@ from trano.models.elements.weather import Weather from trano.topology import Network +OVERWRITE_MODELS = False + def is_success(results: docker.models.containers.ExecResult) -> bool: return "The simulation finished successfully" in results.output.decode() @@ -799,3 +803,59 @@ def building_multiple_internal_walls_ideas() -> Network: @pytest.fixture def house_model() -> Network: return house_model_fixture() + + +def remove_annotation(model: str) -> str: + for documentation in re.findall(r"Documentation(.*?)", model, re.DOTALL): + model = model.replace(documentation, "").replace("Documentation", "") + + model = model.replace(" ", "").replace("\n", "") + for annotation in re.findall(r"annotation(.*?);", model): + model = model.replace(annotation, "").replace("annotation", "") + + return model + + +def remove_common_package(model: str) -> str: + for annotation in re.findall(r"package Common(.*?)end Common;", model, re.DOTALL): + model = ( + model.replace(annotation, "") + .replace("package Common", "") + .replace("end Common;", "") + ) + return model + + +def clean_model(model: str, model_name: str) -> set: + if OVERWRITE_MODELS: + path_file = Path(__file__).parent.joinpath("data", f"{model_name}.mo") + with path_file.open("w") as f: + f.write(model) + model = remove_common_package(model) + model_ = remove_annotation(model) + return { + line + for line in set( + model_.replace("record", ";").replace(f"model{model_name}", "").split(";") + ) + if "ReaderTMY3weather" not in line + } + + +def _read(file_name: str) -> Set: + return { + line + for line in set( + remove_annotation( + remove_common_package( + Path(__file__) + .parent.joinpath("data", f"{file_name}.mo") + .read_text() + ) + ) + .replace("record", ";") + .replace(f"model{file_name}", "") + .split(";") + ) + if "ReaderTMY3weather" not in line + } diff --git a/tests/house.json b/tests/house.json new file mode 100644 index 0000000..58f8ea5 --- /dev/null +++ b/tests/house.json @@ -0,0 +1,363 @@ +{ + "materials": [ + { + "id": "MATERIAL:001", + "thermal_conductivity": 0.035, + "specific_heat_capacity": 1000.0, + "density": 2000.0, + "longwave_emissivity": 0.85, + "shortwave_emissivity": 0.85 + }, + { + "id": "MATERIAL:002", + "thermal_conductivity": 0.035, + "specific_heat_capacity": 1000.0, + "density": 2000.0, + "longwave_emissivity": 0.85, + "shortwave_emissivity": 0.85 + }, + { + "id": "MATERIAL:003", + "thermal_conductivity": 0.035, + "specific_heat_capacity": 1000.0, + "density": 2000.0, + "longwave_emissivity": 0.85, + "shortwave_emissivity": 0.85 + } + ], + "constructions": [ + { + "id": "CONSTRUCTION:001", + "layers": [ + { + "material": "MATERIAL:001", + "thickness": 0.1 + }, + { + "material": "MATERIAL:002", + "thickness": 0.1 + }, + { + "material": "MATERIAL:003", + "thickness": 0.1 + } + ] + } + ], + "spaces": [ + { + "id": "schema:Space:001", + "external_boundaries": { + "external_walls": [ + { + "surface": 100.0, + "azimuth": 180.0, + "tilt": "wall", + "construction": "CONSTRUCTION:001" + }, + { + "surface": 100.0, + "azimuth": 180.0, + "tilt": "wall", + "construction": "CONSTRUCTION:001" + }, + { + "surface": 200.0, + "azimuth": 180.0, + "tilt": "wall", + "construction": "CONSTRUCTION:001" + } + ] + }, + "parameters": { + "sensible_thermal_mass_scaling_factor": 1.0, + "floor_area": 100.0, + "average_room_height": 2.5, + "nominal_mass_flow_rate": 0.01, + "temperature_initial": 294.15 + }, + "occupancy": { + "parameters": { + "occupancy": "3600*{7, 19}", + "gain": "[35; 70; 30]", + "heat_gain_if_occupied": "1/6/4" + } + }, + "emissions": [ + { + "radiator": { + "id": "SYSTEM:007", + "parameters": { + "number_of_elements_used_in_the_discretization": 1.0, + "fraction_radiant_heat_transfer": 0.3, + "nominal_heating_power_positive_for_heating": 2000.0, + "water_inlet_temperature_at_nominal_condition": 363.15, + "water_outlet_temperature_at_nominal_condition": 353.15, + "air_temperature_at_nominal_condition": 293.15, + "radiative_temperature_at_nominal_condition": 293.15, + "exponent_for_heat_transfer": 1.9, + "fraction_of_nominal_mass_flow_rate_where_transition_to_turbulent_occurs": 0.01, + "dp_nominal": 1000.0 + } + } + }, + { + "valve": { + "id": "SYSTEM:008", + "parameters": { + "rangeability": 7.0, + "range_of_significant_deviation_from_equal_percentage_law": 0.01, + "dp_fixed_nominal": 6000.0, + "valve_leakage": 0.0001, + "fraction_of_nominal_flow_rate_where_linearization_starts_if_y_1": 0.02, + "m_flow_nominal": 0.01, + "dp_valve_nominal": 6000.0 + }, + "control": { + "emission_control": { + "parameters": { + "k_coo_con": 0.0, + "ti_coo_con": 900.0, + "k_hea_con": 0.1, + "ti_hea_con": 900.0, + "tim_che": 30.0, + "dt_hys": 0.25, + "loo_hys": 0.01 + } + } + } + } + } + ] + }, + { + "id": "schema:Space:002", + "external_boundaries": { + "external_walls": [ + { + "surface": 100.0, + "azimuth": 180.0, + "tilt": "wall", + "construction": "CONSTRUCTION:001" + }, + { + "surface": 100.0, + "azimuth": 180.0, + "tilt": "wall", + "construction": "CONSTRUCTION:001" + }, + { + "surface": 200.0, + "azimuth": 180.0, + "tilt": "wall", + "construction": "CONSTRUCTION:001" + } + ] + }, + "parameters": { + "sensible_thermal_mass_scaling_factor": 1.0, + "floor_area": 100.0, + "average_room_height": 2.5, + "nominal_mass_flow_rate": 0.01, + "temperature_initial": 294.15 + }, + "occupancy": { + "parameters": { + "occupancy": "3600*{7, 19}", + "gain": "[35; 70; 30]", + "heat_gain_if_occupied": "1/6/4" + } + }, + "emissions": [ + { + "radiator": { + "id": "SYSTEM:009", + "parameters": { + "number_of_elements_used_in_the_discretization": 1.0, + "fraction_radiant_heat_transfer": 0.3, + "nominal_heating_power_positive_for_heating": 2000.0, + "water_inlet_temperature_at_nominal_condition": 363.15, + "water_outlet_temperature_at_nominal_condition": 353.15, + "air_temperature_at_nominal_condition": 293.15, + "radiative_temperature_at_nominal_condition": 293.15, + "exponent_for_heat_transfer": 1.9, + "fraction_of_nominal_mass_flow_rate_where_transition_to_turbulent_occurs": 0.01, + "dp_nominal": 1000.0 + } + } + }, + { + "valve": { + "id": "SYSTEM:010", + "parameters": { + "rangeability": 7.0, + "range_of_significant_deviation_from_equal_percentage_law": 0.01, + "dp_fixed_nominal": 6000.0, + "valve_leakage": 0.0001, + "fraction_of_nominal_flow_rate_where_linearization_starts_if_y_1": 0.02, + "m_flow_nominal": 0.01, + "dp_valve_nominal": 6000.0 + }, + "control": { + "emission_control": { + "parameters": { + "k_coo_con": 0.0, + "ti_coo_con": 900.0, + "k_hea_con": 0.1, + "ti_hea_con": 900.0, + "tim_che": 30.0, + "dt_hys": 0.25, + "loo_hys": 0.01 + } + } + } + } + } + ] + }, + { + "id": "schema:Space:003", + "external_boundaries": { + "external_walls": [ + { + "surface": 100.0, + "azimuth": 180.0, + "tilt": "wall", + "construction": "CONSTRUCTION:001" + }, + { + "surface": 100.0, + "azimuth": 180.0, + "tilt": "wall", + "construction": "CONSTRUCTION:001" + }, + { + "surface": 200.0, + "azimuth": 180.0, + "tilt": "wall", + "construction": "CONSTRUCTION:001" + } + ] + }, + "parameters": { + "sensible_thermal_mass_scaling_factor": 1.0, + "floor_area": 100.0, + "average_room_height": 2.5, + "nominal_mass_flow_rate": 0.01, + "temperature_initial": 294.15 + }, + "occupancy": { + "parameters": { + "occupancy": "3600*{7, 19}", + "gain": "[35; 70; 30]", + "heat_gain_if_occupied": "1/6/4" + } + }, + "emissions": [ + { + "radiator": { + "id": "SYSTEM:011", + "parameters": { + "number_of_elements_used_in_the_discretization": 1.0, + "fraction_radiant_heat_transfer": 0.3, + "nominal_heating_power_positive_for_heating": 2000.0, + "water_inlet_temperature_at_nominal_condition": 363.15, + "water_outlet_temperature_at_nominal_condition": 353.15, + "air_temperature_at_nominal_condition": 293.15, + "radiative_temperature_at_nominal_condition": 293.15, + "exponent_for_heat_transfer": 1.9, + "fraction_of_nominal_mass_flow_rate_where_transition_to_turbulent_occurs": 0.01, + "dp_nominal": 1000.0 + } + } + }, + { + "valve": { + "id": "SYSTEM:012", + "parameters": { + "rangeability": 7.0, + "range_of_significant_deviation_from_equal_percentage_law": 0.01, + "dp_fixed_nominal": 6000.0, + "valve_leakage": 0.0001, + "fraction_of_nominal_flow_rate_where_linearization_starts_if_y_1": 0.02, + "m_flow_nominal": 0.01, + "dp_valve_nominal": 6000.0 + }, + "control": { + "emission_control": { + "parameters": { + "k_coo_con": 0.0, + "ti_coo_con": 900.0, + "k_hea_con": 0.1, + "ti_hea_con": 900.0, + "tim_che": 30.0, + "dt_hys": 0.25, + "loo_hys": 0.01 + } + } + } + } + } + ] + } + ], + "systems": [ + { + "boiler": { + "id": "SYSTEM:001" + } + }, + { + "pump": { + "id": "SYSTEM:002", + "outlets": [ + "SYSTEM:004", + "SYSTEM:006" + ] + } + }, + { + "split_valve": { + "id": "SYSTEM:003", + "inlets": [ + "SYSTEM:008", + "SYSTEM:010" + ], + "outlets": [ + "SYSTEM:001" + ] + } + }, + { + "three_way_valve": { + "id": "SYSTEM:004", + "outlets": [ + "SYSTEM:007", + "SYSTEM:009", + "SYSTEM:003" + ] + } + }, + { + "split_valve": { + "id": "SYSTEM:005", + "inlets": [ + "SYSTEM:012" + ], + "outlets": [ + "SYSTEM:001" + ] + } + }, + { + "three_way_valve": { + "id": "SYSTEM:006", + "outlets": [ + "SYSTEM:011", + "SYSTEM:005" + ] + } + } + ], + "@type": "Building" +} diff --git a/tests/house.yaml b/tests/house.yaml new file mode 100644 index 0000000..36d3fa4 --- /dev/null +++ b/tests/house.yaml @@ -0,0 +1,163 @@ +materials: + - id: MATERIAL:001 + thermal_conductivity: 0.035 + density: 2000.0 + specific_heat_capacity: 1000.0 + - id: MATERIAL:002 + thermal_conductivity: 0.035 + density: 2000.0 + specific_heat_capacity: 1000.0 + - id: MATERIAL:003 + thermal_conductivity: 0.035 + density: 2000.0 + specific_heat_capacity: 1000.0 + +constructions: + - id: CONSTRUCTION:001 + layers: + - material: MATERIAL:001 + thickness: 0.1 + - material: MATERIAL:002 + thickness: 0.1 + - material: MATERIAL:003 + thickness: 0.1 +spaces: + - id: schema:Space:001 + occupancy: + parameters: + occupancy: 3600*{7, 19} + parameters: + floor_area: 100.0 + average_room_height: 2.5 + external_boundaries: + external_walls: + - surface: 100.0 + azimuth: 180.0 + tilt: wall + construction: CONSTRUCTION:001 + - surface: 100.0 + azimuth: 180.0 + tilt: wall + construction: CONSTRUCTION:001 + - surface: 200.0 + azimuth: 180.0 + tilt: wall + construction: CONSTRUCTION:001 + emissions: + - radiator: + id: SYSTEM:007 + parameters: + exponent_for_heat_transfer: 1.9 + + - valve: + id: SYSTEM:008 + parameters: + rangeability: 7 + control: + emission_control: + parameters: + k_coo_con: 0.0 + - id: schema:Space:002 + occupancy: + parameters: + occupancy: 3600*{7, 19} + parameters: + floor_area: 100.0 + average_room_height: 2.5 + external_boundaries: + external_walls: + - surface: 100.0 + azimuth: 180.0 + tilt: wall + construction: CONSTRUCTION:001 + - surface: 100.0 + azimuth: 180.0 + tilt: wall + construction: CONSTRUCTION:001 + - surface: 200.0 + azimuth: 180.0 + tilt: wall + construction: CONSTRUCTION:001 + emissions: + - radiator: + id: SYSTEM:009 + parameters: + exponent_for_heat_transfer: 1.9 + + - valve: + id: SYSTEM:010 + parameters: + rangeability: 7 + control: + emission_control: + parameters: + k_coo_con: 0.0 + + - id: schema:Space:003 + occupancy: + parameters: + occupancy: 3600*{7, 19} + parameters: + floor_area: 100.0 + average_room_height: 2.5 + external_boundaries: + external_walls: + - surface: 100.0 + azimuth: 180.0 + tilt: wall + construction: CONSTRUCTION:001 + - surface: 100.0 + azimuth: 180.0 + tilt: wall + construction: CONSTRUCTION:001 + - surface: 200.0 + azimuth: 180.0 + tilt: wall + construction: CONSTRUCTION:001 + emissions: + - radiator: + id: SYSTEM:011 + parameters: + exponent_for_heat_transfer: 1.9 + - valve: + id: SYSTEM:012 + parameters: + rangeability: 7 + control: + emission_control: + parameters: + k_coo_con: 0.0 + + +systems: + - boiler: + id: SYSTEM:001 + - pump: + id: SYSTEM:002 + outlets: + - SYSTEM:004 + - SYSTEM:006 + - split_valve: + id: SYSTEM:003 + inlets: + - SYSTEM:008 + - SYSTEM:010 + outlets: + - SYSTEM:001 + - three_way_valve: + id: SYSTEM:004 + outlets: + - SYSTEM:007 + - SYSTEM:009 + - SYSTEM:003 + - split_valve: + id: SYSTEM:005 + inlets: + - SYSTEM:012 + outlets: + - SYSTEM:001 + - three_way_valve: + id: SYSTEM:006 + outlets: + - SYSTEM:011 + - SYSTEM:005 diff --git a/tests/test_schema.py b/tests/test_schema.py new file mode 100644 index 0000000..ea5eeb6 --- /dev/null +++ b/tests/test_schema.py @@ -0,0 +1,72 @@ +import os +import subprocess +import tempfile +from pathlib import Path +from typing import Optional + +import pytest +from linkml.validator import validate_file + +from tests.conftest import _read, clean_model +from trano.data_models.conversion import convert_model + + +def convert( + schema: Path, input_file: str, target: str, output: Optional[Path] = None +) -> bool: + root_path = Path(__file__).parents[1] + os.chdir(root_path) + input = root_path.joinpath("tests", input_file) + output = output or root_path.joinpath( + "tests", f"{input.stem}.{target.replace('-', '_')}" + ) + command = [ + "poetry", + "run", + "linkml-convert", + "-o", + f"{output}", + "-t", + target, + "-f", + "yaml", + "-C", + "Building", + "-s", + str(schema), + f"{input}", + ] + + process = subprocess.run(command, check=True, capture_output=True, text=True) + return process.returncode == 0 + + +@pytest.fixture +def schema() -> Path: + return Path(__file__).parents[1].joinpath("trano", "data_models", "trano.yaml") + + +def test_validate_schema() -> None: + data_model_path = ( + Path(__file__).parents[1].joinpath("trano", "data_models", "trano.yaml") + ) + report = validate_file("house.yaml", data_model_path, "Building") + assert report.results == [] + + +def test_convert_to_json(schema: Path) -> None: + for target in ["ttl", "json", "rdf", "json-ld"]: + with tempfile.NamedTemporaryFile() as temp: + assert convert(schema, "house.yaml", target, Path(temp.name)) + + +def test_convert_to_json_(schema: Path) -> None: + for target in ["json"]: + assert convert(schema, "house.yaml", target) + + +def test_create_model() -> None: + model_name = "house" + model_path = Path(__file__).parents[1].joinpath("tests", "house.json") + model_ = convert_model(model_name, model_path) + assert clean_model(model_, model_name) == set(_read(model_name)) diff --git a/tests/test_template.py b/tests/test_template.py index 52b5417..b45410e 100755 --- a/tests/test_template.py +++ b/tests/test_template.py @@ -1,71 +1,12 @@ -import re from pathlib import Path -from typing import Set import pytest +from tests.conftest import _read, clean_model from trano.library.library import Buildings, Ideas from trano.models.elements.space import Space from trano.topology import Network -OVERWRITE_MODELS = False - - -def remove_annotation(model: str) -> str: - for documentation in re.findall(r"Documentation(.*?)", model, re.DOTALL): - model = model.replace(documentation, "").replace("Documentation", "") - - model = model.replace(" ", "").replace("\n", "") - for annotation in re.findall(r"annotation(.*?);", model): - model = model.replace(annotation, "").replace("annotation", "") - - return model - - -def remove_common_package(model: str) -> str: - for annotation in re.findall(r"package Common(.*?)end Common;", model, re.DOTALL): - model = ( - model.replace(annotation, "") - .replace("package Common", "") - .replace("end Common;", "") - ) - return model - - -def clean_model(model: str, model_name: str) -> set: - if OVERWRITE_MODELS: - path_file = Path(__file__).parent.joinpath("data", f"{model_name}.mo") - with path_file.open("w") as f: - f.write(model) - model = remove_common_package(model) - model_ = remove_annotation(model) - return { - line - for line in set( - model_.replace("record", ";").replace(f"model{model_name}", "").split(";") - ) - if "ReaderTMY3weather" not in line - } - - -def _read(file_name: str) -> Set: - return { - line - for line in set( - remove_annotation( - remove_common_package( - Path(__file__) - .parent.joinpath("data", f"{file_name}.mo") - .read_text() - ) - ) - .replace("record", ";") - .replace(f"model{file_name}", "") - .split(";") - ) - if "ReaderTMY3weather" not in line - } - @pytest.mark.run(order=1) # TODO: code smell! def test_template_buildings_free_float_single_zone( diff --git a/trano/construction.py b/trano/construction.py index f7344e4..bc245a9 100644 --- a/trano/construction.py +++ b/trano/construction.py @@ -1,4 +1,4 @@ -from pydantic import BaseModel +from pydantic import BaseModel, field_validator from trano.material import Material @@ -64,6 +64,13 @@ class Construction(BaseModel): def __hash__(self) -> int: return hash(self.name) + @field_validator("name") + @classmethod + def clean_name(cls, value: str) -> str: + if ":" in value: + return value.lower().replace(":", "_") + return value + class Constructions: external_wall: Construction = Construction( diff --git a/trano/data_models/__init__.py b/trano/data_models/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/trano/data_models/conversion.py b/trano/data_models/conversion.py new file mode 100644 index 0000000..63b2931 --- /dev/null +++ b/trano/data_models/conversion.py @@ -0,0 +1,122 @@ +import json +from pathlib import Path + +from trano.construction import Construction, Layer +from trano.material import Material +from trano.models.elements.boiler import Boiler +from trano.models.elements.controls.boiler import BoilerControl +from trano.models.elements.controls.collector import CollectorControl +from trano.models.elements.controls.emission import EmissionControl +from trano.models.elements.controls.three_way_valve import ThreeWayValveControl +from trano.models.elements.envelope.external_wall import ExternalWall +from trano.models.elements.occupancy import Occupancy +from trano.models.elements.pump import Pump +from trano.models.elements.radiator import Radiator +from trano.models.elements.space import Space, SpaceParameter +from trano.models.elements.split_valve import SplitValve +from trano.models.elements.three_way_valve import ThreeWayValve +from trano.models.elements.valve import Valve +from trano.topology import Network + + +# TODO: reduce complexity +def convert_model(name: str, model_path: Path) -> str: # noqa: PLR0912, PLR0915, C901 + network = Network(name=name) + occupancy = None + house_json = model_path + data = json.loads(house_json.read_text()) + materials = { + material["id"]: Material(**(material | {"name": material["id"]})) + for material in data["materials"] + } + constructions = {} + for construction in data["constructions"]: + layers = [ + Layer(**(layer | {"material": materials[layer["material"]]})) + for layer in construction["layers"] + ] + constructions[construction["id"]] = Construction( + name=construction["id"], layers=layers + ) + spaces = [] + space_dict = {} + systems = {} + for space in data["spaces"]: + external_boundaries = space["external_boundaries"] + external_walls = [] + for external_wall in external_boundaries["external_walls"]: + external_wall_ = ExternalWall( + **( + external_wall + | {"construction": constructions[external_wall["construction"]]} + ) + ) + external_walls.append(external_wall_) + if space.get("occupancy"): + occupancy = Occupancy(**space["occupancy"]) + emissions = [] + for emission in space["emissions"]: + if emission.get("radiator"): + radiator = emission["radiator"] + name = radiator.pop("id") + radiator = Radiator(**(radiator | {"name": name})) + emissions.append(radiator) + systems[name] = radiator + if emission.get("valve"): + valve = emission["valve"] + name = valve.pop("id") + control = None + if valve.get("control"): + control = valve["control"] + if control.get("emission_control"): + control = EmissionControl(**control["emission_control"]) + valve = Valve(**(valve | {"control": control, "name": name})) + systems[name] = valve + emissions.append(valve) + space_ = Space( + name=space["id"], + external_boundaries=external_walls, + occupancy=occupancy, + parameters=SpaceParameter(**space["parameters"]), + emissions=emissions, + ) + space_dict[space_.name] = space_ + spaces.append(space_) + network.add_boiler_plate_spaces(spaces) + edges = [] + + for system in data["systems"]: + for system_type, value in system.items(): + if system_type == "boiler": + boiler = Boiler( + name=value["id"], control=BoilerControl(name="boiler_control") + ) + systems[value["id"]] = boiler + if system_type == "three_way_valve": + three_way_valve = ThreeWayValve( + name=value["id"], control=ThreeWayValveControl() + ) + systems[value["id"]] = three_way_valve + if system_type == "pump": + pump = Pump( + name=value["id"], control=CollectorControl(name="pump_control") + ) + systems[value["id"]] = pump + if system_type == "split_valve": + split_valve = SplitValve(name=value["id"]) + systems[value["id"]] = split_valve + for system in data["systems"]: + for value in system.values(): + edges += [ + (systems[value["id"]], systems[outlet]) + for outlet in value.get("outlets", []) + ] + edges += [ + (systems[inlet], systems[value["id"]]) + for inlet in value.get("inlets", []) + ] + + for edge in edges: + network.connect_systems(*edge) + model = network.model() + return model diff --git a/trano/data_models/trano.yaml b/trano/data_models/trano.yaml new file mode 100644 index 0000000..1675ba4 --- /dev/null +++ b/trano/data_models/trano.yaml @@ -0,0 +1,750 @@ +--- +id: https://w3id.org/my-org/trano +name: trano +title: trano +description: |- + This is the project description. +license: MIT +see_also: + - https://my-org.github.io/trano +default_curi_maps: + - semweb_context +prefixes: + trano: https://w3id.org/my-org/trano/ + linkml: https://w3id.org/linkml/ + biolink: https://w3id.org/biolink/ + schema: http://schema.org/ + + PATO: http://purl.obolibrary.org/obo/PATO_ + example: https://example.org/ + SYSTEM: http://example.org/SYSTEM/ + MATERIAL: http://example.org/MATERIAL/ + CONSTRUCTION: http://example.org/CONSTRUCTION/ +default_prefix: trano +default_range: string + +imports: + - linkml:types + +classes: + Space: + description: >- + Represents a Space + slot_usage: + parameters: + range: SpaceParameter + slots: + - id + - name + - external_boundaries + - parameters + - occupancy + - emissions + class_uri: schema:Space + ExternalWall: + attributes: + construction: + description: Construction + range: Construction + slots: + - surface + - azimuth + - tilt + ExternalBoundaries: + attributes: + external_walls: + range: ExternalWall + multivalued: true + inlined: true + floor_on_grounds: + range: ExternalWall + multivalued: true + inlined: true + + Material: + slots: + - id + attributes: + thermal_conductivity: + description: Thermal conductivity [W/(m.K)] + range: float + specific_heat_capacity: + description: Specific thermal capacity [J/(kg.K)] + range: float + density: + description: Density [kg/m3] + range: float + longwave_emissivity: + description: Longwave emissivity [1] + range: float + ifabsent: float(0.85) + shortwave_emissivity: + description: Shortwave emissivity [1] + range: float + ifabsent: float(0.85) + Layer: + attributes: + material: + description: Material + range: Material + thickness: + description: Thickness [m] + range: float + Construction: + slots: + - id + attributes: + layers: + description: Layers + range: Layer + multivalued: true + Parameter: + description: >- + Represents Parameters + slots: + - name + class_uri: schema:Parameter + Occupancy: + description: >- + Represents Occupancy + slots: + - parameters + slot_usage: + parameters: + range: OccupancyParameter + class_uri: schema:Occupancy + + System: + slots: + - id + - inlets + - outlets + class_uri: schema:System + Systems: + slots: +# - valve + - split_valve + - three_way_valve + - boiler + - pump + class_uri: schema:Systems + + Emission: + slots: + - radiator + - valve + class_uri: schema:Emission + + SplitValve: + is_a: System + attributes: + parameters: + range: SplitValveParameters + Radiator: + is_a: System + + slots: + - parameters + slot_usage: + parameters: + range: RadiatorParameter + Valve: + is_a: System + attributes: + control: + range: Control + slots: + - parameters + slot_usage: + parameters: + range: ValveParameters + ThreeWayValve: + is_a: System + attributes: + parameters: + range: ThreeWayValveParameters + Boiler: + is_a: System + attributes: + parameters: + range: BoilerParameters + + Pump: + is_a: System + attributes: + parameters: + range: PumpParameters + + + EmissionControl: + attributes: + parameters: + range: ControlLoopsParameters + multivalued: false + class_uri: schema:EmissionControl + + Control: + slots: + - emission_control + class_uri: schema:Control + + OccupancyParameter: + attributes: + occupancy: + description: Occupancy table, each entry switching occupancy on or off + range: string + ifabsent: string(3600*{7, 19}) + gain: + description: Gain to convert from occupancy (per person) to radiant, convective and latent heat in [W/m2] + range: string + ifabsent: string([35; 70; 30]) + heat_gain_if_occupied: + description: Heat gain if occupied + range: string + ifabsent: string(1/6/4) + + PumpParameters: + attributes: + m_flow_nominal: + description: Nominal mass flow rate for configuration of pressure curve + range: float + ifabsent: float(0.008) + dp_nominal: + description: Nominal pressure head for configuration of pressure curve + range: float + ifabsent: float(10000) + per: + description: Record with performance data + range: string + control_input_type: + description: Control input type + range: string + constant_input_set_point: + description: Constant input set point + range: float + vector_of_input_set_points_corresponding_to_stages: + description: Vector of input set points corresponding to stages + range: string +# compute_power_using_similarity_laws: +# description: = true, compute power exactly, using similarity laws. Otherwise approximate. +# range: boolean + + SplitValveParameters: + attributes: + m_flow_nominal: + range: float + required: false + description: Mass flow rate. Set negative at outflowing ports. + ifabsent: float(0.008) + dp_nominal: + range: string + required: false + description: Pa + ifabsent: string("{10000,-1,-1}") + aliases: + - dp_nominal + fraction_of_nominal_mass_flow_rate_where_transition_to_turbulent_occurs: + range: float + required: false + description: Fraction of nominal mass flow rate where transition to turbulent occurs + ifabsent: float(0.3) + aliases: + - deltaM +# use_linear_relation_between_m_flow_and_dp_for_any_flow_rate: +# range: boolean +# required: false +# description: = true, use linear relation between m_flow and dp for any flow rate +# ifabsent: false +# aliases: +# - linearized + time_constant_at_nominal_flow_for_dynamic_energy_and_momentum_balance: + range: float + required: false + description: Time constant at nominal flow for dynamic energy and momentum balance + aliases: + - tau + nominal_mass_flow_rate_for_dynamic_momentum_and_energy_balance: + range: float + required: false + description: Nominal mass flow rate for dynamic momentum and energy balance + aliases: + - mDyn_flow_nominal + + ThreeWayValveParameters: + attributes: + rangeability: + range: float + required: false + description: Rangeability, R=50...100 typically + ifabsent: float(50) + aliases: + - R + range_of_significant_deviation_from_equal_percentage_law: + range: float + required: false + description: Range of significant deviation from equal percentage law + ifabsent: float(0.01) + aliases: + - delta0 + dp_fixed_nominal: + range: string + required: false + description: Nominal pressure drop of pipes and other equipment in flow legs at port_1 and port_3 + ifabsent: string("{100,0}") + aliases: + - dpFixed_nominal + fra_k: + range: float + required: false + ifabsent: float(0.7) + aliases: + - fraK + valve_leakage: + range: string + required: false + description: Valve leakage, l=Kv(y=0)/Kv(y=1) + ifabsent: string("{0.01,0.01}") + aliases: + - l + fraction_of_nominal_flow_rate_where_linearization_starts_if_y_1: + range: float + required: false + description: Fraction of nominal flow rate where linearization starts, if y=1 + ifabsent: float(0.02) + aliases: + - deltaM + use_linear_relation_between_m_flow_and_dp_for_any_flow_rate: + range: string + required: false + description: = true, use linear relation between m_flow and dp for any flow rate + ifabsent: string("{false, false}") + aliases: + - linearized + Kv: + range: float + required: false + description: Kv (metric) flow coefficient [m3/h/(bar)^(1/2)] + Cv: + range: float + required: false + description: Cv (US) flow coefficient [USG/min/(psi)^(1/2)] + Av: + range: string + required: false + description: Av (metric) flow coefficient + m_flow_nominal: + range: float + required: false + description: Nominal mass flow rate + ifabsent: float(0.0078) + dp_valve_nominal: + range: float + required: false + description: Pa + ifabsent: float(6000) + rho_std: + range: float + required: false + description: Inlet density for which valve coefficients are defined + BoilerParameters: + attributes: + sca_fac_rad: + description: Scaling factor to scale the power (and mass flow rate) of the radiator loop + range: float + ifabsent: float(1.5) + dt_boi_nominal: + description: Nominal temperature difference for boiler loop + range: float + ifabsent: float(20) + dt_rad_nominal: + description: Nominal temperature difference for radiator loop + range: float + ifabsent: float(10) + coefficients_for_efficiency_curve: + description: Coefficients for efficiency curve + range: string + ifabsent: string({0.9}) + effcur: + description: Buildings.Fluid.Types.EfficiencyCurves.Constant + range: string + temperature_used_to_compute_nominal_efficiency: + description: Temperature used to compute nominal efficiency (only used if efficiency curve depends on temperature) + range: float + ifabsent: float(353.15) + fuel_type: + description: Fuel type + range: string + nominal_heating_power: + description: Nominal heating power + range: float + ifabsent: float(2000) + dp_nominal: + description: Pa + range: float + ifabsent: float(5000) +# use_linear_relation_between_m_flow_and_dp_for_any_flow_rate: +# description: = true, use linear relation between m_flow and dp for any flow rate +# range: boolean +# ifabsent: false + fraction_of_nominal_flow_rate_where_flow_transitions_to_laminar: + description: Fraction of nominal flow rate where flow transitions to laminar + range: float + ifabsent: float(0.1) +# if_actual_temperature_at_port_is_computed: +# description: = true, if actual temperature at port is computed +# range: boolean +# ifabsent: false + tank_volume: + description: Tank volume + range: float + ifabsent: float(0.2) + height_of_tank_without_insulation: + description: Height of tank (without insulation) + range: float + ifabsent: float(2) + number_of_volume_segments: + description: Number of volume segments + range: float + ifabsent: float(4) + thickness_of_insulation: + description: Thickness of insulation + range: float + ifabsent: float(0.002) + dp: + description: "" + range: string + ValveParameters: + attributes: + rangeability: + range: float + required: false + description: Rangeability, R=50...100 typically + ifabsent: float(50) + aliases: + - R + range_of_significant_deviation_from_equal_percentage_law: + range: float + required: false + description: Range of significant deviation from equal percentage law + ifabsent: float(0.01) + aliases: + - delta0 + dp_fixed_nominal: + range: float + required: false + description: Pa + ifabsent: float(6000) + aliases: + - dpFixed_nominal + valve_leakage: + range: float + required: false + description: Valve leakage, l=Kv(y=0)/Kv(y=1) + ifabsent: float(0.0001) + aliases: + - l + k_fixed: + range: string + required: false +# use_m_flow_f_dp_else_dp_f_m_flow: +# range: boolean +# required: false +# description: = true, use m_flow = f(dp) else dp = f(m_flow) +# ifabsent: true +# aliases: +# - from_dp +# use_linear_relation_between_m_flow_and_dp_for_any_flow_rate: +# range: boolean +# required: false +# description: = true, use linear relation between m_flow and dp for any flow rate +# ifabsent: false +# aliases: +# - linearized + kv: + range: float + required: false + description: Kv (metric) flow coefficient [m3/h/(bar)^(1/2)] + aliases: + - Kv + cv: + range: float + required: false + description: Cv (US) flow coefficient [USG/min/(psi)^(1/2)] + aliases: + - Cv + av: + range: string + required: false + description: Av (metric) flow coefficient + aliases: + - Av + fraction_of_nominal_flow_rate_where_linearization_starts_if_y_1: + range: float + required: false + description: Fraction of nominal flow rate where linearization starts, if y=1 + ifabsent: float(0.02) + aliases: + - deltaM + m_flow_nominal: + range: float + required: false + description: Nominal mass flow rate + ifabsent: float(0.01) + dp_valve_nominal: + range: float + required: false + description: Pa + ifabsent: float(6000) + + RadiatorParameter: + attributes: + number_of_elements_used_in_the_discretization: + range: float + description: Number of elements used in the discretization + ifabsent: int(1) + aliases: + - nEle + fraction_radiant_heat_transfer: + range: float + description: Fraction radiant heat transfer + ifabsent: float(0.3) + aliases: + - fraRad + nominal_heating_power_positive_for_heating: + range: float + description: Nominal heating power (positive for heating) + ifabsent: float(2000) + aliases: + - Q_flow_nominal + water_inlet_temperature_at_nominal_condition: + range: float + description: Water inlet temperature at nominal condition + ifabsent: float(363.15) + aliases: + - T_a_nominal + water_outlet_temperature_at_nominal_condition: + range: float + description: Water outlet temperature at nominal condition + ifabsent: float(353.15) + aliases: + - T_b_nominal + air_temperature_at_nominal_condition: + range: float + description: Air temperature at nominal condition + ifabsent: float(293.15) + aliases: + - TAir_nominal + radiative_temperature_at_nominal_condition: + range: float + description: Radiative temperature at nominal condition + ifabsent: float(293.15) + aliases: + - TRad_nominal + exponent_for_heat_transfer: + range: float + description: Exponent for heat transfer + ifabsent: float(1.24) + aliases: + - n + fraction_of_nominal_mass_flow_rate_where_transition_to_turbulent_occurs: + range: float + description: Fraction of nominal mass flow rate where transition to turbulent occurs + ifabsent: float(0.01) + aliases: + - deltaM +# use_m_flow_f_dp_else_dp_f_m_flow: +# range: string +# description: = true, use m_flow = f(dp) else dp = f(m_flow) +# ifabsent: string("false") +# aliases: +# - from_dp + dp_nominal: + range: float + ifabsent: float(1000) + required: false + ControlLoopsParameters: + attributes: + k_coo_con: + description: Gain of controller for cooling control loop + range: float + ifabsent: float(0.1) + ti_coo_con: + description: Time constant of integrator block for cooling control loop + range: float + ifabsent: float(900) + k_hea_con: + description: Gain of controller for heating control loop + range: float + ifabsent: float(0.1) + ti_hea_con: + description: Time constant of integrator block for heating control loop + range: float + ifabsent: float(900) + tim_che: + description: Threshold time to check the zone temperature status + range: float + ifabsent: float(30) + dt_hys: + description: Delta between the temperature hysteresis high and low limit + range: float + ifabsent: float(0.25) + loo_hys: + description: Threshold value to check if the controller output is near zero + range: float + ifabsent: float(0.01) + + SpaceParameter: + attributes: + sensible_thermal_mass_scaling_factor: + range: float + description: Factor for scaling the sensible thermal mass of the zone air volume + ifabsent: float(1.0) + aliases: + - mSenFac + floor_area: + range: float + required: false + description: Floor area [m2] + ifabsent: float(20.0) + aliases: + - AFlo + average_room_height: + range: float + required: false + description: Average room height [m] + ifabsent: float(2.0) + aliases: + - hRoo +# linearize_emissive_power: +# range: string +# description: Set to true to linearize emissive power +# ifabsent: string(test) +# aliases: +# - linearizeRadiation + nominal_mass_flow_rate: + range: float + description: Nominal mass flow rate [kg/s] + ifabsent: float(0.01) + aliases: + - m_flow_nominal + temperature_initial: + range: float + description: Initial temperature [K] + ifabsent: float(294.15) + aliases: + - T_start + + + + + Building: + tree_root: true + description: >- + A holder for Space objects + attributes: + materials: + range: Material + inlined: true + inlined_as_list: true + multivalued: true + constructions: + range: Construction + inlined: true + inlined_as_list: true + multivalued: true + spaces: + range: Space + inlined: true + inlined_as_list: true + multivalued: true + systems: + range: Systems + inlined: true + inlined_as_list: true + multivalued: true + + +slots: + id: + identifier: true + slot_uri: schema:identifier + description: A unique identifier for a thing + name: + slot_uri: schema:name + description: A human-readable name for a thing + parameters: + slot_uri: schema:parameters + range: Parameter + multivalued: false + inlets: + slot_uri: schema:inlets + range: System + multivalued: true + outlets: + slot_uri: schema:inlets + range: System + multivalued: true + occupancy: + slot_uri: schema:occupancy + range: Occupancy + multivalued: false + radiator: + range: Radiator + multivalued: false + inlined: true + valve: + range: Valve + multivalued: false + inlined: true + three_way_valve: + range: ThreeWayValve + multivalued: false + inlined: true + + split_valve: + range: SplitValve + multivalued: false + inlined: true + + boiler: + range: Boiler + multivalued: false + inlined: true + + pump: + range: Pump + multivalued: false + inlined: true + + emissions: + slot_uri: schema:emissions + range: Emission + multivalued: true + inlined: true + emission_control: + slot_uri: schema:emission_control + range: EmissionControl + multivalued: false + external_boundaries: + slot_uri: schema:external_boundaries + range: ExternalBoundaries + multivalued: false + surface: + slot_uri: schema:surface + range: float + azimuth: + slot_uri: schema:azimuth + range: float + tilt: + slot_uri: schema:tilt + range: string + +enums: + ControlType: + permissible_values: + Ahu: + Boiler: + Collector: + Emission: + VAV: + ThreeWayValve: diff --git a/trano/material.py b/trano/material.py index deab574..4573c63 100644 --- a/trano/material.py +++ b/trano/material.py @@ -1,4 +1,4 @@ -from pydantic import BaseModel, ConfigDict, Field +from pydantic import BaseModel, ConfigDict, Field, field_validator class Material(BaseModel): @@ -21,6 +21,13 @@ class Material(BaseModel): def __hash__(self) -> int: return hash(self.name) + @field_validator("name") + @classmethod + def clean_name(cls, value: str) -> str: + if ":" in value: + return value.lower().replace(":", "_") + return value + class GlassMaterial(Material): solar_transmittance: list[float] diff --git a/trano/models/elements/base.py b/trano/models/elements/base.py index 831a439..e300b12 100644 --- a/trano/models/elements/base.py +++ b/trano/models/elements/base.py @@ -17,8 +17,8 @@ BaseModel, ConfigDict, Field, - computed_field, create_model, + field_validator, model_validator, ) @@ -249,6 +249,13 @@ def assign_default_name(self) -> "BaseElement": type(self).name_counter += 1 return self + @field_validator("name") + @classmethod + def clean_name(cls, value: str) -> str: + if ":" in value: + return value.lower().replace(":", "_") + return value + def assign_library_property(self, library: "Libraries") -> bool: if self.libraries_data is None: return False @@ -280,7 +287,7 @@ def get_position(self, layout: Dict["BaseElement", Any]) -> None: def get_controllable_ports(self) -> List[Port]: return [port for port in self.ports if port.is_controllable()] - @computed_field + @property def type(self) -> str: return type(self).__name__ diff --git a/trano/models/elements/envelope/base.py b/trano/models/elements/envelope/base.py index 0cfcff7..fe3d38d 100644 --- a/trano/models/elements/envelope/base.py +++ b/trano/models/elements/envelope/base.py @@ -1,7 +1,7 @@ from math import sqrt from typing import TYPE_CHECKING, Dict, List, Optional, Union -from pydantic import computed_field, model_validator +from pydantic import model_validator from trano.construction import Construction from trano.glass import Glass @@ -15,7 +15,7 @@ class BaseWall(BaseElement): ... - @computed_field # type: ignore + # @computed_field # type: ignore @property def length(self) -> int: if hasattr(self, "surfaces"): diff --git a/trano/models/elements/space.py b/trano/models/elements/space.py index 38d526e..a95bb47 100644 --- a/trano/models/elements/space.py +++ b/trano/models/elements/space.py @@ -324,7 +324,7 @@ def _assign_space(self) -> None: if self.occupancy: self.occupancy.space_name = self.name - @computed_field # type: ignore + # @computed_field # type: ignore @property def number_merged_external_boundaries(self) -> int: return sum( @@ -334,12 +334,12 @@ def number_merged_external_boundaries(self) -> int: ] ) - @computed_field # type: ignore + # @computed_field # type: ignore @property def number_ventilation_ports(self) -> int: return 2 + 1 # databus - @computed_field # type: ignore + # @computed_field # type: ignore @property def merged_external_boundaries( self, @@ -352,12 +352,12 @@ def merged_external_boundaries( external_walls = [ boundary for boundary in self.external_boundaries - if boundary.type in ["ExternalWall", "ExternalDoor"] # type: ignore + if boundary.type in ["ExternalWall", "ExternalDoor"] ] windows = [ boundary for boundary in self.external_boundaries - if boundary.type == "Window" # type: ignore + if boundary.type == "Window" ] merged_external_walls = MergedExternalWall.from_base_elements(external_walls) merged_windows = MergedWindows.from_base_windows(windows) # type: ignore @@ -367,9 +367,9 @@ def merged_external_boundaries( merged_external_walls + merged_windows + [ - boundary # type: ignore + boundary for boundary in self.external_boundaries - if boundary.type not in ["ExternalWall", "Window", "ExternalDoor"] # type: ignore + if boundary.type not in ["ExternalWall", "Window", "ExternalDoor"] ] ) return external_boundaries From d78e6d618d79fdf806589a7992962432ae839126 Mon Sep 17 00:00:00 2001 From: aan Date: Tue, 6 Aug 2024 20:27:02 +0200 Subject: [PATCH 02/11] feat: Add missing files. --- tests/data/house.mo | 3219 ++++++++++++++++++++++++++++++++++++++++++ tests/test_schema.py | 3 +- 2 files changed, 3221 insertions(+), 1 deletion(-) create mode 100644 tests/data/house.mo diff --git a/tests/data/house.mo b/tests/data/house.mo new file mode 100644 index 0000000..4fd941c --- /dev/null +++ b/tests/data/house.mo @@ -0,0 +1,3219 @@ +package house + +package Common + package Occupancy + + model SimpleOccupancy + + parameter Real occupancy[:]=3600*{7, 19} + "Occupancy table, each entry switching occupancy on or off"; + + parameter Real gain[:, :]=[35; 70; 30] + "Gain to convert from occupancy (per person) to radiant, convective and latent heat in [W/m2] "; + + parameter Real k=1/6/4 + "Heat gain if occupied"; + + Buildings.Controls.SetPoints.OccupancySchedule + occSch2(firstEntryOccupied=true, + occupancy=occupancy) + "Occupancy schedule" + annotation (Placement(transformation(extent={{-66,-22},{-46,-2}}))); + Buildings.Controls.OBC.CDL.Reals.Switch switch2 + annotation (Placement(transformation(extent={{-20,-12},{0,8}}))); + Modelica.Blocks.Math.MatrixGain gai2(K=gain) + "Gain to convert from occupancy (per person) to radiant, convective and latent heat in [W/m2] " + annotation (Placement(transformation(extent={{18,-12},{38,8}}))); + extends Modelica.Blocks.Interfaces.MO(final nout=3); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant occ2(k=k) + "Heat gain if occupied in room 2" + annotation (Placement(transformation(extent={{-66,28},{-46,48}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zero(k=0) + "Heat gain if occupied in room 2" + annotation (Placement(transformation(extent={{-62,-68},{-42,-48}}))); +equation + connect(occSch2.occupied,switch2. u2) annotation (Line( + points={{-45,-18},{-28,-18},{-28,-2},{-22,-2}}, + color={255,0,255}, + smooth=Smooth.None)); + connect(switch2.y,gai2. u[1]) annotation (Line( + points={{2,-2},{16,-2}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(occ2.y,switch2. u1) annotation (Line(points={{-44,38},{-40,38},{-40,6}, + {-22,6}}, color={0,0,127})); + connect(zero.y, switch2.u3) + annotation (Line(points={{-40,-58},{-22,-58},{-22,-10}}, color={0,0,127})); + connect(gai2.y, y) annotation (Line(points={{39,-2},{96,-2},{96,0},{110,0}}, + color={0,0,127})); + annotation (Icon(coordinateSystem(preserveAspectRatio=false), graphics={ + Ellipse(extent={{10,70},{-26,34}}, lineColor={28,108,200}), + Line(points={{-8,34},{-8,-26}}, color={28,108,200}), + Line(points={{-8,-26},{-48,-68}}, color={28,108,200}), + Line(points={{-8,-26},{34,-70},{32,-70}}, color={28,108,200}), + Line(points={{-8,20},{-48,-8}}, color={28,108,200}), + Line(points={{-8,20},{44,-8}}, color={28,108,200})}), Diagram( + coordinateSystem(preserveAspectRatio=false))); +end SimpleOccupancy; + + end Occupancy; + + package Controls + package BaseClasses + expandable connector DataBus + extends Modelica.Icons.SignalBus; + annotation ( + Icon(coordinateSystem(preserveAspectRatio=true, extent={{-100,-100},{100, + 100}}), graphics={Rectangle( + extent={{-20,2},{22,-2}}, + lineColor={255,204,51}, + lineThickness=0.5)}), + Documentation(info=" +

+This connector defines the expandable connector ControlBus that +is used to connect control signals. +Note, this connector is empty. When using it, the actual content is +constructed by the signals connected to this bus. +

+")); + end DataBus; + annotation ( + Icon(graphics={ Rectangle(lineColor = {200, 200, 200}, fillColor = {248, 248, 248}, + fillPattern = FillPattern.HorizontalCylinder, extent = {{-100, -100}, {100, 100}}, radius = 25), Rectangle(lineColor = {128, 128, 128}, extent = {{-100, -100}, {100, 100}}, radius = 25), Ellipse(lineColor = {128, 128, 128}, fillColor = {255, 255, 255}, + fillPattern = FillPattern.Solid, extent = {{-30, -30}, {30, 30}})})); + end BaseClasses; + + package Interfaces + partial model BaseSpaceControl + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a port annotation ( + Placement(transformation(extent = {{-110, -10}, {-90, 10}}), iconTransformation(extent = {{-110, -10}, {-90, 10}}))); + Modelica.Blocks.Interfaces.RealOutput y annotation ( + Placement(transformation(origin = {106, 0}, extent = {{-10, -10}, {10, 10}}), iconTransformation(origin = {106, 0}, extent = {{-10, -10}, {10, 10}}))); + equation + + annotation ( + Icon, + Diagram); + end BaseSpaceControl; + + partial model BaseSubstanceSpaceControl + replaceable package Medium = Modelica.Media.Interfaces.PartialMedium + "Medium model" annotation (choicesAllMatching=true); + Modelica.Fluid.Interfaces.FluidPort_a port_a( + redeclare final package Medium = Medium) + "Fluid connector a (positive design flow direction is from port_a to port_b)" + annotation (Placement(transformation(extent={{-116,-16},{-82,16}}), + iconTransformation(extent={{-110,-9},{-90,9}}))); + Modelica.Blocks.Interfaces.RealOutput y annotation ( + Placement(transformation(origin = {106, 0}, extent = {{-10, -10}, {10, 10}}), iconTransformation(origin = {106, 0}, extent = {{-10, -10}, {10, 10}}))); + equation + + annotation ( + Icon, + Diagram); + end BaseSubstanceSpaceControl; + annotation ( + Icon(graphics={ Rectangle(lineColor = {200, 200, 200}, fillColor = {248, 248, 248}, + fillPattern = FillPattern.HorizontalCylinder, extent = {{-100, -100}, {100, 100}}, radius = 25), Rectangle(lineColor = {128, 128, 128}, extent = {{-100, -100}, {100, 100}}, radius = 25), Polygon(origin = {20, 0}, lineColor = {64, 64, 64}, fillColor = {255, 255, 255}, + fillPattern = FillPattern.Solid, points = {{-10, 70}, {10, 70}, {40, 20}, {80, 20}, {80, -20}, {40, -20}, {10, -70}, {-10, -70}, {-10, 70}}), Polygon(fillColor = {102, 102, 102}, pattern = LinePattern.None, + fillPattern = FillPattern.Solid, points = {{-100, 20}, {-60, 20}, {-30, 70}, {-10, 70}, {-10, -70}, {-30, -70}, {-60, -20}, {-100, -20}, {-100, 20}})})); + end Interfaces; + + package SpaceControls + model PID + extends Common.Controls.Interfaces.BaseSpaceControl; + + parameter .Modelica.Blocks.Types.SimpleController controllerType= + .Modelica.Blocks.Types.SimpleController.PID "Type of controller"; + parameter Real k(min=0, unit="1") = 1 "Gain of controller"; + parameter Modelica.Units.SI.Time Ti(min=Modelica.Constants.small)=0.5 + "Time constant of Integrator block" annotation (Dialog(enable= + controllerType == .Modelica.Blocks.Types.SimpleController.PI or + controllerType == .Modelica.Blocks.Types.SimpleController.PID)); + parameter Modelica.Units.SI.Time Td(min=0)=0.1 + "Time constant of Derivative block" annotation (Dialog(enable= + controllerType == .Modelica.Blocks.Types.SimpleController.PD or + controllerType == .Modelica.Blocks.Types.SimpleController.PID)); + parameter Real yMax(start=1) "Upper limit of output"; + parameter Real yMin=-yMax "Lower limit of output"; + parameter Modelica.Units.SI.Temperature setPoint; + Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor TRoo annotation ( + Placement(transformation(origin = {-542, -226}, extent = {{480, 216}, {500, 236}}))); + Modelica.Blocks.Continuous.LimPID conRoo(yMax = yMax, yMin = yMin, controllerType = controllerType, k = k, Ti = Ti, Td = Td) annotation ( + Placement(transformation(origin = {50, 0}, extent = {{-10, -10}, {10, 10}}))); + Modelica.Blocks.Sources.RealExpression realExpression(y=setPoint) + annotation (Placement(transformation(extent={{-42,36},{-22,56}}))); + equation + connect(port, TRoo.port) annotation ( + Line(points = {{-100, 0}, {-62, 0}}, color = {191, 0, 0})); + connect(conRoo.y, y) annotation ( + Line(points={{61,0},{106,0}}, color = {0, 0, 127})); + connect(TRoo.T, conRoo.u_m) annotation ( + Line(points={{-41,0},{4,0},{4,-36},{50,-36},{50,-12}}, color = {0, 0, 127})); + connect(realExpression.y, conRoo.u_s) annotation (Line(points={{-21,46},{32,46}, + {32,0},{38,0}}, color={0,0,127})); + annotation ( + Icon(graphics={ Rectangle(lineColor = {0, 0, 127}, fillColor = {255, 255, 255}, + fillPattern = FillPattern.Solid, extent = {{-100, -100}, {100, 100}}), Line(points = {{-80, 78}, {-80, -90}}, color = {192, 192, 192}), Polygon(lineColor = {192, 192, 192}, fillColor = {192, 192, 192}, + fillPattern = FillPattern.Solid, points = {{-80, 90}, {-88, 68}, {-72, 68}, {-80, 90}}), Line(points = {{-90, -80}, {82, -80}}, color = {192, 192, 192}), Polygon(lineColor = {192, 192, 192}, fillColor = {192, 192, 192}, + fillPattern = FillPattern.Solid, points = {{90, -80}, {68, -72}, {68, -88}, {90, -80}}), Line(points = {{-80, -80}, {-80, -20}, {60, 80}}, color = {0, 0, 127}), Text(textColor = {192, 192, 192}, extent = {{-20, -60}, {80, -20}}, textString = "PID")})); + end PID; + + model PIDSubstance + + replaceable package Medium = Modelica.Media.Interfaces.PartialMedium + "Medium model" annotation (choicesAllMatching=true); + extends Common.Controls.Interfaces.BaseSubstanceSpaceControl; + + parameter .Modelica.Blocks.Types.SimpleController controllerType= + .Modelica.Blocks.Types.SimpleController.PID "Type of controller"; + parameter Real k(min=0, unit="1") = 1 "Gain of controller"; + parameter Modelica.Units.SI.Time Ti(min=Modelica.Constants.small)=0.5 + "Time constant of Integrator block" annotation (Dialog(enable= + controllerType == .Modelica.Blocks.Types.SimpleController.PI or + controllerType == .Modelica.Blocks.Types.SimpleController.PID)); + parameter Modelica.Units.SI.Time Td(min=0)=0.1 + "Time constant of Derivative block" annotation (Dialog(enable= + controllerType == .Modelica.Blocks.Types.SimpleController.PD or + controllerType == .Modelica.Blocks.Types.SimpleController.PID)); + parameter Real yMax(start=1) "Upper limit of output"; + parameter Real yMin=-yMax "Lower limit of output"; + parameter Modelica.Units.SI.Temperature setPoint; + Buildings.Fluid.Sensors.PPM TRoo( redeclare + package Medium = Medium) annotation ( + Placement(transformation(origin = {-542, -226}, extent = {{480, 216}, {500, 236}}))); + Modelica.Blocks.Continuous.LimPID conRoo(yMax = yMax, yMin = yMin, controllerType = controllerType, k = k, Ti = Ti, Td = Td) annotation ( + Placement(transformation(origin = {50, 0}, extent = {{-10, -10}, {10, 10}}))); + Modelica.Blocks.Sources.RealExpression realExpression(y=setPoint) + annotation (Placement(transformation(extent={{-42,38},{-22,58}}))); + equation + connect(conRoo.y, y) annotation ( + Line(points={{61,0},{106,0}}, color = {0, 0, 127})); + connect(realExpression.y, conRoo.u_s) annotation (Line(points={{-21,48}, + {32,48},{32,0},{38,0}}, + color={0,0,127})); + connect(TRoo.ppm, conRoo.u_m) annotation (Line(points={{-41,0},{30,0},{30,-18}, + {50,-18},{50,-12}}, color={0,0,127})); + connect(port_a, TRoo.port) annotation (Line(points={{-99,0},{-68,0},{ + -68,-14},{-52,-14},{-52,-10}}, color={0,127,255})); + annotation ( + Icon(graphics={ Rectangle(lineColor = {0, 0, 127}, fillColor = {255, 255, 255}, + fillPattern = FillPattern.Solid, extent = {{-100, -100}, {100, 100}}), Line(points = {{-80, 78}, {-80, -90}}, color = {192, 192, 192}), Polygon(lineColor = {192, 192, 192}, fillColor = {192, 192, 192}, + fillPattern = FillPattern.Solid, points = {{-80, 90}, {-88, 68}, {-72, 68}, {-80, 90}}), Line(points = {{-90, -80}, {82, -80}}, color = {192, 192, 192}), Polygon(lineColor = {192, 192, 192}, fillColor = {192, 192, 192}, + fillPattern = FillPattern.Solid, points = {{90, -80}, {68, -72}, {68, -88}, {90, -80}}), Line(points = {{-80, -80}, {-80, -20}, {60, 80}}, color = {0, 0, 127}), Text(textColor = {192, 192, 192}, extent = {{-20, -60}, {80, -20}}, textString = "PID")})); + end PIDSubstance; + + + + annotation ( + Icon(graphics={ Rectangle(lineColor = {200, 200, 200}, fillColor = {248, 248, 248}, + fillPattern = FillPattern.HorizontalCylinder, extent = {{-100, -100}, {100, 100}}, radius = 25)})); + end SpaceControls; + annotation ( + Icon(graphics={ Rectangle(lineColor = {200, 200, 200}, fillColor = {248, 248, 248}, + fillPattern = FillPattern.HorizontalCylinder, extent = {{-100, -100}, {100, 100}}, radius = 25), Rectangle(lineColor = {200, 200, 200}, fillColor = {248, 248, 248}, + fillPattern = FillPattern.HorizontalCylinder, extent = {{-100, -100}, {100, 100}}, radius = 25), Rectangle(lineColor = {128, 128, 128}, extent = {{-100, -100}, {100, 100}}, radius = 25), Rectangle(origin = {0, 35.1488}, fillColor = {255, 255, 255}, extent = {{-30, -20.1488}, {30, 20.1488}}), Rectangle(origin = {0, -34.8512}, fillColor = {255, 255, 255}, extent = {{-30, -20.1488}, {30, 20.1488}}), Line(origin = {-51.25, 0}, points = {{21.25, -35}, {-13.75, -35}, {-13.75, 35}, {6.25, 35}}), Polygon(origin = {-40, 35}, pattern = LinePattern.None, + fillPattern = FillPattern.Solid, points = {{10, 0}, {-5, 5}, {-5, -5}, {10, 0}}), Line(origin = {51.25, 0}, points = {{-21.25, 35}, {13.75, 35}, {13.75, -35}, {-6.25, -35}}), Polygon(origin = {40, -35}, pattern = LinePattern.None, + fillPattern = FillPattern.Solid, points = {{-10, 0}, {5, 5}, {5, -5}, {-10, 0}})})); + + + package ventilation + model AHU_G36 + parameter Real VUncDesOutAir_flow=0.03; + parameter Real VDesTotOutAir_flow=0.03; + Buildings.Controls.OBC.ASHRAE.G36.AHUs.MultiZone.VAV.Controller + mulAHUCon( + eneStd=Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1, + + venStd=Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1, + + ashCliZon=Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_1A, + + have_frePro=false, + minOADes=Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.DedicatedDampersAirflow, + + buiPreCon=Buildings.Controls.OBC.ASHRAE.G36.Types.PressureControl.BarometricRelief, + + ecoHigLimCon=Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb, + + cooCoi=Buildings.Controls.OBC.ASHRAE.G36.Types.CoolingCoil.None, + heaCoi=Buildings.Controls.OBC.ASHRAE.G36.Types.HeatingCoil.None, + have_perZonRehBox=false, VUncDesOutAir_flow = VUncDesOutAir_flow, VDesTotOutAir_flow = VDesTotOutAir_flow) + annotation (Placement(transformation(extent={{-12,-14},{28,74}}))); + BaseClasses.DataBus dataBus annotation (Placement(transformation( + extent={{-120,-20},{-80,20}}), iconTransformation(extent={{ + -112,-10},{-92,10}}))); + equation + connect(mulAHUCon.ySupFan, dataBus.ySupFan) annotation (Line(points={ + {30,27.8},{36,27.8},{36,-20},{-74,-20},{-74,0},{-100,0}}, + color={0,0,127}), Text( + string="%second", + index=1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + connect(mulAHUCon.y1SupFan, dataBus.y1SupFan) annotation (Line(points + ={{30,30},{38,30},{38,-22},{-76,-22},{-76,0},{-100,0}}, color={ + 255,0,255}), Text( + string="%second", + index=1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + connect(mulAHUCon.yOutDam, dataBus.yOutDam) annotation (Line(points={ + {30,37},{36,37},{36,20},{34,20},{34,-18},{-70,-18},{-70,0},{ + -100,0}}, color={0,0,127}), Text( + string="%second", + index=1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + connect(mulAHUCon.yRetDam, dataBus.yRetDam) annotation (Line(points={ + {30,43},{36,43},{36,78},{-74,78},{-74,0},{-100,0}}, color={0, + 0,127}), Text( + string="%second", + index=1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + connect(mulAHUCon.yMinOutDam, dataBus.yMinOutDam) annotation (Line( + points={{30,49},{38,49},{38,80},{-78,80},{-78,24},{-76,24},{-76, + 0},{-100,0}}, color={0,0,127}), Text( + string="%second", + index=1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + connect(mulAHUCon.VEffAirOut_flow_min, dataBus.VEffAirOut_flow_min) + annotation (Line(points={{30,53},{30,58},{34,58},{34,76},{-72,76},{ + -72,0},{-100,0}}, color={0,0,127}), Text( + string="%second", + index=1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + connect(mulAHUCon.TAirSupSet, dataBus.TAirSupSet) annotation (Line( + points={{30,64},{34,64},{34,70},{32,70},{32,76},{-20,76},{-20,0}, + {-100,0}}, color={0,0,127}), Text( + string="%second", + index=1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + connect(dataBus.VAirOut_flow, mulAHUCon.VAirOut_flow) annotation ( + Line( + points={{-100,0},{-22,0},{-22,37},{-14,37}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + connect(dataBus.uOutAirFra_max, mulAHUCon.uOutAirFra_max) annotation + (Line( + points={{-100,0},{-24,0},{-24,47},{-14,47}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + connect(dataBus.VSumZonPri_flow, mulAHUCon.VSumZonPri_flow) + annotation (Line( + points={{-100,0},{-26,0},{-26,50},{-14,50}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + connect(dataBus.VSumAdjAreBreZon_flow, mulAHUCon.VSumAdjAreBreZon_flow) + annotation (Line( + points={{-100,0},{-28,0},{-28,53},{-14,53}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + connect(dataBus.TAirSup, mulAHUCon.TAirSup) annotation (Line( + points={{-100,0},{-30,0},{-30,58},{-14,58}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + connect(dataBus.u1SupFan, mulAHUCon.u1SupFan) annotation (Line( + points={{-100,0},{-32,0},{-32,61},{-14,61}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + connect(dataBus.uZonTemResReq, mulAHUCon.uZonTemResReq) annotation ( + Line( + points={{-100,0},{-34,0},{-34,63},{-14,63}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + connect(dataBus.TOut, mulAHUCon.TOut) annotation (Line( + points={{-100,0},{-36,0},{-36,66},{-14,66}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + connect(dataBus.dpDuc, mulAHUCon.dpDuc) annotation (Line( + points={{-100,0},{-38,0},{-38,68},{-14,68}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + connect(dataBus.uZonPreResReq, mulAHUCon.uZonPreResReq) annotation ( + Line( + points={{-100,0},{-40,0},{-40,71},{-14,71}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + connect(dataBus.uAhuOpeMod, mulAHUCon.uAhuOpeMod) annotation (Line( + points={{-100,0},{-42,0},{-42,73},{-14,73}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + connect(dataBus.VSumAdjPopBreZon_flow, mulAHUCon.VSumAdjPopBreZon_flow) + annotation (Line( + points={{-100,0},{-14,0},{-14,55}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-3,-6},{-3,-6}}, + horizontalAlignment=TextAlignment.Right)); + annotation (Icon(coordinateSystem(preserveAspectRatio=false), + graphics={Rectangle( + extent={{-100,98},{98,-100}}, + lineColor={28,108,200}, + fillColor={28,108,200}, + fillPattern=FillPattern.Solid)}), Diagram(coordinateSystem( + preserveAspectRatio=false))); + end AHU_G36; + model EmissionControlEmissioncontrol_8 + parameter Real schedule[:]=3600*{7,19}; + + parameter Modelica.Units.SI.Temperature THeaSet= 273.15+24; + parameter Modelica.Units.SI.Temperature THeaSetBack= 273.15+16; +Buildings.Controls.OBC.ASHRAE.G36.ThermalZones.ControlLoops +emissionControl( kCooCon=0.0, + TiCooCon=900.0, + kHeaCon=0.1, + TiHeaCon=900.0, + timChe=30.0, + dTHys=0.25, + looHys=0.01 +) +annotation (Placement(transformation(extent={{-36,-36},{28,38}}))); Modelica.Blocks.Interfaces.RealOutput y +annotation (Placement(transformation(extent={{100,-8},{120,12}}))); + + Buildings.Controls.SetPoints.OccupancySchedule + occSch2(firstEntryOccupied=true, occupancy= + schedule) + +annotation (Placement(transformation(extent={{-116,-36},{-96,-16}}))); + Buildings.Controls.OBC.CDL.Reals.Switch switch2 +annotation (Placement(transformation(extent={{-70,-26},{-50,-6}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant setpoint(k=THeaSet) + "Heat gain if occupied in room 2" + annotation (Placement(transformation(extent={{-116,14},{-96,34}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant setback(k=THeaSetBack) + "Heat gain if occupied in room 2" + annotation (Placement(transformation(extent={{-112,-82},{-92,-62}}))); +Controls.BaseClasses.DataBus dataBus + annotation (Placement(transformation( + extent={{-120,-18},{-80,22}}), iconTransformation(extent={{-120,62},{-78,98}}))); +equation +connect(emissionControl.yHea, y) annotation (Line(points={{34.4,-21.2},{96,-21.2}, +{96,2},{110,2}}, color={0,0,127})); + connect( +emissionControl.yHea, y) annotation (Line(points={{60.4,-21.2},{96,-21.2},{96,2}, + {110,2}}, color={0,0,127})); + connect(occSch2. + occupied, switch2.u2) annotation (Line( + points={{-95,-32},{-78,-32},{-78,-16},{-72,-16}}, + color={255,0,255}, + smooth=Smooth.None)); + connect(setpoint.y, switch2.u1) annotation (Line(points={{-94,24},{-90,24},{-90, + -8},{-72,-8}}, color={0,0,127})); + connect(setback.y, switch2.u3) + annotation (Line(points={{-90,-72},{-72,-72},{-72,-24}}, color={0,0,127})); + connect(switch2.y, emissionControl.THeaSet) annotation (Line(points={{-52,-22}, + {-52,-21.2},{-42.4,-21.2}}, color={0,0,127})); +connect(dataBus.TCooSetSchema_space_001, emissionControl.TCooSet); +connect(dataBus.TZonSchema_space_001, emissionControl.TZon); +connect(dataBus.yCooSystem_008, emissionControl.yCoo); +connect(dataBus.yHeaSystem_008, emissionControl.yHea); +end EmissionControlEmissioncontrol_8; + model OccupancyOccupancy_11 +extends house.Common.Occupancy.SimpleOccupancy ; +Controls.BaseClasses.DataBus dataBus + annotation (Placement(transformation( + extent={{-120,-18},{-80,22}}), iconTransformation(extent={{-120,62},{-78,98}}))); +equation +connect(dataBus.OccupiedSchema_space_001, occSch2.occupied); + end OccupancyOccupancy_11; + + model EmissionControlEmissioncontrol_9 + parameter Real schedule[:]=3600*{7,19}; + + parameter Modelica.Units.SI.Temperature THeaSet= 273.15+24; + parameter Modelica.Units.SI.Temperature THeaSetBack= 273.15+16; +Buildings.Controls.OBC.ASHRAE.G36.ThermalZones.ControlLoops +emissionControl( kCooCon=0.0, + TiCooCon=900.0, + kHeaCon=0.1, + TiHeaCon=900.0, + timChe=30.0, + dTHys=0.25, + looHys=0.01 +) +annotation (Placement(transformation(extent={{-36,-36},{28,38}}))); Modelica.Blocks.Interfaces.RealOutput y +annotation (Placement(transformation(extent={{100,-8},{120,12}}))); + + Buildings.Controls.SetPoints.OccupancySchedule + occSch2(firstEntryOccupied=true, occupancy= + schedule) + +annotation (Placement(transformation(extent={{-116,-36},{-96,-16}}))); + Buildings.Controls.OBC.CDL.Reals.Switch switch2 +annotation (Placement(transformation(extent={{-70,-26},{-50,-6}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant setpoint(k=THeaSet) + "Heat gain if occupied in room 2" + annotation (Placement(transformation(extent={{-116,14},{-96,34}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant setback(k=THeaSetBack) + "Heat gain if occupied in room 2" + annotation (Placement(transformation(extent={{-112,-82},{-92,-62}}))); +Controls.BaseClasses.DataBus dataBus + annotation (Placement(transformation( + extent={{-120,-18},{-80,22}}), iconTransformation(extent={{-120,62},{-78,98}}))); +equation +connect(emissionControl.yHea, y) annotation (Line(points={{34.4,-21.2},{96,-21.2}, +{96,2},{110,2}}, color={0,0,127})); + connect( +emissionControl.yHea, y) annotation (Line(points={{60.4,-21.2},{96,-21.2},{96,2}, + {110,2}}, color={0,0,127})); + connect(occSch2. + occupied, switch2.u2) annotation (Line( + points={{-95,-32},{-78,-32},{-78,-16},{-72,-16}}, + color={255,0,255}, + smooth=Smooth.None)); + connect(setpoint.y, switch2.u1) annotation (Line(points={{-94,24},{-90,24},{-90, + -8},{-72,-8}}, color={0,0,127})); + connect(setback.y, switch2.u3) + annotation (Line(points={{-90,-72},{-72,-72},{-72,-24}}, color={0,0,127})); + connect(switch2.y, emissionControl.THeaSet) annotation (Line(points={{-52,-22}, + {-52,-21.2},{-42.4,-21.2}}, color={0,0,127})); +connect(dataBus.TCooSetSchema_space_002, emissionControl.TCooSet); +connect(dataBus.TZonSchema_space_002, emissionControl.TZon); +connect(dataBus.yCooSystem_010, emissionControl.yCoo); +connect(dataBus.yHeaSystem_010, emissionControl.yHea); +end EmissionControlEmissioncontrol_9; + model OccupancyOccupancy_12 +extends house.Common.Occupancy.SimpleOccupancy ; +Controls.BaseClasses.DataBus dataBus + annotation (Placement(transformation( + extent={{-120,-18},{-80,22}}), iconTransformation(extent={{-120,62},{-78,98}}))); +equation +connect(dataBus.OccupiedSchema_space_002, occSch2.occupied); + end OccupancyOccupancy_12; + + model EmissionControlEmissioncontrol_10 + parameter Real schedule[:]=3600*{7,19}; + + parameter Modelica.Units.SI.Temperature THeaSet= 273.15+24; + parameter Modelica.Units.SI.Temperature THeaSetBack= 273.15+16; +Buildings.Controls.OBC.ASHRAE.G36.ThermalZones.ControlLoops +emissionControl( kCooCon=0.0, + TiCooCon=900.0, + kHeaCon=0.1, + TiHeaCon=900.0, + timChe=30.0, + dTHys=0.25, + looHys=0.01 +) +annotation (Placement(transformation(extent={{-36,-36},{28,38}}))); Modelica.Blocks.Interfaces.RealOutput y +annotation (Placement(transformation(extent={{100,-8},{120,12}}))); + + Buildings.Controls.SetPoints.OccupancySchedule + occSch2(firstEntryOccupied=true, occupancy= + schedule) + +annotation (Placement(transformation(extent={{-116,-36},{-96,-16}}))); + Buildings.Controls.OBC.CDL.Reals.Switch switch2 +annotation (Placement(transformation(extent={{-70,-26},{-50,-6}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant setpoint(k=THeaSet) + "Heat gain if occupied in room 2" + annotation (Placement(transformation(extent={{-116,14},{-96,34}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant setback(k=THeaSetBack) + "Heat gain if occupied in room 2" + annotation (Placement(transformation(extent={{-112,-82},{-92,-62}}))); +Controls.BaseClasses.DataBus dataBus + annotation (Placement(transformation( + extent={{-120,-18},{-80,22}}), iconTransformation(extent={{-120,62},{-78,98}}))); +equation +connect(emissionControl.yHea, y) annotation (Line(points={{34.4,-21.2},{96,-21.2}, +{96,2},{110,2}}, color={0,0,127})); + connect( +emissionControl.yHea, y) annotation (Line(points={{60.4,-21.2},{96,-21.2},{96,2}, + {110,2}}, color={0,0,127})); + connect(occSch2. + occupied, switch2.u2) annotation (Line( + points={{-95,-32},{-78,-32},{-78,-16},{-72,-16}}, + color={255,0,255}, + smooth=Smooth.None)); + connect(setpoint.y, switch2.u1) annotation (Line(points={{-94,24},{-90,24},{-90, + -8},{-72,-8}}, color={0,0,127})); + connect(setback.y, switch2.u3) + annotation (Line(points={{-90,-72},{-72,-72},{-72,-24}}, color={0,0,127})); + connect(switch2.y, emissionControl.THeaSet) annotation (Line(points={{-52,-22}, + {-52,-21.2},{-42.4,-21.2}}, color={0,0,127})); +connect(dataBus.TCooSetSchema_space_003, emissionControl.TCooSet); +connect(dataBus.TZonSchema_space_003, emissionControl.TZon); +connect(dataBus.yCooSystem_012, emissionControl.yCoo); +connect(dataBus.yHeaSystem_012, emissionControl.yHea); +end EmissionControlEmissioncontrol_10; + model OccupancyOccupancy_13 +extends house.Common.Occupancy.SimpleOccupancy ; +Controls.BaseClasses.DataBus dataBus + annotation (Placement(transformation( + extent={{-120,-18},{-80,22}}), iconTransformation(extent={{-120,62},{-78,98}}))); +equation +connect(dataBus.OccupiedSchema_space_003, occSch2.occupied); + end OccupancyOccupancy_13; + + model CollectorControlPump_control +Buildings.Controls.OBC.CDL.Reals.PIDWithReset +conPum( controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PI, + k=1, + Ti=0.5, + Td=0.1, + r=1, + yMax=1, + yMin=0, + Ni=0.9, + Nd=10 +) "Controller for pump" +annotation (Placement(transformation(extent={{54,-10},{74,10}})));Buildings.Controls.OBC.CDL.Reals.MultiMax +mulMax(nin=3) +"Maximum radiator valve position" +annotation (Placement(transformation(extent={{-76,-10},{-56,10}})));Buildings.Controls.OBC.CDL.Reals.Hysteresis +hysPum(uLow=0.01, uHigh=0.5) +"Hysteresis for pump" +annotation (Placement(transformation(extent={{-26,-10},{-6,10}})));Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea +"Conversion from boolean to real signal" +annotation (Placement(transformation(extent={{14,-10},{34,10}})));Controls.BaseClasses.DataBus dataBus + annotation (Placement(transformation( + extent={{-120,-18},{-80,22}}), iconTransformation(extent={{-120,62},{-78,98}}))); +equation +connect(mulMax.y,hysPum. u) annotation (Line( +points={{-54,0},{-28,0}}, +color={0,0,127}, +smooth=Smooth.None));connect(hysPum.y,conPum. trigger) annotation (Line(points={{-4,0},{4,0},{4,-18}, +{58,-18},{58,-12}}, color={255,0,255}));connect(hysPum.y,booToRea. u) +annotation (Line(points={{-4,0},{12,0}}, color={255,0,255}));connect(booToRea.y,conPum. u_s) +annotation (Line(points={{36,0},{52,0}}, color={0,0,127}));annotation (Icon(coordinateSystem(preserveAspectRatio=false)), Diagram( +coordinateSystem(preserveAspectRatio=false)));connect(dataBus.y_gainSystem_002, conPum.u_m); +connect(dataBus.ySystem_002, conPum.y); +connect(dataBus.yBoiConSystem_002, mulMax.y); +connect(dataBus.yPumBoiSystem_002, mulMax.y); +connect(dataBus.yHeaSystem_008, mulMax.u[1]); +connect(dataBus.yHeaSystem_010, mulMax.u[2]); +connect(dataBus.yHeaSystem_012, mulMax.u[3]); +end CollectorControlPump_control; + model ThreeWayValveControlThreewayvalvecontrol_0 + Buildings.Controls.OBC.CDL.Reals.PIDWithReset + conVal( + controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PI, + k=1, + Ti=0.5, + Td=0.1, + r=1, + yMax=1, + yMin=0, + Ni=0.9, + Nd=10 +) "Controller for pump" +annotation (Placement(transformation(extent={{-12,-10},{8,10}}))); Modelica.Blocks.Interfaces.RealOutput y +annotation (Placement(transformation(extent={{100,-10},{120,10}}))); Modelica.Blocks.Interfaces.RealInput u +annotation (Placement(transformation(extent={{-138,-20},{-98,20}}))); Controls.BaseClasses.DataBus dataBus + annotation (Placement(transformation( + extent={{-120,-18},{-80,22}}), iconTransformation(extent={{-120,62},{-78,98}}))); +equation +connect(dataBus.TColSetThreewayvalvecontrol_0, conVal.u_s); +connect(dataBus.triggerThreewayvalvecontrol_0, conVal.trigger); + connect(conVal.y, y) +annotation (Line(points={{10,0},{110,0}}, color={0,0,127})); connect(u, conVal.u_m) annotation (Line(points={{-118,0},{-22,0},{-22,-20},{0, + -20},{0,-16},{-2,-16},{-2,-12}}, color={0,0,127}));annotation (Icon(coordinateSystem(preserveAspectRatio=false)), Diagram( + coordinateSystem(preserveAspectRatio=false)));end ThreeWayValveControlThreewayvalvecontrol_0; + model ThreeWayValveControlThreewayvalvecontrol_1 + Buildings.Controls.OBC.CDL.Reals.PIDWithReset + conVal( + controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PI, + k=1, + Ti=0.5, + Td=0.1, + r=1, + yMax=1, + yMin=0, + Ni=0.9, + Nd=10 +) "Controller for pump" +annotation (Placement(transformation(extent={{-12,-10},{8,10}}))); Modelica.Blocks.Interfaces.RealOutput y +annotation (Placement(transformation(extent={{100,-10},{120,10}}))); Modelica.Blocks.Interfaces.RealInput u +annotation (Placement(transformation(extent={{-138,-20},{-98,20}}))); Controls.BaseClasses.DataBus dataBus + annotation (Placement(transformation( + extent={{-120,-18},{-80,22}}), iconTransformation(extent={{-120,62},{-78,98}}))); +equation +connect(dataBus.TColSetThreewayvalvecontrol_1, conVal.u_s); +connect(dataBus.triggerThreewayvalvecontrol_1, conVal.trigger); + connect(conVal.y, y) +annotation (Line(points={{10,0},{110,0}}, color={0,0,127})); connect(u, conVal.u_m) annotation (Line(points={{-118,0},{-22,0},{-22,-20},{0, + -20},{0,-16},{-2,-16},{-2,-12}}, color={0,0,127}));annotation (Icon(coordinateSystem(preserveAspectRatio=false)), Diagram( + coordinateSystem(preserveAspectRatio=false)));end ThreeWayValveControlThreewayvalvecontrol_1; + model BoilerControlBoiler_control + extends house.Common.Controls.ventilation.PartialBoilerControl; + Controls.BaseClasses.DataBus dataBus + annotation (Placement(transformation( + extent={{-120,-18},{-80,22}}), iconTransformation(extent={{-120,62},{-78,98}}))); + equation + connect(dataBus.TStoTopSystem_001, sub1.u1); +connect(dataBus.TStoBotSystem_001, greThr.u); +connect(dataBus.TAirOutSystem_001, lesThrTOut.u); +connect(dataBus.yBoiConSystem_001, booToReaBoi.y); +connect(dataBus.yPumBoiSystem_001, booToReaPum.y); + end BoilerControlBoiler_control; + + model DataServer +replaceable package Medium = Modelica.Media.Interfaces.PartialMedium; +Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor[3] +TRoo annotation ( +Placement(transformation(origin={-544,-226}, +extent = {{480, 216}, {500, 236}})));Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a[3] +port annotation ( +Placement(transformation(extent={{-112,-10},{-92,10}}), +iconTransformation(extent = {{-110, -10}, {-90, 10}})));Buildings.Fluid.Sensors.PPM[3] TRoo1(redeclare +package Medium = Medium)annotation ( +Placement(transformation(origin={-542,-268}, +extent = {{480, 216}, {500, 236}})));Modelica.Fluid.Interfaces.FluidPort_a[3] +port_a(redeclare package Medium += Medium)annotation (Placement(transformation(extent={{-116,-58},{-82,-26}}), +iconTransformation(origin = {-2, -42}, extent = {{-110, -9}, {-90, 9}}))); Controls.BaseClasses.DataBus dataBus + annotation (Placement(transformation( + extent={{-120,-18},{-80,22}}), iconTransformation(extent={{-120,62},{-78,98}}))); +Modelica.Blocks.Sources.RealExpression + TColSetThreewayvalvecontrol_0 + (y=363.15); +Modelica.Blocks.Sources.RealExpression + TAirOutBoiler_control + (y=0.0); +Modelica.Blocks.Sources.RealExpression + TCooSetEmissioncontrol_9 + (y=298.15); +Modelica.Blocks.Sources.RealExpression + TCooSetEmissioncontrol_10 + (y=298.15); +Modelica.Blocks.Sources.RealExpression + TColSetThreewayvalvecontrol_1 + (y=363.15); +Modelica.Blocks.Sources.RealExpression + TCooSetEmissioncontrol_8 + (y=298.15); +Modelica.Blocks.Sources.BooleanExpression + triggerThreewayvalvecontrol_0 + (y=true); +Modelica.Blocks.Sources.BooleanExpression + triggerThreewayvalvecontrol_1 + (y=true); +equation +connect(port[1],TRoo[1]. port); +connect(port_a[1], TRoo1[1].port); +connect(port[2],TRoo[2]. port); +connect(port_a[2], TRoo1[2].port); +connect(port[3],TRoo[3]. port); +connect(port_a[3], TRoo1[3].port); +connect(dataBus.TZonSchema_space_001, TRoo[1].T); +connect(dataBus.TZonSchema_space_002, TRoo[2].T); +connect(dataBus.TZonSchema_space_003, TRoo[3].T); +connect(dataBus.ppmCO2Schema_space_001, TRoo1[1].ppm); +connect(dataBus.ppmCO2Schema_space_002, TRoo1[2].ppm); +connect(dataBus.ppmCO2Schema_space_003, TRoo1[3].ppm); +connect(dataBus.TColSetThreewayvalvecontrol_0, +TColSetThreewayvalvecontrol_0.y); +connect(dataBus.TAirOutSystem_001, +TAirOutBoiler_control.y); +connect(dataBus.TCooSetSchema_space_002, +TCooSetEmissioncontrol_9.y); +connect(dataBus.TCooSetSchema_space_003, +TCooSetEmissioncontrol_10.y); +connect(dataBus.TColSetThreewayvalvecontrol_1, +TColSetThreewayvalvecontrol_1.y); +connect(dataBus.TCooSetSchema_space_001, +TCooSetEmissioncontrol_8.y); +connect(dataBus.triggerThreewayvalvecontrol_0, +triggerThreewayvalvecontrol_0.y); +connect(dataBus.triggerThreewayvalvecontrol_1, +triggerThreewayvalvecontrol_1.y); +end DataServer; + + + + partial model PartialBoilerControl + parameter Modelica.Units.SI.Temperature TSup_nominal=80 + 273.15 "Check for temperature at the bottom of the tank"; + parameter Modelica.Units.SI.Temperature threshold_outdoor_air_cutoff=15 + 273.15 "Output true if outdoor air is below heating cut-off limit"; + parameter Modelica.Units.SI.Temperature threshold_to_switch_off_boiler=15 + 273.15 "Threshold to switch boiler off"; + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr(t= + TSup_nominal + 5) + "Check for temperature at the bottom of the tank" annotation ( + Placement(transformation(extent={{-114,-142},{-94,-122}}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToReaPum + "Signal converter for pump" annotation (Placement(transformation( + extent={{-94,-32},{-114,-12}}))); + Buildings.Controls.OBC.CDL.Reals.Greater lesThr + "Check for temperature at the top of the tank" annotation ( + Placement(transformation(extent={{-114,-80},{-94,-60}}))); + Modelica.Blocks.MathBoolean.Or pumOnSig(nu=3) + "Signal for pump being on" + annotation (Placement(transformation(extent={{146,-2},{166,18}}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToReaBoi + "Signal converter for boiler" + annotation (Placement(transformation(extent={{-94,-2},{-114,18}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant dTThr(k=1) + "Threshold to switch boiler off" annotation (Placement( + transformation(extent={{-204,-112},{-184,-92}}))); + Buildings.Controls.OBC.CDL.Reals.Subtract sub1 annotation (Placement( + transformation(extent={{-164,-88},{-144,-68}}))); + Modelica.Blocks.Logical.LessThreshold lesThrTOut(threshold=threshold_outdoor_air_cutoff) + "Output true if outdoor air is below heating cut-off limit" + annotation (Placement(transformation(extent={{-114,38},{-94,58}}))); + Buildings.Controls.OBC.CDL.Logical.And and1 + "Logical test to enable pump and subsequently the boiler" + annotation (Placement(transformation(extent={{-74,38},{-54,58}}))); + Modelica.StateGraph.InitialStep off(nIn=1, nOut=1) + "Pump and furnace off" + annotation (Placement(transformation(extent={{-74,78},{-54,98}}))); + Modelica.StateGraph.TransitionWithSignal T1 "Transition to pump on" + annotation (Placement(transformation(extent={{-44,78},{-24,98}}))); + Modelica.StateGraph.StepWithSignal pumOn(nIn=1, nOut=1) + "Pump on" + annotation (Placement(transformation(extent={{-14,78},{6,98}}))); + Modelica.StateGraph.Transition T3(enableTimer=true, waitTime=10) + "Transition to boiler on" + annotation (Placement(transformation(extent={{16,78},{36,98}}))); + Modelica.StateGraph.StepWithSignal boiOn(nIn=1, nOut=1) + "Boiler on" + annotation (Placement(transformation(extent={{46,78},{66,98}}))); + Modelica.StateGraph.TransitionWithSignal T2 + "Transition that switches boiler off" + annotation (Placement(transformation(extent={{76,78},{96,98}}))); + Modelica.StateGraph.StepWithSignal pumOn2(nIn=1, nOut=1) + "Pump on" + annotation (Placement(transformation(extent={{106,78},{126,98}}))); + Modelica.StateGraph.Transition T4(enableTimer=true, waitTime=10) + "Transition to boiler on" + annotation (Placement(transformation(extent={{136,78},{156,98}}))); + inner Modelica.StateGraph.StateGraphRoot stateGraphRoot + "Root of the state graph" annotation (Placement(transformation( + extent={{-134,98},{-114,118}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant dTThr1(k=threshold_to_switch_off_boiler) "Threshold to switch boiler off" annotation (Placement( + transformation(extent={{-208,-22},{-188,-2}}))); +equation + connect(booToReaPum.u, pumOnSig.y) + annotation (Line( + points={{-92,-22},{176,-22},{176,8},{167.5,8}}, + color={255,0,255}, + smooth=Smooth.None)); + connect(sub1.y, lesThr.u2) + annotation (Line( + points={{-142,-78},{-116,-78}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(dTThr.y, sub1.u2) + annotation (Line( + points={{-182,-102},{-174,-102},{-174,-84},{-166,-84}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(lesThr.y, and1.u2) + annotation (Line( + points={{-92,-70},{-84,-70},{-84,40},{-76,40}}, + color={255,0,255}, + smooth=Smooth.None)); + connect(lesThrTOut.y, and1.u1) + annotation (Line( + points={{-93,48},{-76,48}}, + color={255,0,255}, + smooth=Smooth.None)); + connect(and1.y, T1.condition) + annotation (Line(points={{-52,48},{-44,48},{-44,42},{-36, + 42},{-36,58},{-34,58},{-34,76}}, +color={255,0,255})); + connect(greThr.y, T2.condition) + annotation (Line(points={{-92,-132},{86,-132},{86,76}}, + color={255,0,255})); + connect(boiOn.active, booToReaBoi.u) + annotation (Line(points={{56,77},{56,8},{-92,8}}, + color={255,0,255})); + connect(pumOn2.active, pumOnSig.u[1]) + annotation (Line(points={{116,77},{116,5.66667}, + {146,5.66667}}, + color={255,0,255})); + connect(boiOn.active, pumOnSig.u[2]) + annotation (Line(points={{56,77},{56,8},{146,8}}, + color={255,0,255})); + connect(pumOn.active, pumOnSig.u[3]) + annotation (Line(points={{-4,77},{-4,10.3333},{146,10.3333}}, + color={255,0,255})); + connect(off.outPort[1], T1.inPort) + annotation (Line(points={{-53.5,88},{-38,88}}, color={0,0,0})); + connect(T1.outPort, pumOn.inPort[1]) + annotation (Line(points={{-32.5,88},{-15,88}}, color={0,0,0})); + connect(pumOn.outPort[1], T3.inPort) + annotation (Line(points={{6.5,88},{22,88}}, + color={0,0,0})); + connect(T3.outPort, boiOn.inPort[1]) + annotation (Line(points={{27.5,88},{45,88}}, color={0,0,0})); + connect(boiOn.outPort[1], T2.inPort) + annotation (Line(points={{66.5,88},{82,88}}, color={0,0,0})); + connect(T2.outPort, pumOn2.inPort[1]) + annotation (Line(points={{87.5,88},{105,88}}, color={0,0,0})); + connect(pumOn2.outPort[1], T4.inPort) + annotation (Line(points={{126.5,88},{142,88}}, color={0,0,0})); + connect(T4.outPort, off.inPort[1]) + annotation (Line(points={{147.5,88},{166,88},{166,118}, + {-94,118},{-94,88},{-75,88}}, + color={0,0,0})); + connect( + dTThr1.y, lesThr.u1) annotation (Line(points={{-186,-12},{-124,-12},{ + -124, + -70},{-116,-70}}, color={0,0,127})); + annotation (Icon(coordinateSystem(preserveAspectRatio=false, extent={ + {-260,-180},{260,160}})), Diagram(coordinateSystem( + preserveAspectRatio=false, extent={{-260,-180},{260,160}}))); +end PartialBoilerControl; + +end ventilation; + end Controls; + + package Fluid + package Boilers + model Simple + + extends Buildings.Fluid.Interfaces.PartialTwoPort; + Buildings.Fluid.Sources.Boundary_pT bou(use_T_in = true, nPorts = 2, redeclare + final package Medium = Medium) annotation ( + Placement(transformation(origin = {90, 188}, extent = {{-82, -180}, {-62, -160}}))); + Modelica.Blocks.Sources.Constant constant1(k = 273 + 70) annotation ( + Placement(transformation(origin = {-32, 20}, extent = {{-10, -10}, {10, 10}}))); + equation + connect(constant1.y, bou.T_in) annotation ( + Line(points = {{-20, 20}, {6, 20}, {6, 22}}, color = {0, 0, 127})); + connect(bou.ports[1], port_b) annotation ( + Line(points = {{28, 18}, {100, 18}, {100, 0}}, color = {0, 127, 255})); + connect(bou.ports[2], port_a) annotation ( + Line(points = {{28, 18}, {-100, 18}, {-100, 0}}, color = {0, 127, 255})); + annotation ( + Icon(graphics={ Rectangle(fillPattern = FillPattern.Solid, extent = {{-80, 80}, {80, -80}}), Rectangle(fillColor = {255, 255, 255}, + fillPattern = FillPattern.Solid, extent = {{-68, 70}, {70, -70}}), Polygon(lineColor = {0, 0, 255}, fillColor = {0, 0, 255}, + fillPattern = FillPattern.Solid, points = {{-68, 18}, {-68, 18}, {-54, 32}, {-28, 16}, {0, 30}, {26, 16}, {46, 32}, {70, 18}, {70, 18}, {70, -70}, {70, -70}, {-68, -70}, {-68, -70}, {-68, 18}}, smooth = Smooth.Bezier)})); + end Simple; + +partial model PartialBoilerWithStorage + replaceable package MediumW = Modelica.Media.Interfaces.PartialMedium + "Medium model" annotation (choicesAllMatching=true); + extends Buildings.Fluid.Interfaces.PartialTwoPort( + redeclare package Medium = MediumW); + + + parameter Real a[:]={0.9} "Coefficients for efficiency curve"; + parameter Buildings.Fluid.Types.EfficiencyCurves effCur=Buildings.Fluid.Types.EfficiencyCurves.Constant + "Curve used to compute the efficiency"; + parameter Modelica.Units.SI.Temperature T_nominal=353.15 + "Temperature used to compute nominal efficiency (only used if efficiency curve depends on temperature)" + annotation (Dialog(enable=(effCur == Buildings.Fluid.Types.EfficiencyCurves.QuadraticLinear))); + + + parameter Buildings.Fluid.Data.Fuels.Generic fue "Fuel type" + annotation (choicesAllMatching=true); + + parameter Modelica.Units.SI.Power Q_flow_nominal "Nominal heating power"; + parameter Boolean linearizeFlowResistance=false + "= true, use linear relation between m_flow and dp for any flow rate" + annotation (Dialog(enable=computeFlowResistance, + tab="Flow resistance")); + parameter Modelica.Units.SI.PressureDifference dp_nominal(min=0, displayUnit= +"Pa") "Pressure difference" annotation (Dialog(group="Nominal condition")); +parameter Modelica.Units.SI.Pressure dp[:]=(3000 + 2000)*{2,1} "Pressure"; +parameter Real V_flow[:] = 0.001/1000*{0.5,1}; + parameter Real deltaM=0.1 + "Fraction of nominal flow rate where flow transitions to laminar"; +parameter Modelica.Units.SI.MassFlowRate nominal_mass_flow_rate_boiler; +parameter Modelica.Units.SI.MassFlowRate nominal_mass_flow_radiator_loop; + parameter Boolean show_T=false; + + + parameter Modelica.Units.SI.Volume VTan "Tank volume"; + parameter Modelica.Units.SI.Length hTan "Height of tank (without insulation)"; + parameter Modelica.Units.SI.Length dIns "Thickness of insulation"; + parameter Modelica.Units.SI.ThermalConductivity kIns=0.04 + "Specific heat conductivity of insulation"; + parameter Integer nSeg(min=2) = 2 "Number of volume segments"; + + + Buildings.Fluid.Movers.SpeedControlled_y pumBoi( + redeclare package Medium = MediumW, +per(pressure(V_flow=V_flow, dp=dp)), + use_inputFilter=false, + energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState) + "Pump for boiler circuit" annotation (Placement(transformation(extent={{-10, + -10},{10,10}}, origin={-8,10}))); + + Buildings.Fluid.Boilers.BoilerPolynomial boi( + a=a, + effCur=effCur, + redeclare package Medium = MediumW, + Q_flow_nominal=Q_flow_nominal, + m_flow_nominal=nominal_mass_flow_rate_boiler, + fue=fue, + dp_nominal=dp_nominal, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + T_start=293.15) "Boiler" + annotation (Placement(transformation(extent={{-74,0},{-54,20}}))); + Buildings.HeatTransfer.Sources.FixedTemperature TAmb(T=288.15) + "Ambient temperature in boiler room" + annotation (Placement(transformation(extent={{-14,74},{6,94}}))); + Buildings.Fluid.Storage.StratifiedEnhanced tan1( + m_flow_nominal=nominal_mass_flow_radiator_loop, + dIns=dIns, + redeclare package Medium = MediumW, + hTan=hTan, + nSeg=nSeg, + show_T=true, + VTan=VTan, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial) "Storage tank" + annotation (Placement(transformation(extent={{12,-72},{52,-32}}))); + Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor tanTemBot + "Tank temperature" + annotation (Placement(transformation(extent={{68,-66},{88,-46}}))); + Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor tanTemTop + "Tank temperature" + annotation (Placement(transformation(extent={{68,-34},{88,-14}}))); + Buildings.Fluid.Sources.Boundary_pT bou(nPorts=1, redeclare package Medium = +MediumW) "Fixed boundary condition, needed to provide a pressure in the system" + annotation (Placement(transformation(extent={{-74,68},{-54,88}}))); + Buildings.Fluid.FixedResistances.Junction splVal3( + dp_nominal={0,0,0}, + m_flow_nominal=nominal_mass_flow_rate_boiler*{-1,-1,1}, + redeclare package Medium = MediumW, + energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState) "Flow splitter" + annotation (Placement(transformation( +extent={{10,-10},{-10,10}}, +rotation=180, +origin={30,-98}))); + Buildings.Fluid.FixedResistances.Junction splVal4( + dp_nominal={0,0,0}, + m_flow_nominal=nominal_mass_flow_rate_boiler*{1,1,-1}, + redeclare package Medium = MediumW, + energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState) "Flow splitter" + annotation (Placement(transformation( +extent={{10,10},{-10,-10}}, +rotation=180, +origin={32,10}))); + Buildings.Fluid.Sensors.TemperatureTwoPort temperature_sensor1( + redeclare package Medium = MediumW, m_flow_nominal=nominal_mass_flow_rate_boiler) + "Radiator" annotation ( + Placement(transformation(origin={-36,11}, + extent = {{-10, -10}, {10, 10}}, + rotation=0))); + Buildings.Fluid.Sensors.TemperatureTwoPort temperature_sensor2( + redeclare package Medium = MediumW, m_flow_nominal=nominal_mass_flow_rate_boiler) + "Radiator" annotation ( + Placement(transformation(origin={66,-85}, + extent = {{-10, -10}, {10, 10}}, + rotation=0))); + Buildings.Fluid.Sensors.TemperatureTwoPort temperature_sensor3( + redeclare package Medium = MediumW, m_flow_nominal=nominal_mass_flow_rate_boiler) + "Radiator" annotation ( + Placement(transformation(origin={32,-16.5}, + extent={{-8.5,-8},{8.5,8}}, + rotation=-90))); + Buildings.Fluid.Sensors.TemperatureTwoPort temperature_sensor4( + redeclare package Medium = MediumW, m_flow_nominal=nominal_mass_flow_rate_boiler) + "Radiator" annotation ( + Placement(transformation(origin={-34,-97}, + extent = {{-10, -10}, {10, 10}}, + rotation=0))); + Buildings.Fluid.Sensors.MassFlowRate senMasFlo1(redeclare package Medium = + MediumW) + annotation (Placement(transformation(extent={{10,-10},{-10,10}}, + rotation=90, + origin={46,30}))); + Buildings.Fluid.Sensors.MassFlowRate senMasFlo2(redeclare package Medium = + MediumW) + annotation (Placement(transformation(extent={{-10,-10},{10,10}}, + rotation=90, + origin={-78,-46}))); + Buildings.Fluid.Sensors.MassFlowRate senMasFlo3(redeclare package Medium = + MediumW) + annotation (Placement(transformation(extent={{-6,-7},{6,7}}, + rotation=0, + origin={13,10}))); + Buildings.Fluid.Sensors.MassFlowRate senMasFlo4(redeclare package Medium = + MediumW) + annotation (Placement(transformation(extent={{-10,-10},{10,10}}, + rotation=0, + origin={94,-86}))); + Modelica.Blocks.Math.Gain gain(k=Q_flow_nominal) + annotation (Placement(transformation(extent={{-70,-22},{-58,-10}}))); + Modelica.Blocks.Continuous.Integrator integrator + annotation (Placement(transformation(extent={{-46,-26},{-30,-10}}))); + Modelica.Blocks.Math.Gain gain1(k=2.77778e-7) + annotation (Placement(transformation(extent={{-46,-52},{-26,-32}}))); + Modelica.Blocks.Math.Gain gain2(k=0.9*(1/11)) + annotation (Placement(transformation(extent={{-26,-80},{-6,-60}}))); + Modelica.Blocks.Routing.RealPassThrough Boiy + annotation (Placement(transformation(extent={{-122,36},{-104,54}}))); +equation + connect( + TAmb.port, boi.heatPort) + annotation (Line( + points={{6,84},{20,84},{20,30},{-64,30},{-64,17.2}}, + color={191,0,0}, + smooth=Smooth.None)); + connect( + tan1.heaPorVol[1], tanTemTop.port) + annotation (Line( + points={{32,-52.3},{32,-52},{64,-52},{64,-24},{68,-24}}, + color={191,0,0}, + smooth=Smooth.None)); + connect( + tanTemBot.port, tan1.heaPorVol[tan1.nSeg]) + annotation (Line( + points={{68,-56},{56,-56},{56,-52},{32,-52}}, + color={191,0,0}, + smooth=Smooth.None)); + connect( + tan1.heaPorTop, TAmb.port) + annotation (Line( + points={{36,-37.2},{62,-37.2},{62,84},{6,84}}, + color={191,0,0}, + smooth=Smooth.None)); + connect( + TAmb.port, tan1.heaPorSid) + annotation (Line( + points={{6,84},{62,84},{62,-50},{54,-50},{54,-52},{43.2,-52}}, + color={191,0,0}, + smooth=Smooth.None)); + connect( + TAmb.port, tan1.heaPorBot) + annotation (Line( + points={{6,84},{62,84},{62,-50},{54,-50},{54,-52},{8,-52},{8,-80},{36,-80}, + {36,-66.8}}, + color={191,0,0}, + smooth=Smooth.None)); + connect( + bou.ports[1], boi.port_a) + annotation (Line( + points={{-54,78},{-48,78},{-48,32},{-80,32},{-80,10},{-74,10}}, + color={0,127,255}, + smooth=Smooth.None)); + connect( + tan1.port_b, splVal3.port_3) annotation (Line(points={{32,-72},{32,-84},{30,-84}, + {30,-88}}, color={0,127,255})); + connect(boi.port_b, temperature_sensor1.port_a) annotation (Line(points={{-54, + 10},{-50,10},{-50,11},{-46,11}}, color={0,127,255})); + connect(temperature_sensor1.port_b, pumBoi.port_a) annotation (Line(points={{-26,11}, + {-23,11},{-23,10},{-18,10}}, color={0,127,255})); + connect(splVal3.port_2, temperature_sensor2.port_a) annotation (Line(points={{40,-98}, + {52,-98},{52,-85},{56,-85}}, color={0,127,255})); + connect(splVal4.port_3, temperature_sensor3.port_a) + annotation (Line(points={{32,0},{32,-8}}, color={0,127,255})); + connect(temperature_sensor3.port_b, tan1.port_a) + annotation (Line(points={{32,-25},{32,-32}}, color={0,127,255})); + connect(splVal3.port_1, temperature_sensor4.port_b) annotation (Line(points={{20,-98}, + {18,-97},{-24,-97}}, color={0,127,255})); + connect(senMasFlo1.port_b, splVal4.port_2) annotation (Line(points={{46,20},{46, + 16},{42,16},{42,10}}, color={0,127,255})); + connect(boi.port_a, senMasFlo2.port_b) + annotation (Line(points={{-74,10},{-78,10},{-78,-36}}, color={0,127,255})); + connect(temperature_sensor4.port_a, senMasFlo2.port_a) annotation (Line( + points={{-44,-97},{-44,-98},{-78,-98},{-78,-56}}, color={0,127,255})); + connect(splVal4.port_1, senMasFlo3.port_b) + annotation (Line(points={{22,10},{19,10}}, color={0,127,255})); + connect(senMasFlo3.port_a, pumBoi.port_b) + annotation (Line(points={{7,10},{2,10}}, color={0,127,255})); + connect(temperature_sensor2.port_b, senMasFlo4.port_a) annotation (Line( + points={{76,-85},{80,-85},{80,-86},{84,-86}}, color={0,127,255})); + connect(senMasFlo1.port_a, port_b) annotation (Line(points={{46,40},{46,44},{86, + 44},{86,0},{100,0}}, color={0,127,255})); + connect(port_a, senMasFlo4.port_b) annotation (Line(points={{-100,0},{-84,0},{ + -84,-32},{-96,-32},{-96,-114},{110,-114},{110,-86},{104,-86}}, color={ + 0,127,255})); + connect(gain.y, integrator.u) annotation (Line(points={{-57.4,-16},{-54,-16},{ + -54,-18},{-47.6,-18}}, color={0,0,127})); + connect(integrator.y, gain1.u) annotation (Line(points={{-29.2,-18},{-30,-18}, + {-30,-4},{-74,-4},{-74,-12},{-76,-12},{-76,-32},{-48,-32},{-48,-42}}, + color={0,0,127})); + connect(gain1.y, gain2.u) annotation (Line(points={{-25,-42},{-34,-42},{-34,-60}, + {-60,-60},{-60,-70},{-28,-70}}, color={0,0,127})); + connect(Boiy.y, boi.y) annotation (Line(points={{-103.1,45},{-84,45},{-84,18}, + {-76,18}}, color={0,0,127})); + connect(Boiy.y, gain.u) annotation (Line(points={{-103.1,45},{-84,45},{-84,2}, + {-82,2},{-82,-16},{-71.2,-16}}, color={0,0,127})); + annotation (Icon(coordinateSystem(extent={{-100,-120},{100,100}}), graphics={ +Rectangle(fillPattern=FillPattern.Solid, extent={{-80,80},{80,-80}}), +Rectangle( + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-68,70},{70,-70}}), + Polygon( + lineColor={0,0,255}, + fillColor={0,0,255}, + fillPattern=FillPattern.Solid, + points={{-68,18},{-68,18},{-54,32},{-28,16},{0,30},{26,16},{46,32},{70, + 18},{70,18},{70,-70},{70,-70},{-68,-70},{-68,-70},{-68,18}}, + smooth=Smooth.Bezier)}), Diagram(coordinateSystem(extent={{-100,-120}, + {100,100}}))); +end PartialBoilerWithStorage; + + + model BoilerWithStorageSystem_001 + extends house.Common.Fluid.Boilers.PartialBoilerWithStorage; + Controls.BaseClasses.DataBus dataBus + annotation (Placement(transformation( + extent={{-120,-18},{-80,22}}), iconTransformation(extent={{-120,62},{-78,98}}))); + equation + connect(dataBus.yBoiConSystem_001, Boiy.y); +connect(dataBus.yPumBoiSystem_001, pumBoi.y); +connect(dataBus.TStoTopSystem_001, tanTemTop.T); +connect(dataBus.TStoBotSystem_001, tanTemBot.T); + end BoilerWithStorageSystem_001; + + + end Boilers; + + package Ventilation + model SimpleHVAC + + replaceable package Medium = Modelica.Media.Interfaces.PartialMedium + "Medium model" annotation (choicesAllMatching=true); + IDEAS.Fluid.Movers.FlowControlled_dp + fanSup( + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + inputType=IDEAS.Fluid.Types.InputType.Constant, + nominalValuesDefineDefaultPressureCurve=true, + redeclare package Medium = Medium, + dp_nominal=200, + m_flow_nominal=2*100*1.2/3600) "Supply fan" + annotation (Placement(transformation(extent={{4,6},{24,26}}))); + IDEAS.Fluid.Movers.FlowControlled_dp + fanRet( + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + inputType=IDEAS.Fluid.Types.InputType.Constant, + nominalValuesDefineDefaultPressureCurve=true, + redeclare package Medium = Medium, + dp_nominal=200, + m_flow_nominal=2*100*1.2/3600) "Return fan" + annotation (Placement(transformation(extent={{24,-34},{4,-14}}))); + IDEAS.Fluid.HeatExchangers.ConstantEffectiveness + hex( + redeclare package Medium1 = Medium, + redeclare package Medium2 = Medium, + m1_flow_nominal=2*100*1.2/3600, + m2_flow_nominal=2*100*1.2/3600, + dp1_nominal=100, + dp2_nominal=100) "Heat exchanger with constant heat recovery effectivity" + annotation (Placement(transformation(extent={{-26,-14},{-6,6}}))); + Modelica.Fluid.Interfaces.FluidPort_b port_b( + redeclare final package Medium = Medium) + "Fluid connector b (positive design flow direction is from port_a to port_b)" + annotation (Placement(transformation(extent={{118,1},{86,31}}), + iconTransformation(extent={{110,31},{90,49}}))); + + Modelica.Fluid.Interfaces.FluidPort_a port_a( + redeclare final package Medium = Medium) + "Fluid connector a (positive design flow direction is from port_a to port_b)" + annotation (Placement(transformation(extent={{84,-40},{118,-8}}), + iconTransformation(extent={{90,-49},{110,-31}}))); + IDEAS.Fluid.Sources.OutsideAir outsideAir( + azi=0, nPorts=2, redeclare package + Medium = Medium) annotation ( + Placement(transformation(origin = {-64, 2}, extent = {{-10, -10}, {10, 10}}))); + equation + connect(hex.port_b1, fanSup.port_a) annotation ( + Line(points = {{-6, 2}, {-6, 16}, {4, 16}}, color = {0, 127, 255})); + connect(hex.port_a2, fanRet.port_b) annotation ( + Line(points = {{-6, -10}, {-6, -24}, {4, -24}}, color = {0, 127, 255})); + connect(fanSup.port_b, port_b) annotation ( + Line(points = {{24, 16}, {102, 16}}, color = {0, 127, 255})); + connect(fanRet.port_a, port_a) annotation ( + Line(points = {{24, -24}, {101, -24}}, color = {0, 127, 255})); + connect( + outsideAir.ports[1], hex.port_a1) annotation ( + Line(points={{-54,4},{-40,4},{-40,2},{-26,2}}, + color = {0, 127, 255})); + connect( + outsideAir.ports[2], hex.port_b2) annotation ( + Line(points={{-54,0},{-26,0},{-26,-10}}, color = {0, 127, 255})); + annotation (Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-60}, + {100,60}}), graphics={Rectangle( + extent={{-100,60},{100,-60}}, + lineColor={255,128,0}, + fillColor={255,128,0}, + fillPattern=FillPattern.Forward)}), Diagram(coordinateSystem( + preserveAspectRatio=false, extent={{-100,-60},{100,60}}))); + end SimpleHVAC; + + model SimpleVAV + annotation (Icon(coordinateSystem(preserveAspectRatio=false)), Diagram( + coordinateSystem(preserveAspectRatio=false))); + end SimpleVAV; + + model SimpleHVACBuildings + + replaceable package Medium = Modelica.Media.Interfaces.PartialMedium + "Medium model" annotation (choicesAllMatching=true); + Buildings.Fluid.Movers.FlowControlled_dp + fanSup( + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + use_inputFilter=false, + inputType=Buildings.Fluid.Types.InputType.Constant, + nominalValuesDefineDefaultPressureCurve=true, + redeclare package Medium = Medium, + dp_nominal=200, + m_flow_nominal=2*100*1.2/3600) "Supply fan" + annotation (Placement(transformation(extent={{4,6},{24,26}}))); + Buildings.Fluid.Movers.FlowControlled_dp + fanRet( + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + use_inputFilter=false, + inputType=Buildings.Fluid.Types.InputType.Constant, + nominalValuesDefineDefaultPressureCurve=true, + redeclare package Medium = Medium, + dp_nominal=200, + m_flow_nominal=2*100*1.2/3600) "Return fan" + annotation (Placement(transformation(extent={{24,-34},{4,-14}}))); + Buildings.Fluid.HeatExchangers.ConstantEffectiveness + hex( + redeclare package Medium1 = Medium, + redeclare package Medium2 = Medium, + m1_flow_nominal=2*100*1.2/3600, + m2_flow_nominal=2*100*1.2/3600, + dp1_nominal=100, + dp2_nominal=100) "Heat exchanger with constant heat recovery effectivity" + annotation (Placement(transformation(extent={{-26,-14},{-6,6}}))); + Modelica.Fluid.Interfaces.FluidPort_b port_b( + redeclare final package Medium = Medium) + "Fluid connector b (positive design flow direction is from port_a to port_b)" + annotation (Placement(transformation(extent={{118,1},{86,31}}), + iconTransformation(extent={{110,31},{90,49}}))); + + Modelica.Fluid.Interfaces.FluidPort_a port_a( + redeclare final package Medium = Medium) + "Fluid connector a (positive design flow direction is from port_a to port_b)" + annotation (Placement(transformation(extent={{84,-40},{118,-8}}), + iconTransformation(extent={{90,-49},{110,-31}}))); + Buildings.Fluid.Sources.Boundary_pT bou(T=295.15, nPorts=2, redeclare + package Medium = Medium) + annotation (Placement(transformation(extent={{-78,-14},{-58,6}}))); + Buildings.Fluid.Sensors.TemperatureTwoPort TSup( + redeclare package Medium = Medium, + m_flow_nominal=2*100*1.2/3600, + allowFlowReversal=false) +annotation (Placement(transformation(extent={{48,6},{68,26}}))); + Controls.BaseClasses.DataBus dataBus annotation (Placement(transformation( + extent={{-120,22},{-80,62}}), iconTransformation(extent={{-208,22},{-188, + 42}}))); +equation + connect(hex.port_b1, fanSup.port_a) annotation ( + Line(points = {{-6, 2}, {-6, 16}, {4, 16}}, color = {0, 127, 255})); + connect(hex.port_a2, fanRet.port_b) annotation ( + Line(points = {{-6, -10}, {-6, -24}, {4, -24}}, color = {0, 127, 255})); + connect(fanRet.port_a, port_a) annotation ( + Line(points = {{24, -24}, {101, -24}}, color = {0, 127, 255})); + connect(bou.ports[1], hex.port_b2) annotation (Line(points={{-58,-2},{-32,-2}, + {-32,-10},{-26,-10}}, color={0,127,255})); + connect(bou.ports[2], hex.port_a1) annotation (Line(points={{-58,-6},{-32,-6}, + {-32,2},{-26,2}}, color={0,127,255})); + connect(fanSup.port_b, TSup.port_a) + annotation (Line(points={{24,16},{48,16}}, color={0,127,255})); + connect(TSup.port_b, port_b) + annotation (Line(points={{68,16},{102,16}}, color={0,127,255})); + connect(TSup.T, dataBus.TSupAhu) annotation (Line(points={{58,27},{58,42},{ + -100,42}}, color={0,0,127}), Text( + string="%second", + index=1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + annotation (Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-60}, + {100,60}}), graphics={Rectangle( + extent={{-100,60},{100,-60}}, + lineColor={255,128,0}, + fillColor={255,128,0}, + fillPattern=FillPattern.Forward)}), Diagram(coordinateSystem( + preserveAspectRatio=false, extent={{-100,-60},{100,60}}))); +end SimpleHVACBuildings; + + model AhuWithEconomizer + replaceable package MediumA = Modelica.Media.Interfaces.PartialMedium + "Medium model" annotation (choicesAllMatching=true); + + constant Integer numZon(min=2)=2 "Total number of served VAV boxes"; + + parameter Modelica.Units.SI.Volume VRoo[numZon] "Room volume per zone"; + parameter Modelica.Units.SI.Area AFlo[numZon] "Floor area per zone"; + + final parameter Modelica.Units.SI.Area ATot=sum(AFlo) + "Total floor area for all zone"; + + constant Real conv=1.2/3600 "Conversion factor for nominal mass flow rate"; + + + parameter Modelica.Units.SI.HeatFlowRate QHeaAHU_flow_nominal(min=0) = mHeaAir_flow_nominal * Buildings.Utilities.Psychrometrics.Constants.cpAir * (THeaAirSup_nominal-THeaAirMix_nominal) + "Nominal heating heat flow rate of air handler unit coil"; + + parameter Modelica.Units.SI.HeatFlowRate QCooAHU_flow_nominal(max=0) = 1.3 * mCooAir_flow_nominal * Buildings.Utilities.Psychrometrics.Constants.cpAir *(TCooAirSup_nominal-TCooAirMix_nominal) + "Nominal total cooling heat flow rate of air handler unit coil (negative number)"; + + parameter Modelica.Units.SI.MassFlowRate mCooVAV_flow_nominal[numZon] + "Design mass flow rate per zone for cooling" + annotation (Dialog(group="Nominal mass flow rate")); + + parameter Modelica.Units.SI.MassFlowRate mHeaVAV_flow_nominal[numZon] = 0.3*mCooVAV_flow_nominal + "Design mass flow rate per zone for heating" + annotation (Dialog(group="Nominal mass flow rate")); + + parameter Modelica.Units.SI.MassFlowRate mAir_flow_nominal=0.01 + "Nominal mass flow rate for fan" + annotation (Dialog(group="Nominal mass flow rate")); + parameter Modelica.Units.SI.MassFlowRate mCooAir_flow_nominal=0.7*sum(mCooVAV_flow_nominal) + "Nominal mass flow rate for fan" + annotation (Dialog(group="Nominal mass flow rate")); + parameter Modelica.Units.SI.MassFlowRate mHeaAir_flow_nominal = 0.7*sum(mHeaVAV_flow_nominal) + "Nominal mass flow rate for fan" + annotation (Dialog(group="Nominal mass flow rate")); + + parameter Modelica.Units.SI.MassFlowRate mHeaWat_flow_nominal= + QHeaAHU_flow_nominal/Buildings.Utilities.Psychrometrics.Constants.cpWatLiq/10 + "Nominal water mass flow rate for heating coil in AHU" + annotation (Dialog(group="Nominal mass flow rate")); + parameter Modelica.Units.SI.MassFlowRate mCooWat_flow_nominal= + QCooAHU_flow_nominal/Buildings.Utilities.Psychrometrics.Constants.cpWatLiq/(-6) + "Nominal water mass flow rate for cooling coil" + annotation (Dialog(group="Nominal mass flow rate")); + + parameter Real ratOAFlo_A(final unit="m3/(s.m2)") = 0.3e-3 + "Outdoor airflow rate required per unit area"; + parameter Real ratOAFlo_P = 2.5e-3 + "Outdoor airflow rate required per person"; + parameter Real ratP_A = 5e-2 + "Occupant density"; + parameter Real effZ(final unit="1") = 0.8 + "Zone air distribution effectiveness (limiting value)"; + parameter Real divP(final unit="1") = 0.7 + "Occupant diversity ratio"; + + parameter Modelica.Units.SI.VolumeFlowRate VZonOA_flow_nominal[numZon]=( + ratOAFlo_P*ratP_A + ratOAFlo_A)*AFlo/effZ + "Zone outdoor air flow rate of each VAV box"; + + parameter Modelica.Units.SI.VolumeFlowRate Vou_flow_nominal=(divP*ratOAFlo_P* + ratP_A + ratOAFlo_A)*sum(AFlo) "System uncorrected outdoor air flow rate"; + parameter Real effVen(final unit="1") = if divP < 0.6 then + 0.88 * divP + 0.22 else 0.75 + "System ventilation efficiency"; + parameter Modelica.Units.SI.VolumeFlowRate Vot_flow_nominal=Vou_flow_nominal/ + effVen "System design outdoor air flow rate"; + + parameter Modelica.Units.SI.Temperature THeaOn=293.15 + "Heating setpoint during on" + annotation (Dialog(group="Room temperature setpoints")); + parameter Modelica.Units.SI.Temperature THeaOff=285.15 + "Heating setpoint during off" + annotation (Dialog(group="Room temperature setpoints")); + parameter Modelica.Units.SI.Temperature TCooOn=297.15 + "Cooling setpoint during on" + annotation (Dialog(group="Room temperature setpoints")); + parameter Modelica.Units.SI.Temperature TCooOff=303.15 + "Cooling setpoint during off" + annotation (Dialog(group="Room temperature setpoints")); + parameter Modelica.Units.SI.PressureDifference dpBuiStaSet(min=0) = 12 + "Building static pressure"; + parameter Real yFanMin = 0.1 "Minimum fan speed"; + + + parameter Modelica.Units.SI.Temperature TCooAirMix_nominal(displayUnit="degC")=303.15 + "Mixed air temperature during cooling nominal conditions (used to size cooling coil)" + annotation (Dialog(group="Air handler unit nominal temperatures and humidity")); + parameter Modelica.Units.SI.Temperature TCooAirSup_nominal(displayUnit="degC")=285.15 + "Supply air temperature during cooling nominal conditions (used to size cooling coil)" + annotation (Dialog(group="Air handler unit nominal temperatures and humidity")); + parameter Modelica.Units.SI.MassFraction wCooAirMix_nominal = 0.017 + "Humidity ratio of mixed air at a nominal conditions used to size cooling coil (in kg/kg dry total)" + annotation (Dialog(group="Air handler unit nominal temperatures and humidity")); + parameter Modelica.Units.SI.Temperature TCooWatInl_nominal(displayUnit="degC") = 279.15 + "Cooling coil nominal inlet water temperature" + annotation (Dialog(group="Air handler unit nominal temperatures and humidity")); + + + parameter Modelica.Units.SI.Temperature THeaAirMix_nominal(displayUnit="degC")=277.15 + "Mixed air temperature during heating nominal conditions (used to size heating coil)" + annotation (Dialog(group="Air handler unit nominal temperatures and humidity")); + parameter Modelica.Units.SI.Temperature THeaAirSup_nominal(displayUnit="degC")=285.15 + "Supply air temperature during heating nominal conditions (used to size heating coil)" + annotation (Dialog(group="Air handler unit nominal temperatures and humidity")); + parameter Modelica.Units.SI.Temperature THeaWatInl_nominal(displayUnit="degC") + "Reheat coil nominal inlet water temperature" + annotation (Dialog(group="Air handler unit nominal temperatures and humidity")); + + parameter Boolean allowFlowReversal=false + "= false to simplify equations, assuming, but not enforcing, no flow reversal" + annotation (Evaluate=true); + + + + Buildings.Fluid.Movers.Preconfigured.SpeedControlled_y fanSup( + redeclare package Medium = MediumA, + m_flow_nominal=mAir_flow_nominal, + dp_nominal=780 + 10 + dpBuiStaSet, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial) + "Supply air fan" + annotation (Placement(transformation(extent={{246,-82},{266,-62}}))); + Buildings.Fluid.Sensors.VolumeFlowRate senSupFlo(redeclare package Medium = + MediumA, m_flow_nominal=mAir_flow_nominal) + "Sensor for supply fan flow rate" + annotation (Placement(transformation(extent={{346,-82},{366,-62}}))); + Buildings.Fluid.Sensors.TemperatureTwoPort TSup( + redeclare package Medium = MediumA, + m_flow_nominal=mAir_flow_nominal, + allowFlowReversal=allowFlowReversal) + annotation (Placement(transformation(extent={{276,-82},{296,-62}}))); + Buildings.Fluid.Sensors.TemperatureTwoPort TMix( + redeclare package Medium = MediumA, + m_flow_nominal=mAir_flow_nominal, + allowFlowReversal=allowFlowReversal, + transferHeat=true) "Mixed air temperature sensor" + annotation (Placement(transformation(extent={{82,-82},{102,-62}}))); + Buildings.Fluid.Sensors.VolumeFlowRate VOut1(redeclare package Medium = + MediumA, m_flow_nominal=mAir_flow_nominal) + "Outside air volume flow rate" + annotation (Placement(transformation(extent={{-68,-80},{-48,-60}}))); + Buildings.Fluid.Actuators.Dampers.Exponential + damRet( + redeclare package Medium = MediumA, + m_flow_nominal=mAir_flow_nominal, + from_dp=false, + riseTime=15, + dpDamper_nominal=5, + dpFixed_nominal=5) + "Return air damper" annotation (Placement(transformation( + origin={52,-6}, + extent={{10,-10},{-10,10}}, + rotation=90))); + Buildings.Fluid.Actuators.Dampers.Exponential + damOut( + redeclare package Medium = MediumA, + m_flow_nominal=mAir_flow_nominal, + from_dp=false, + riseTime=15, + dpDamper_nominal=5, + dpFixed_nominal=5) + "Outdoor air damper" + annotation (Placement(transformation(extent={{2,-80},{22,-60}}))); + Buildings.Fluid.FixedResistances.PressureDrop + dpSupDuc( + m_flow_nominal=mAir_flow_nominal, + redeclare package Medium = MediumA, + allowFlowReversal=allowFlowReversal, + dp_nominal=200 + 200 + 100 + 40) + "Pressure drop for supply duct" + annotation (Placement(transformation(extent={{196,-82},{216,-62}}))); + Buildings.Fluid.FixedResistances.Junction + splRetOut( + redeclare package Medium = MediumA, + tau=15, + m_flow_nominal=mAir_flow_nominal*{1,1,1}, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + dp_nominal(each displayUnit="Pa") = {0,0,0}, + portFlowDirection_1=if allowFlowReversal then Modelica.Fluid.Types.PortFlowDirection.Bidirectional + else Modelica.Fluid.Types.PortFlowDirection.Entering, + portFlowDirection_2=if allowFlowReversal then Modelica.Fluid.Types.PortFlowDirection.Bidirectional + else Modelica.Fluid.Types.PortFlowDirection.Leaving, + portFlowDirection_3=if allowFlowReversal then Modelica.Fluid.Types.PortFlowDirection.Bidirectional + else Modelica.Fluid.Types.PortFlowDirection.Entering, + linearized=true) + "Flow splitter" + annotation (Placement(transformation( + extent={{-10,10},{10,-10}}, + rotation=0, + origin={52,-70}))); + Buildings.Fluid.Actuators.Dampers.Exponential damExh( + from_dp=false, + riseTime=15, + dpFixed_nominal=5, + redeclare package Medium = MediumA, + m_flow_nominal=mAir_flow_nominal, + dpDamper_nominal=5) + "Exhaust air damper" + annotation (Placement(transformation(extent={{-16,-14},{-36,6}}))); + Buildings.Fluid.FixedResistances.PressureDrop dpRetDuc( + m_flow_nominal=mAir_flow_nominal, + redeclare package Medium = MediumA, + allowFlowReversal=allowFlowReversal, + dp_nominal=40) + "Pressure drop for return duct" + annotation (Placement(transformation(extent={{368,0},{348,20}}))); + Buildings.Fluid.Sensors.VolumeFlowRate senRetFlo(redeclare package Medium = + MediumA, m_flow_nominal=mAir_flow_nominal) + "Sensor for return fan flow rate" + annotation (Placement(transformation(extent={{234,0},{214,20}}))); + Buildings.Fluid.Sensors.TemperatureTwoPort TRet( + redeclare package Medium = MediumA, + m_flow_nominal=mAir_flow_nominal, + allowFlowReversal=allowFlowReversal) + "Return air temperature sensor" + annotation (Placement(transformation(extent={{138,0},{118,20}}))); + Buildings.Fluid.Movers.Preconfigured.SpeedControlled_y fanSup1( + redeclare package Medium = MediumA, + m_flow_nominal=mAir_flow_nominal, + dp_nominal=780 + 10 + dpBuiStaSet, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial) + "Supply air fan" + annotation (Placement(transformation(extent={{278,0},{258,20}}))); + Modelica.Fluid.Interfaces.FluidPort_b port_b(redeclare final package Medium = + MediumA) + "Fluid connector b (positive design flow direction is from port_a to port_b)" + annotation (Placement(transformation(extent={{556,-5},{524,25}}), + iconTransformation(extent={{552,11},{532,29}}))); + Modelica.Fluid.Interfaces.FluidPort_a port_a(redeclare final package Medium = + MediumA) + "Fluid connector a (positive design flow direction is from port_a to port_b)" + annotation (Placement(transformation(extent={{522,-90},{556,-58}}), + iconTransformation(extent={{532,-69},{552,-51}}))); + Modelica.Fluid.Interfaces.FluidPorts_b ports[2](redeclare each package Medium = + MediumA, each m_flow(max=if flowDirection == Modelica.Fluid.Types.PortFlowDirection.Leaving + then 0 else +Modelica.Constants.inf, min=if flowDirection == + Modelica.Fluid.Types.PortFlowDirection.Entering then 0 else -Modelica.Constants.inf)) + "Fluid ports" + annotation (Placement(transformation(extent={{-110,26},{-90,-54}}), + iconTransformation(extent={{-110,26},{-90,-54}}))); + Controls.BaseClasses.DataBus dataBus annotation (Placement(transformation( + extent={{-90,78},{-50,118}}), iconTransformation(extent={{-84,54},{-34, + 96}}))); + Modelica.Blocks.Math.RealToBoolean u1SupFan(threshold=0.2) + "Convert real to integer" + annotation (Placement(transformation(extent={{316,30},{356,70}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant opeMod(final k=Buildings.Controls.OBC.ASHRAE.G36.Types.OperationModes.occupied) + "AHU operation mode is occupied" + annotation (Placement(transformation(extent={{-66,-170},{-46,-150}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant sumDesPopBreZon(final k=0.0125) + "Sum of the population component design breathing zone flow rate" + annotation (Placement(transformation(extent={{200,-160},{220,-140}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant sumDesAreBreZon(final k=0.03) + "Sum of the area component design breathing zone flow rate" + annotation (Placement(transformation(extent={{324,-160},{344,-140}}))); + Buildings.Fluid.Sensors.RelativePressure dpDisSupFan(redeclare package Medium = + MediumA) "Supply fan static discharge pressure" annotation (Placement( + transformation( + extent={{-18,22},{18,-22}}, + rotation=90, + origin={404,-28}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant ducPreResReq(final k=2) + "AHU operation mode is occupied" + annotation (Placement(transformation(extent={{-64,-218},{-44,-198}}))); + Buildings.Fluid.Sensors.TemperatureTwoPort TOut( + redeclare package Medium = MediumA, + m_flow_nominal=mAir_flow_nominal, + allowFlowReversal=allowFlowReversal, + transferHeat=true) "Mixed air temperature sensor" + annotation (Placement(transformation(extent={{-32,-80},{-12,-60}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant sumDesPopBreZon1(final k=0.04) + "Sum of the population component design breathing zone flow rate" + annotation (Placement(transformation(extent={{264,-160},{284,-140}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant VSumZonPri_flow(final k=0.03) + "Sum of the area component design breathing zone flow rate" + annotation (Placement(transformation(extent={{444,-112},{464,-92}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant uOutAirFra_max(final k=0.5) + "Sum of the area component design breathing zone flow rate" + annotation (Placement(transformation(extent={{498,-122},{518,-102}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant maxSupResReq(final k=6) + "AHU operation mode is occupied" + annotation (Placement(transformation(extent={{-74,-268},{-54,-248}}))); + + protected + parameter Modelica.Fluid.Types.PortFlowDirection flowDirection=Modelica.Fluid.Types.PortFlowDirection.Bidirectional + "Allowed flow direction" annotation (Evaluate=true, Dialog(tab="Advanced")); +equation + connect(TSup.port_a,fanSup. port_b) annotation (Line( + points={{276,-72},{266,-72}}, + color={0,127,255}, + smooth=Smooth.None, + thickness=0.5)); + connect(TSup.port_b,senSupFlo. port_a) + annotation (Line(points={{296,-72},{346,-72}}, color={0,127,255})); + connect(dpSupDuc.port_b,fanSup. port_a) + annotation (Line(points={{216,-72},{246,-72}}, color={0,127,255})); + connect(damOut.port_b,splRetOut. port_1) + annotation (Line(points={{22,-70},{42,-70}}, color={0,127,255})); + connect(splRetOut.port_2,TMix. port_a) + annotation (Line(points={{62,-70},{72,-70},{72,-72},{82,-72}}, + color={0,127,255})); + connect(damRet.port_b,splRetOut. port_3) annotation (Line(points={{52,-16},{52, + -60}}, color={0,127,255})); + connect(dpSupDuc.port_a, TMix.port_b) annotation (Line(points={{196,-72},{102, + -72}}, color={0,127,255})); + connect(senRetFlo.port_b,TRet. port_a) annotation (Line(points={{214,10},{138, + 10}}, color={0,127,255})); + connect(TRet.port_b, damRet.port_a) annotation (Line(points={{118,10},{52,10}, + {52,4}}, color={0,127,255})); + connect(TRet.port_b, damExh.port_a) annotation (Line(points={{118,10},{-6,10}, + {-6,-4},{-16,-4}}, color= + {0,127,255})); + connect(senRetFlo.port_a, fanSup1.port_b) + annotation (Line(points={{234,10},{258,10}}, color={0,127,255})); + connect(fanSup1.port_a, dpRetDuc.port_b) + annotation (Line(points={{278,10},{348,10}}, color={0,127,255})); + connect(senSupFlo.port_b, port_a) annotation (Line(points={{366,-72},{516,-72}, + {516,-74},{539,-74}}, color={0,127,255})); + connect(dpRetDuc.port_a, port_b) + annotation (Line(points={{368,10},{540,10}}, color={0,127,255})); + connect(damExh.port_b, ports[1]) annotation (Line(points={{-36,-4},{-84,-4},{-84, + 6},{-100,6}}, color={0,127,255})); + connect(VOut1.port_a, ports[2]) annotation (Line(points={{-68,-70},{-84,-70},{ + -84,-34},{-100,-34}}, color={0,127,255})); + connect(dataBus.yRetDam, damRet.y) annotation (Line( + points={{-70,98},{-70,-24},{32,-24},{32,-6},{40,-6}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + connect(dataBus.yOutDam, damOut.y) annotation (Line( + points={{-70,98},{-70,-48},{12,-48},{12,-58}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-3,6},{-3,6}}, + horizontalAlignment=TextAlignment.Right)); + connect(dataBus.ySupFan, fanSup1.y) annotation (Line( + points={{-70,98},{-70,32},{268,32},{268,22}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + connect(dataBus.ySupFan, fanSup.y) annotation (Line( + points={{-70,98},{-70,32},{248,32},{248,-52},{256,-52},{256,-60}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + connect(dataBus.yOutDam, damExh.y) annotation (Line( + points={{-70,98},{-70,18},{-26,18},{-26,8}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + connect(opeMod.y, dataBus.uAhuOpeMod) annotation (Line(points={{-44,-160},{-34, + -160},{-34,-158},{-36,-158},{-36,-154},{-34,-154},{-34,-86},{-38,-86}, + {-38,-52},{-70,-52},{-70,98}}, color={255,127,0}), Text( + string="%second", + index=1, + extent={{6,3},{6,3}}, + horizontalAlignment=TextAlignment.Left)); + connect(dpDisSupFan.port_a, port_a) annotation (Line(points={{404,-46},{404,-72}, + {516,-72},{516,-74},{539,-74}}, color={0,127,255})); + connect(VOut1.port_a, dpDisSupFan.port_b) annotation (Line(points={{-68,-70},{ + -84,-70},{-84,-26},{376,-26},{376,0},{404,0},{404,-10}}, color={0,127, + 255})); + connect(dpDisSupFan.p_rel, dataBus.dpDuc) annotation (Line(points={{384.2,-28}, + {-70,-28},{-70,98}}, color={0,0,127}), Text( + string="%second", + index=1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + connect(ducPreResReq.y, dataBus.uZonPreResReq) annotation (Line(points={{-42,-208}, + {-38,-208},{-38,-204},{-40,-204},{-40,-200},{-38,-200},{-38,-178},{-70, + -178},{-70,98}}, color={255,127,0}), Text( + string="%second", + index=1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + connect(VOut1.port_b, TOut.port_a) + annotation (Line(points={{-48,-70},{-32,-70}}, color={0,127,255})); + connect(TOut.port_b, damOut.port_a) + annotation (Line(points={{-12,-70},{2,-70}}, color={0,127,255})); + connect(TSup.T, dataBus.TAirSup) annotation (Line(points={{286,-61},{136,-61}, + {136,38},{-70,38},{-70,98}}, color={0,0,127}), Text( + string="%second", + index=1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + connect(dataBus.ySupFan, u1SupFan.u) annotation (Line( + points={{-70,98},{-70,50},{312,50}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + connect(u1SupFan.y, dataBus.u1SupFan) annotation (Line(points={{358,50},{366,50}, + {366,76},{-44,76},{-44,72},{-70,72},{-70,98}}, color={255,0,255}), + Text( + string="%second", + index=1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + connect(sumDesPopBreZon.y, dataBus.VSumAdjPopBreZon_flow) annotation (Line( + points={{222,-150},{230,-150},{230,-6},{200,-6},{200,48},{-70,48},{-70,98}}, + color={0,0,127}), Text( + string="%second", + index=1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + connect(sumDesAreBreZon.y, dataBus.VSumAdjAreBreZon_flow) annotation (Line( + points={{346,-150},{364,-150},{364,-26},{-70,-26},{-70,98}}, color={0,0, + 127}), Text( + string="%second", + index=1, + extent={{6,3},{6,3}}, + horizontalAlignment=TextAlignment.Left)); + connect(TOut.T, dataBus.TOut) annotation (Line(points={{-22,-59},{-22,-50},{-70, + -50},{-70,98}}, color={0,0,127}), Text( + string="%second", + index=1, + extent={{-3,6},{-3,6}}, + horizontalAlignment=TextAlignment.Right)); + connect(VOut1.V_flow, dataBus.VAirOut_flow) annotation (Line(points={{-58,-59}, + {-38,-59},{-38,98},{-70,98}}, color={0,0,127}), Text( + string="%second", + index=1, + extent={{6,3},{6,3}}, + horizontalAlignment=TextAlignment.Left)); + connect(VSumZonPri_flow.y, dataBus.VSumZonPri_flow) annotation (Line(points={{ + 466,-102},{200,-102},{200,98},{-70,98}}, color={0,0,127}), Text( + string="%second", + index=1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + connect(uOutAirFra_max.y, dataBus.uOutAirFra_max) annotation (Line(points={{520, + -112},{226,-112},{226,98},{-70,98}}, color={0,0,127}), Text( + string="%second", + index=1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + connect(maxSupResReq.y, dataBus.uZonTemResReq) annotation (Line(points={{-52,-258}, + {-44,-258},{-44,-224},{-70,-224},{-70,98}}, color={255,127,0}), Text( + string="%second", + index=1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + annotation (Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-180}, + {540,100}}), graphics={Rectangle( + extent={{-98,102},{542,-138}}, + lineColor={28,108,200}, + fillColor={244,125,35}, + fillPattern=FillPattern.Solid)}), + Diagram(coordinateSystem( + preserveAspectRatio=false, extent={{-100,-180},{540,100}}))); +end AhuWithEconomizer; + partial model PartialAhu +replaceable package MediumA = Modelica.Media.Interfaces.PartialMedium +"Medium model" annotation (choicesAllMatching=true); + + constant Integer numZon(min=2)=2 "Total number of served VAV boxes"; + + parameter Modelica.Units.SI.Volume VRoo[numZon] "Room volume per zone"; + parameter Modelica.Units.SI.Area AFlo[numZon] "Floor area per zone"; + + final parameter Modelica.Units.SI.Area ATot=sum(AFlo) +"Total floor area for all zone"; + + constant Real conv=1.2/3600 "Conversion factor for nominal mass flow rate"; + + parameter Modelica.Units.SI.HeatFlowRate QHeaAHU_flow_nominal(min=0)= + mHeaAir_flow_nominal*Buildings.Utilities.Psychrometrics.Constants.cpAir*( + THeaAirSup_nominal - THeaAirMix_nominal) +"Nominal heating heat flow rate of air handler unit coil"; + + parameter Modelica.Units.SI.HeatFlowRate QCooAHU_flow_nominal(max=0) = 1.3* + mCooAir_flow_nominal*Buildings.Utilities.Psychrometrics.Constants.cpAir*( + TCooAirSup_nominal - TCooAirMix_nominal) +"Nominal total cooling heat flow rate of air handler unit coil (negative number)"; + + parameter Modelica.Units.SI.MassFlowRate mCooVAV_flow_nominal[numZon] +"Design mass flow rate per zone for cooling" +annotation (Dialog(group="Nominal mass flow rate")); + + parameter Modelica.Units.SI.MassFlowRate mHeaVAV_flow_nominal[numZon]=0.3* + mCooVAV_flow_nominal +"Design mass flow rate per zone for heating" +annotation (Dialog(group="Nominal mass flow rate")); + + parameter Modelica.Units.SI.MassFlowRate mAir_flow_nominal= + 0.01 +"Nominal mass flow rate for fan" +annotation (Dialog(group="Nominal mass flow rate")); + parameter Modelica.Units.SI.MassFlowRate mCooAir_flow_nominal=0.7*sum( + mCooVAV_flow_nominal) +"Nominal mass flow rate for fan" +annotation (Dialog(group="Nominal mass flow rate")); + parameter Modelica.Units.SI.MassFlowRate mHeaAir_flow_nominal=0.7*sum( + mHeaVAV_flow_nominal) +"Nominal mass flow rate for fan" +annotation (Dialog(group="Nominal mass flow rate")); + + parameter Modelica.Units.SI.MassFlowRate mHeaWat_flow_nominal= + QHeaAHU_flow_nominal/Buildings.Utilities.Psychrometrics.Constants.cpWatLiq/10 +"Nominal water mass flow rate for heating coil in AHU" +annotation (Dialog(group="Nominal mass flow rate")); + parameter Modelica.Units.SI.MassFlowRate mCooWat_flow_nominal= + QCooAHU_flow_nominal/Buildings.Utilities.Psychrometrics.Constants.cpWatLiq/(-6) +"Nominal water mass flow rate for cooling coil" +annotation (Dialog(group="Nominal mass flow rate")); + + parameter Real ratOAFlo_A(final unit="m3/(s.m2)") = 0.3e-3 +"Outdoor airflow rate required per unit area"; + parameter Real ratOAFlo_P=2.5e-3 +"Outdoor airflow rate required per person"; + parameter Real ratP_A=5e-2 +"Occupant density"; + parameter Real effZ(final unit="1") = 0.8 +"Zone air distribution effectiveness (limiting value)"; + parameter Real divP(final unit="1") = 0.7 +"Occupant diversity ratio"; + + parameter Modelica.Units.SI.VolumeFlowRate VZonOA_flow_nominal[numZon]= + ( + ratOAFlo_P*ratP_A + ratOAFlo_A)*AFlo/effZ +"Zone outdoor air flow rate of each VAV box"; + + parameter Modelica.Units.SI.VolumeFlowRate Vou_flow_nominal= + (divP*ratOAFlo_P* + ratP_A + ratOAFlo_A)*sum(AFlo) "System uncorrected outdoor air flow rate"; + parameter Real effVen(final unit="1") = if divP < 0.6 then +0.88 * divP + 0.22 else 0.75 +"System ventilation efficiency"; + parameter Modelica.Units.SI.VolumeFlowRate Vot_flow_nominal=Vou_flow_nominal/ + effVen "System design outdoor air flow rate"; + + parameter Modelica.Units.SI.Temperature THeaOn=293.15 +"Heating setpoint during on" +annotation (Dialog(group="Room temperature setpoints")); + parameter Modelica.Units.SI.Temperature THeaOff=285.15 +"Heating setpoint during off" +annotation (Dialog(group="Room temperature setpoints")); + parameter Modelica.Units.SI.Temperature TCooOn=297.15 +"Cooling setpoint during on" +annotation (Dialog(group="Room temperature setpoints")); + parameter Modelica.Units.SI.Temperature TCooOff=303.15 +"Cooling setpoint during off" +annotation (Dialog(group="Room temperature setpoints")); + parameter Modelica.Units.SI.PressureDifference dpBuiStaSet(min=0) = 12 +"Building static pressure"; + parameter Real yFanMin=0.1 "Minimum fan speed"; + + parameter Modelica.Units.SI.Temperature TCooAirMix_nominal(displayUnit="degC")= + 303.15 +"Mixed air temperature during cooling nominal conditions (used to size cooling coil)" +annotation (Dialog(group="Air handler unit nominal temperatures and humidity")); + parameter Modelica.Units.SI.Temperature TCooAirSup_nominal(displayUnit="degC")= + 285.15 +"Supply air temperature during cooling nominal conditions (used to size cooling coil)" +annotation (Dialog(group="Air handler unit nominal temperatures and humidity")); + parameter Modelica.Units.SI.MassFraction wCooAirMix_nominal=0.017 +"Humidity ratio of mixed air at a nominal conditions used to size cooling coil (in kg/kg dry total)" +annotation (Dialog(group="Air handler unit nominal temperatures and humidity")); + parameter Modelica.Units.SI.Temperature TCooWatInl_nominal(displayUnit="degC")= + 279.15 +"Cooling coil nominal inlet water temperature" +annotation (Dialog(group="Air handler unit nominal temperatures and humidity")); + + parameter Modelica.Units.SI.Temperature THeaAirMix_nominal(displayUnit="degC")= + 277.15 +"Mixed air temperature during heating nominal conditions (used to size heating coil)" +annotation (Dialog(group="Air handler unit nominal temperatures and humidity")); + parameter Modelica.Units.SI.Temperature THeaAirSup_nominal(displayUnit="degC")= + 285.15 +"Supply air temperature during heating nominal conditions (used to size heating coil)" +annotation (Dialog(group="Air handler unit nominal temperatures and humidity")); + parameter Modelica.Units.SI.Temperature THeaWatInl_nominal(displayUnit="degC") +"Reheat coil nominal inlet water temperature" +annotation (Dialog(group="Air handler unit nominal temperatures and humidity")); + + parameter Boolean allowFlowReversal=false +"= false to simplify equations, assuming, but not enforcing, no flow reversal" +annotation (Evaluate=true); + + Buildings.Fluid.Movers.Preconfigured.SpeedControlled_y fanSup( + redeclare package Medium = MediumA, + m_flow_nominal=mAir_flow_nominal, + dp_nominal=780 + 10 + dpBuiStaSet, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial) + "Supply air fan" +annotation (Placement(transformation(extent={{246,-82},{266,-62}}))); + Buildings.Fluid.Sensors.VolumeFlowRate senSupFlo(redeclare package Medium = + MediumA, m_flow_nominal=mAir_flow_nominal) +"Sensor for supply fan flow rate" +annotation (Placement(transformation(extent={{346,-82},{366,-62}}))); + Buildings.Fluid.Sensors.TemperatureTwoPort TSup( + redeclare package Medium = MediumA, + m_flow_nominal=mAir_flow_nominal, + allowFlowReversal=allowFlowReversal) +annotation (Placement(transformation(extent={{276,-82},{296,-62}}))); + Buildings.Fluid.Sensors.TemperatureTwoPort TMix( + redeclare package Medium = MediumA, + m_flow_nominal=mAir_flow_nominal, + allowFlowReversal=allowFlowReversal, + transferHeat=true) "Mixed air temperature sensor" +annotation (Placement(transformation(extent={{82,-82},{102,-62}}))); + Buildings.Fluid.Sensors.VolumeFlowRate VOut1(redeclare package Medium = + MediumA, m_flow_nominal=mAir_flow_nominal) +"Outside air volume flow rate" +annotation (Placement(transformation(extent={{-68,-80},{-48,-60}}))); + Buildings.Fluid.Actuators.Dampers.Exponential + damRet( + redeclare package Medium = MediumA, + m_flow_nominal=mAir_flow_nominal, + from_dp=false, + riseTime=15, + dpDamper_nominal=5, + dpFixed_nominal=5) + "Return air damper" annotation (Placement(transformation( + origin={52,-6}, + extent={{10,-10},{-10,10}}, + rotation=90))); + Buildings.Fluid.Actuators.Dampers.Exponential + damOut( + redeclare package Medium = MediumA, + m_flow_nominal=mAir_flow_nominal, + from_dp=false, + riseTime=15, + dpDamper_nominal=5, + dpFixed_nominal=5) + "Outdoor air damper" +annotation (Placement(transformation(extent={{2,-80},{22,-60}}))); + Buildings.Fluid.FixedResistances.PressureDrop + dpSupDuc( + m_flow_nominal=mAir_flow_nominal, + redeclare package Medium = MediumA, + allowFlowReversal=allowFlowReversal, + dp_nominal=200 + 200 + 100 + 40) + "Pressure drop for supply duct" +annotation (Placement(transformation(extent={{196,-82},{216,-62}}))); + Buildings.Fluid.FixedResistances.Junction + splRetOut( + redeclare package Medium = MediumA, + tau=15, + m_flow_nominal=mAir_flow_nominal*{1,1,1}, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + dp_nominal(each displayUnit="Pa") = {0,0,0}, + portFlowDirection_1=if allowFlowReversal then Modelica.Fluid.Types.PortFlowDirection.Bidirectional + else Modelica.Fluid.Types.PortFlowDirection.Entering, + portFlowDirection_2=if allowFlowReversal then Modelica.Fluid.Types.PortFlowDirection.Bidirectional + else Modelica.Fluid.Types.PortFlowDirection.Leaving, + portFlowDirection_3=if allowFlowReversal then Modelica.Fluid.Types.PortFlowDirection.Bidirectional + else Modelica.Fluid.Types.PortFlowDirection.Entering, + linearized=true) +"Flow splitter" +annotation (Placement(transformation( + extent={{-10,10},{10,-10}}, + rotation=0, + origin={52,-70}))); + Buildings.Fluid.Actuators.Dampers.Exponential damExh( + from_dp=false, + riseTime=15, + dpFixed_nominal=5, + redeclare package Medium = MediumA, + m_flow_nominal=mAir_flow_nominal, + dpDamper_nominal=5) + "Exhaust air damper" +annotation (Placement(transformation(extent={{-16,-14},{-36,6}}))); + Buildings.Fluid.FixedResistances.PressureDrop dpRetDuc( + m_flow_nominal=mAir_flow_nominal, + redeclare package Medium = MediumA, + allowFlowReversal=allowFlowReversal, + dp_nominal=40) + "Pressure drop for return duct" +annotation (Placement(transformation(extent={{368,0},{348,20}}))); + Buildings.Fluid.Sensors.VolumeFlowRate senRetFlo(redeclare package Medium = + MediumA, m_flow_nominal=mAir_flow_nominal) +"Sensor for return fan flow rate" +annotation (Placement(transformation(extent={{234,0},{214,20}}))); + Buildings.Fluid.Sensors.TemperatureTwoPort TRet( + redeclare package Medium = MediumA, + m_flow_nominal=mAir_flow_nominal, + allowFlowReversal=allowFlowReversal) + "Return air temperature sensor" +annotation (Placement(transformation(extent={{138,0},{118,20}}))); + Buildings.Fluid.Movers.Preconfigured.SpeedControlled_y fanSup1( + redeclare package Medium = MediumA, + m_flow_nominal=mAir_flow_nominal, + dp_nominal=780 + 10 + dpBuiStaSet, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial) + "Supply air fan" +annotation (Placement(transformation(extent={{278,0},{258,20}}))); + Modelica.Fluid.Interfaces.FluidPort_b port_b(redeclare final package Medium = + MediumA) +"Fluid connector b (positive design flow direction is from port_a to port_b)" +annotation (Placement(transformation(extent={{556,-5},{524,25}}), + iconTransformation(extent={{552,11},{532,29}}))); + Modelica.Fluid.Interfaces.FluidPort_a port_a(redeclare final package Medium = + MediumA) +"Fluid connector a (positive design flow direction is from port_a to port_b)" +annotation (Placement(transformation(extent={{522,-90},{556,-58}}), + iconTransformation(extent={{532,-69},{552,-51}}))); + Modelica.Fluid.Interfaces.FluidPorts_b ports[2](redeclare each package Medium = + MediumA, each m_flow(max=if flowDirection == Modelica.Fluid.Types.PortFlowDirection.Leaving + then 0 else +Modelica.Constants.inf, min=if flowDirection == + Modelica.Fluid.Types.PortFlowDirection.Entering then 0 else -Modelica.Constants.inf)) +"Fluid ports" +annotation (Placement(transformation(extent={{-110,26},{-90,-54}}), + iconTransformation(extent={{-110,26},{-90,-54}}))); + Buildings.Fluid.Sensors.RelativePressure dpDisSupFan(redeclare package Medium = + MediumA) "Supply fan static discharge pressure" annotation (Placement( + transformation( + extent={{-18,22},{18,-22}}, + rotation=90, + origin={404,-28}))); + Buildings.Fluid.Sensors.TemperatureTwoPort TOut( +redeclare package Medium = MediumA, +m_flow_nominal=mAir_flow_nominal, +allowFlowReversal=allowFlowReversal, +transferHeat=true) "Mixed air temperature sensor" +annotation (Placement(transformation(extent={{-32,-80},{-12,-60}}))); + +protected + parameter Modelica.Fluid.Types.PortFlowDirection flowDirection=Modelica.Fluid.Types.PortFlowDirection.Bidirectional +"Allowed flow direction" annotation (Evaluate=true, Dialog(tab="Advanced")); +equation + connect( + TSup.port_a,fanSup. port_b) annotation (Line( + points={{276,-72},{266,-72}}, + color={0,127,255}, + smooth=Smooth.None, + thickness=0.5)); + connect( + TSup.port_b,senSupFlo. port_a) +annotation (Line(points={{296,-72},{346,-72}}, color={0,127,255})); + connect( + dpSupDuc.port_b,fanSup. port_a) +annotation (Line(points={{216,-72},{246,-72}}, color={0,127,255})); + connect( + damOut.port_b,splRetOut. port_1) +annotation (Line(points={{22,-70},{42,-70}}, color={0,127,255})); + connect( + splRetOut.port_2,TMix. port_a) +annotation (Line(points={{62,-70},{72,-70},{72,-72},{82,-72}}, + color={0,127,255})); + connect( + damRet.port_b,splRetOut. port_3) annotation (Line(points={{52,-16},{52, + -60}}, color={0,127,255})); +connect(dpSupDuc.port_a, TMix.port_b) annotation (Line(points={{196,-72},{102, + -72}}, color={0,127,255})); + connect( + senRetFlo.port_b,TRet. port_a) annotation (Line(points={{214,10},{138, + 10}}, color={0,127,255})); +connect(TRet.port_b, damRet.port_a) annotation (Line(points={{118,10},{52,10}, + {52,4}}, color={0,127,255})); +connect(TRet.port_b, damExh.port_a) annotation (Line(points={{118,10},{-6,10}, + {-6,-4},{-16,-4}}, color= + {0,127,255})); +connect(senRetFlo.port_a, fanSup1.port_b) + annotation (Line(points={{234,10},{258,10}}, color={0,127,255})); +connect(fanSup1.port_a, dpRetDuc.port_b) + annotation (Line(points={{278,10},{348,10}}, color={0,127,255})); + connect( + senSupFlo.port_b, port_a) annotation (Line(points={{366,-72},{516,-72}, + {516,-74},{539,-74}}, color={0,127,255})); + connect( + dpRetDuc.port_a, port_b) +annotation (Line(points={{368,10},{540,10}}, color={0,127,255})); + connect( + damExh.port_b, ports[1]) annotation (Line(points={{-36,-4},{-84,-4},{-84, + 6},{-100,6}}, color={0,127,255})); + connect( + VOut1.port_a, ports[2]) annotation (Line(points={{-68,-70},{-84,-70},{ + -84,-34},{-100,-34}}, color={0,127,255})); + connect( + dpDisSupFan.port_a, port_a) annotation (Line(points={{404,-46},{404,-72}, + {516,-72},{516,-74},{539,-74}}, color={0,127,255})); + connect( + VOut1.port_a, dpDisSupFan.port_b) annotation (Line(points={{-68,-70},{ + -84,-70},{-84,-26},{376,-26},{376,0},{404,0},{404,-10}}, color={0,127, + 255})); + connect( + VOut1.port_b, TOut.port_a) +annotation (Line(points={{-48,-70},{-32,-70}}, color={0,127,255})); + connect( + TOut.port_b, damOut.port_a) +annotation (Line(points={{-12,-70},{2,-70}}, color={0,127,255})); +annotation (Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-180}, + {540,100}}), graphics={Rectangle( + extent={{-98,102},{542,-138}}, + lineColor={28,108,200}, + fillColor={244,125,35}, + fillPattern=FillPattern.Solid)}), + Diagram(coordinateSystem( + preserveAspectRatio=false, extent={{-100,-180},{540,100}}))); +end PartialAhu; +partial model PartialPump + replaceable package Medium = Modelica.Media.Interfaces.PartialMedium + "Medium model for air" annotation (choicesAllMatching=true); + + parameter Modelica.Units.SI.MassFlowRate m_flow_nominal + "Nominal mass flow rate of radiator loop"; + parameter Modelica.Units.SI.PressureDifference dp_nominal + "Pressure difference of loop"; + + Buildings.Fluid.Movers.Preconfigured.SpeedControlled_y pumRad( + redeclare package Medium = Medium, + m_flow_nominal=m_flow_nominal, + dp_nominal=dp_nominal, + energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState) + "Pump that serves the radiators" annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-4,0}))); + Buildings.Fluid.Sensors.RelativePressure dpSen(redeclare package Medium = + Medium) + annotation (Placement(transformation(extent={{-10,-10},{10,10}}, + rotation=180, + origin={-6,32}))); + Buildings.Fluid.Sensors.TemperatureTwoPort temSup(redeclare package Medium = + Medium, m_flow_nominal=m_flow_nominal) + annotation (Placement(transformation(extent={{-10,-10},{10,10}}, + rotation=0, + origin={42,0}))); + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter + gain(k=1/dp_nominal) + "Gain used to normalize pressure measurement signal" + annotation (Placement(transformation(extent={{10,-10},{-10,10}}, + rotation=-90, + origin={-6,76}))); + extends Buildings.Fluid.Interfaces.PartialTwoPort; +equation + connect(pumRad.port_b,dpSen. port_a) + annotation (Line( + points={{6,0},{14,0},{14,32},{4,32}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(dpSen.port_b,pumRad. port_a) + annotation (Line( + points={{-16,32},{-22,32},{-22,0},{-14,0}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(pumRad.port_b,temSup. port_a) annotation (Line( + points={{6,0},{32,0}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(gain.u,dpSen. p_rel) annotation (Line( + points={{-6,64},{-6,41}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(port_a, pumRad.port_a) + annotation (Line(points={{-100,0},{-14,0}}, color={0,127,255})); + connect(temSup.port_b, port_b) + annotation (Line(points={{52,0},{100,0}}, color={0,127,255})); + annotation (Icon(coordinateSystem(preserveAspectRatio=false), graphics={ + Rectangle( + extent={{-100,16},{100,-16}}, + lineColor={0,0,0}, + fillColor={0,127,255}, + fillPattern=FillPattern.HorizontalCylinder), + Ellipse( + extent={{-58,58},{58,-58}}, + lineColor={0,0,0}, + fillPattern=FillPattern.Sphere, + fillColor={0,100,199}), + Polygon( + points={{0,50},{0,-50},{54,0},{0,50}}, + lineColor={0,0,0}, + pattern=LinePattern.None, + fillPattern=FillPattern.HorizontalCylinder, + fillColor={255,255,255}), + Ellipse( + extent={{4,16},{36,-16}}, + lineColor={0,0,0}, + fillPattern=FillPattern.Sphere, + visible=energyDynamics <> Modelica.Fluid.Types.Dynamics.SteadyState, + fillColor={0,100,199})}), Diagram(coordinateSystem( + preserveAspectRatio=false))); +end PartialPump; + + + partial model PartialVAVBox + "Supply box of a VAV system with a hot water reheat coil" + extends + Modelica.Blocks.Icons.Block; + replaceable package MediumA = Modelica.Media.Interfaces.PartialMedium + "Medium model for air" annotation (choicesAllMatching=true); + + + parameter Boolean allowFlowReversal=true +"= false to simplify equations, assuming, but not enforcing, no flow reversal"; + parameter Modelica.Units.SI.MassFlowRate mCooAir_flow_nominal +"Nominal air mass flow rate from cooling sizing calculations"; + parameter Modelica.Units.SI.MassFlowRate mHeaAir_flow_nominal +"Nominal air mass flow rate from heating sizing calculations"; + final parameter Modelica.Units.SI.MassFlowRate mHeaWat_flow_nominal= + QHea_flow_nominal/(cpWatLiq*(THeaWatInl_nominal - THeaWatOut_nominal)) +"Nominal mass flow rate of hot water to reheat coil"; + parameter Modelica.Units.SI.Volume VRoo "Room volume"; + parameter Modelica.Units.SI.Temperature THeaWatInl_nominal(start=55 + 273.15, + displayUnit="degC") "Reheat coil nominal inlet water temperature"; + parameter Modelica.Units.SI.Temperature THeaWatOut_nominal(start= + THeaWatInl_nominal - 10, displayUnit="degC") +"Reheat coil nominal outlet water temperature"; + parameter Modelica.Units.SI.Temperature THeaAirInl_nominal(start=12 + 273.15, + displayUnit="degC") +"Inlet air nominal temperature into VAV box during heating"; + parameter Modelica.Units.SI.Temperature THeaAirDis_nominal(start=28 + 273.15, + displayUnit="degC") +"Discharge air temperature from VAV box during heating"; + parameter Modelica.Units.SI.HeatFlowRate QHea_flow_nominal= + mHeaAir_flow_nominal * cpAir * (THeaAirDis_nominal-THeaAirInl_nominal) +"Nominal heating heat flow rate"; + Modelica.Fluid.Interfaces.FluidPort_a port_aAir( +redeclare package Medium=MediumA) +"Fluid connector a1 (positive design flow direction is from port_a1 to port_b1)" +annotation (Placement(transformation(extent={{-10,-110},{10,-90}}), + iconTransformation(extent={{-10,-110},{10,-90}}))); + Modelica.Fluid.Interfaces.FluidPort_a port_bAir( +redeclare package Medium=MediumA) +"Fluid connector b (positive design flow direction is from port_a1 to port_b1)" +annotation (Placement(transformation(extent={{-10,90},{10,110}}), + iconTransformation(extent={{-10,90},{10,110}}))); + Buildings.Fluid.Actuators.Dampers.Exponential vav( +redeclare package Medium = MediumA, +m_flow_nominal=mCooAir_flow_nominal, +dpDamper_nominal=20, +allowFlowReversal=allowFlowReversal, +dpFixed_nominal=130) "VAV box for room" annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=90, + origin={0,10}))); + + Buildings.Fluid.Sensors.TemperatureTwoPort senTem( +redeclare package Medium = MediumA, +initType=Modelica.Blocks.Types.Init.InitialState, +m_flow_nominal=mCooAir_flow_nominal, +allowFlowReversal=allowFlowReversal) "Supply air temperature sensor" +annotation (Placement(transformation( + extent={{-10,10},{10,-10}}, + rotation=90, + origin={0,40}))); + Buildings.Fluid.Sensors.VolumeFlowRate senVolFlo( +redeclare package Medium = MediumA, +initType=Modelica.Blocks.Types.Init.InitialState, +m_flow_nominal=mCooAir_flow_nominal, +allowFlowReversal=allowFlowReversal) +"Supply air volumetric flow rate sensor" annotation (Placement( + transformation( + extent={{-10,10},{10,-10}}, + rotation=90, + origin={0,80}))); +protected + constant Modelica.Units.SI.SpecificHeatCapacity cpAir=Buildings.Utilities.Psychrometrics.Constants.cpAir +"Air specific heat capacity"; + constant Modelica.Units.SI.SpecificHeatCapacity cpWatLiq=Buildings.Utilities.Psychrometrics.Constants.cpWatLiq +"Water specific heat capacity"; +equation + connect( + vav.port_b, senTem.port_a) annotation (Line(points={{6.66134e-16,20},{ + 0,20},{0,30},{-4.44089e-16,30}}, color={0,127,255})); + connect( + senTem.port_b, senVolFlo.port_a) +annotation (Line(points={{0,50},{0,70},{-6.66134e-16,70}}, + color={0,127,255})); + connect( + senVolFlo.port_b, port_bAir) +annotation (Line(points={{4.44089e-16,90},{0,90},{0,100}}, + color={0,127,255})); + connect( + vav.port_a, port_aAir) +annotation (Line(points={{-5.55112e-16,0},{0,-100}}, color={0,127,255})); + annotation (Icon( +graphics={ + Rectangle( + extent={{-108.07,-16.1286},{93.93,-20.1286}}, + lineColor={0,0,0}, + fillPattern=FillPattern.HorizontalCylinder, + fillColor={0,127,255}, + origin={-18.1286,6.07}, + rotation=90), + Rectangle( + extent={{100.8,-22},{128.8,-44}}, + lineColor={0,0,0}, + fillPattern=FillPattern.HorizontalCylinder, + fillColor={192,192,192}, + origin={-32,-76.8}, + rotation=90), + Rectangle( + extent={{102.2,-11.6667},{130.2,-25.6667}}, + lineColor={0,0,0}, + fillPattern=FillPattern.HorizontalCylinder, + fillColor={0,127,255}, + origin={-17.6667,-78.2}, + rotation=90), + Polygon( + points={{-12,32},{16,48},{16,46},{-12,30},{-12,32}}, + pattern=LinePattern.None, + smooth=Smooth.None, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + lineColor={0,0,0}), + Line(points={{-100,80},{-38,80},{-38,38},{-10,38}}, color={255,255,0}, + thickness=1)})); +end PartialVAVBox; + model PumpSystem_002 +extends house.Common.Fluid.Ventilation.PartialPump; +Controls.BaseClasses.DataBus dataBus + annotation (Placement(transformation( + extent={{-120,-18},{-80,22}}), iconTransformation(extent={{-120,62},{-78,98}}))); +equation +connect(dataBus.ySystem_002, pumRad.y); +connect(dataBus.y_gainSystem_002, gain.y); +connect(dataBus.TPump_control, temSup.T); + end PumpSystem_002; + + + end Ventilation; + end Fluid; + + package HeatTransfer + package IdealHeatingSystem + model IdealHeatEmission + parameter Real frad=0.3 "radiative fraction"; + parameter Real power=2000 "heating power"; + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a heatPortCon + "Heat port for convective heat transfer with room air temperature" + annotation (Placement(transformation(extent={{-30,62},{-10,82}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a heatPortRad + "Heat port for radiative heat transfer with room radiation temperature" + annotation (Placement(transformation(extent={{10,62},{30,82}}))); + Modelica.Blocks.Interfaces.RealInput y + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + Modelica.Blocks.Math.Gain HeatingPower(k=power) + annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); + Modelica.Blocks.Math.Gain convectiveGain(k=1 - frad) + annotation (Placement(transformation(extent={{2,-60},{22,-40}}))); + Modelica.Blocks.Math.Gain radiativeGain(k=frad) + annotation (Placement(transformation(extent={{2,-90},{22,-70}}))); + Modelica.Blocks.Nonlinear.Limiter limiter(uMax=1, uMin=0) + annotation (Placement(transformation(extent={{-86,-10},{-66,10}}))); + protected + Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow preSumCon(final + alpha=0) + "Heat input into radiator from convective heat transfer" + annotation (Placement(transformation(extent={{52,-60},{72,-40}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow preSumRad(final + alpha=0) + "Heat input into radiator from radiative heat transfer" + annotation (Placement(transformation(extent={{52,-90},{72,-70}}))); + equation + + connect(preSumCon.port,heatPortCon) annotation (Line( + points={{72,-50},{80,-50},{80,40},{-20,40},{-20,72}}, + color={191,0,0})); + connect(preSumRad.port,heatPortRad) annotation (Line( + points={{72,-80},{86,-80},{86,50},{20,50},{20,72}}, + color={191,0,0})); + connect(preSumCon.Q_flow, convectiveGain.y) + annotation (Line(points={{52,-50},{23,-50}}, color={0,0,127})); + connect(radiativeGain.y, preSumRad.Q_flow) + annotation (Line(points={{23,-80},{52,-80}}, color={0,0,127})); + connect(HeatingPower.y, convectiveGain.u) annotation (Line(points={{-19, + 0},{-6,0},{-6,-50},{0,-50}}, color={0,0,127})); + connect(HeatingPower.y, radiativeGain.u) annotation (Line(points={{-19, + 0},{-6,0},{-6,-80},{0,-80}}, color={0,0,127})); + connect(y, limiter.u) + annotation (Line(points={{-120,0},{-88,0}}, color={0,0,127})); + connect(limiter.y, HeatingPower.u) + annotation (Line(points={{-65,0},{-42,0}}, color={0,0,127})); + annotation (Icon(graphics={ + Ellipse( + extent={{-20,20},{20,-22}}, + fillColor={127,0,0}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Ellipse( + extent={{-20,20},{20,-22}}, + fillColor={127,0,0}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Rectangle( + extent={{-80,58},{80,-62}}, + lineColor={0,0,0}, + fillColor={127,0,0}, + fillPattern=FillPattern.Solid), + Line( + points={{-66,28},{66,28}}), + Line( + points={{-66,0},{66,0}}), + Line( + points={{-66,-32},{66,-32}}), + Line( + points={{-66,58},{-66,-62}}), + Line( + points={{66,58},{66,-62}})})); + end IdealHeatEmission; + end IdealHeatingSystem; + end HeatTransfer; + annotation (uses(Buildings(version = "11.0.0"), Modelica(version = "4.0.0"), + IDEAS(version="3.0.0")), + Icon(graphics={ Rectangle(lineColor = {200, 200, 200}, fillColor = {248, 248, 248}, + fillPattern = FillPattern.HorizontalCylinder, extent = {{-100, -100}, {100, 100}}, radius = 25), Rectangle(lineColor = {128, 128, 128}, extent = {{-100, -100}, {100, 100}}, radius = 25)})); +end Common; + +model building + parameter Buildings.HeatTransfer.Data.OpaqueConstructions.Generic + construction_001( + final nLay=3, + absIR_a=0.9, + absIR_b=0.9, + absSol_a=0.6, + absSol_b=0.6, + material={Buildings.HeatTransfer.Data.Solids.Generic( + x=0.1, + k=0.035, + c=1000.0, + d=2000.0),Buildings.HeatTransfer.Data.Solids.Generic( + x=0.1, + k=0.035, + c=1000.0, + d=2000.0),Buildings.HeatTransfer.Data.Solids.Generic( + x=0.1, + k=0.035, + c=1000.0, + d=2000.0) }, + roughness_a=Buildings.HeatTransfer.Types.SurfaceRoughness.Rough) + annotation (Placement(transformation(extent={{20,84},{34,98}}))); parameter Buildings.HeatTransfer.Data.OpaqueConstructions.Generic + internal_wall( + final nLay=1, + absIR_a=0.9, + absIR_b=0.9, + absSol_a=0.6, + absSol_b=0.6, + material={Buildings.HeatTransfer.Data.Solids.Generic( + x=0.2, + k=0.89, + c=790.0, + d=1920.0) }, + roughness_a=Buildings.HeatTransfer.Types.SurfaceRoughness.Rough) + annotation (Placement(transformation(extent={{20,84},{34,98}}))); + + + +package Medium = Buildings.Media.Air(extraPropertiesNames={"CO2"}) "Medium model"; +package MediumW = Buildings.Media.Water "Medium model"; +parameter Integer nRoo = 2 "Number of rooms"; + parameter Modelica.Units.SI.Volume VRoo=4*6*3 "Volume of one room"; + parameter Modelica.Units.SI.Power Q_flow_nominal=2200 + "Nominal power of heating plant"; + // Due to the night setback, in which the radiator do not provide heat input into the room, + // we scale the design power of the radiator loop + parameter Real scaFacRad = 1.5 + "Scaling factor to scale the power (and mass flow rate) of the radiator loop"; + parameter Modelica.Units.SI.Temperature TSup_nominal=273.15 + 50 + 5 + "Nominal supply temperature for radiators"; + parameter Modelica.Units.SI.Temperature TRet_nominal=273.15 + 40 + 5 + "Nominal return temperature for radiators"; + parameter Modelica.Units.SI.Temperature dTRad_nominal=TSup_nominal - + TRet_nominal "Nominal temperature difference for radiator loop"; + parameter Modelica.Units.SI.Temperature dTBoi_nominal=20 + "Nominal temperature difference for boiler loop"; + parameter Modelica.Units.SI.MassFlowRate mRad_flow_nominal=scaFacRad* + Q_flow_nominal/dTRad_nominal/4200 + "Nominal mass flow rate of radiator loop"; + parameter Modelica.Units.SI.MassFlowRate mBoi_flow_nominal=scaFacRad* + Q_flow_nominal/dTBoi_nominal/4200 "Nominal mass flow rate of boiler loop"; + parameter Modelica.Units.SI.PressureDifference dpPip_nominal=10000 + "Pressure difference of pipe (without valve)"; + parameter Modelica.Units.SI.PressureDifference dpVal_nominal=6000 + "Pressure difference of valve"; + parameter Modelica.Units.SI.PressureDifference dpRoo_nominal=6000 + "Pressure difference of flow leg that serves a room"; + parameter Modelica.Units.SI.PressureDifference dpThrWayVal_nominal=6000 + "Pressure difference of three-way valve"; + parameter Modelica.Units.SI.PressureDifference dp_nominal=dpPip_nominal + + dpVal_nominal + dpRoo_nominal + dpThrWayVal_nominal + "Pressure difference of loop"; + + + Buildings.ThermalZones.Detailed.MixedAir schema_space_001( + redeclare package Medium = Medium, + mSenFac=1.0, + AFlo=100.0, + hRoo=2.5, + linearizeRadiation=true, + m_flow_nominal=0.01, + T_start=294.15 +,nPorts = 3, nConExt=3, + datConExt( + layers={ construction_001, construction_001, construction_001 }, + A={ 100.0, 100.0, 200.0 }, + til={Buildings.Types.Tilt.Wall,Buildings.Types.Tilt.Wall,Buildings.Types.Tilt.Wall}, + azi={ 180.0, 180.0, 180.0 }), + nSurBou=2, + surBou( + A={ 10.0, 10.0 }, + til={Buildings.Types.Tilt.Wall,Buildings.Types.Tilt.Wall}), + nConBou=0, nConExtWin=0, nConPar=0, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial) annotation ( + Placement(transformation(origin = { 0, 0 }, + extent = {{-20, -20}, {20, 20}} +))); + Buildings.Fluid.HeatExchangers.Radiators. + RadiatorEN442_2 system_007( + nEle=1, + fraRad=0.3, + Q_flow_nominal=2000.0, + T_a_nominal=363.15, + T_b_nominal=353.15, + TAir_nominal=293.15, + TRad_nominal=293.15, + n=1.9, + deltaM=0.01, + from_dp=false, + dp_nominal=1000.0, + linearized=false, + VWat=0.116, + mDry=52.6 +, + redeclare package Medium = MediumW, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial) "Radiator" annotation ( + Placement(transformation(origin = { 0, -75 }, + extent = {{-10, -10}, {10, 10}} +))); + Buildings.Fluid.Actuators.Valves.TwoWayEqualPercentage + system_008( + R=7.0, + delta0=0.01, + dpFixed_nominal=6000.0, + l=0.0001, + from_dp=true, + linearized=false, + deltaM=0.02, + m_flow_nominal=0.01, + dpValve_nominal=6000.0 +, + redeclare package Medium = MediumW + + ) "Radiator valve" annotation ( + Placement(transformation(origin = { 30, -75 }, + extent = {{-10, -10}, {10, 10}} +))); + house.Common.Controls.ventilation.EmissionControlEmissioncontrol_8 + emissioncontrol_8 annotation ( + Placement(transformation(origin = { -20.880543128961904, 180.02509214836158 }, + extent = {{-10, -10}, {10, 10}} +))); + house.Common.Controls.ventilation.OccupancyOccupancy_11 + occupancy_11( occupancy=3600*{7, 19}, + gain=[35; 70; 30], + k=1/6/4 +) annotation ( + Placement(transformation(origin = { -50, 0 }, + extent = {{-10, -10}, {10, 10}} +))); + Buildings.ThermalZones.Detailed.MixedAir schema_space_002( + redeclare package Medium = Medium, + mSenFac=1.0, + AFlo=100.0, + hRoo=2.5, + linearizeRadiation=true, + m_flow_nominal=0.01, + T_start=294.15 +,nPorts = 3, nConExt=3, + datConExt( + layers={ construction_001, construction_001, construction_001 }, + A={ 100.0, 100.0, 200.0 }, + til={Buildings.Types.Tilt.Wall,Buildings.Types.Tilt.Wall,Buildings.Types.Tilt.Wall}, + azi={ 180.0, 180.0, 180.0 }), + nSurBou=2, + surBou( + A={ 10.0, 10.0 }, + til={Buildings.Types.Tilt.Wall,Buildings.Types.Tilt.Wall}), + nConBou=0, nConExtWin=0, nConPar=0, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial) annotation ( + Placement(transformation(origin = { 250, 150 }, + extent = {{-20, -20}, {20, 20}} +))); + Buildings.Fluid.HeatExchangers.Radiators. + RadiatorEN442_2 system_009( + nEle=1, + fraRad=0.3, + Q_flow_nominal=2000.0, + T_a_nominal=363.15, + T_b_nominal=353.15, + TAir_nominal=293.15, + TRad_nominal=293.15, + n=1.9, + deltaM=0.01, + from_dp=false, + dp_nominal=1000.0, + linearized=false, + VWat=0.116, + mDry=52.6 +, + redeclare package Medium = MediumW, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial) "Radiator" annotation ( + Placement(transformation(origin = { 250, 75 }, + extent = {{-10, -10}, {10, 10}} +))); + Buildings.Fluid.Actuators.Valves.TwoWayEqualPercentage + system_010( + R=7.0, + delta0=0.01, + dpFixed_nominal=6000.0, + l=0.0001, + from_dp=true, + linearized=false, + deltaM=0.02, + m_flow_nominal=0.01, + dpValve_nominal=6000.0 +, + redeclare package Medium = MediumW + + ) "Radiator valve" annotation ( + Placement(transformation(origin = { 280, 75 }, + extent = {{-10, -10}, {10, 10}} +))); + house.Common.Controls.ventilation.EmissionControlEmissioncontrol_9 + emissioncontrol_9 annotation ( + Placement(transformation(origin = { 146.18140134108032, -147.21373806192437 }, + extent = {{-10, -10}, {10, 10}} +))); + house.Common.Controls.ventilation.OccupancyOccupancy_12 + occupancy_12( occupancy=3600*{7, 19}, + gain=[35; 70; 30], + k=1/6/4 +) annotation ( + Placement(transformation(origin = { 200, 150 }, + extent = {{-10, -10}, {10, 10}} +))); + Buildings.ThermalZones.Detailed.MixedAir schema_space_003( + redeclare package Medium = Medium, + mSenFac=1.0, + AFlo=100.0, + hRoo=2.5, + linearizeRadiation=true, + m_flow_nominal=0.01, + T_start=294.15 +,nPorts = 3, nConExt=3, + datConExt( + layers={ construction_001, construction_001, construction_001 }, + A={ 100.0, 100.0, 200.0 }, + til={Buildings.Types.Tilt.Wall,Buildings.Types.Tilt.Wall,Buildings.Types.Tilt.Wall}, + azi={ 180.0, 180.0, 180.0 }), + nSurBou=2, + surBou( + A={ 10.0, 10.0 }, + til={Buildings.Types.Tilt.Wall,Buildings.Types.Tilt.Wall}), + nConBou=0, nConExtWin=0, nConPar=0, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial) annotation ( + Placement(transformation(origin = { 500, 150 }, + extent = {{-20, -20}, {20, 20}} +))); + Buildings.Fluid.HeatExchangers.Radiators. + RadiatorEN442_2 system_011( + nEle=1, + fraRad=0.3, + Q_flow_nominal=2000.0, + T_a_nominal=363.15, + T_b_nominal=353.15, + TAir_nominal=293.15, + TRad_nominal=293.15, + n=1.9, + deltaM=0.01, + from_dp=false, + dp_nominal=1000.0, + linearized=false, + VWat=0.116, + mDry=52.6 +, + redeclare package Medium = MediumW, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial) "Radiator" annotation ( + Placement(transformation(origin = { 500, 75 }, + extent = {{-10, -10}, {10, 10}} +))); + Buildings.Fluid.Actuators.Valves.TwoWayEqualPercentage + system_012( + R=7.0, + delta0=0.01, + dpFixed_nominal=6000.0, + l=0.0001, + from_dp=true, + linearized=false, + deltaM=0.02, + m_flow_nominal=0.01, + dpValve_nominal=6000.0 +, + redeclare package Medium = MediumW + + ) "Radiator valve" annotation ( + Placement(transformation(origin = { 530, 75 }, + extent = {{-10, -10}, {10, 10}} +))); + house.Common.Controls.ventilation.EmissionControlEmissioncontrol_10 + emissioncontrol_10 annotation ( + Placement(transformation(origin = { 153.79997523692796, -78.6740364035971 }, + extent = {{-10, -10}, {10, 10}} +))); + house.Common.Controls.ventilation.OccupancyOccupancy_13 + occupancy_13( occupancy=3600*{7, 19}, + gain=[35; 70; 30], + k=1/6/4 +) annotation ( + Placement(transformation(origin = { 450, 150 }, + extent = {{-10, -10}, {10, 10}} +))); + Buildings.HeatTransfer.Conduction.MultiLayer + internal_schema_space_001_schema_space_002(A = + 10, layers = + internal_wall, stateAtSurface_a = true, stateAtSurface_b = true) + "Partition wall between the two + rooms" annotation ( + Placement(transformation(origin = { 125.0, 0 }, + extent = {{-10, -10}, {10, 10}} +))); + Buildings.HeatTransfer.Conduction.MultiLayer + internal_schema_space_001_schema_space_003(A = + 10, layers = + internal_wall, stateAtSurface_a = true, stateAtSurface_b = true) + "Partition wall between the two + rooms" annotation ( + Placement(transformation(origin = { 250.0, 0 }, + extent = {{-10, -10}, {10, 10}} +))); + Buildings.HeatTransfer.Conduction.MultiLayer + internal_schema_space_002_schema_space_003(A = + 10, layers = + internal_wall, stateAtSurface_a = true, stateAtSurface_b = true) + "Partition wall between the two + rooms" annotation ( + Placement(transformation(origin = { 375.0, 150 }, + extent = {{-10, -10}, {10, 10}} +))); + Buildings.BoundaryConditions.WeatherData.ReaderTMY3 + weather_0(filNam=Modelica.Utilities.Files.loadResource + ("modelica://Buildings/Resources/weatherdata/USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.mos")) + annotation ( + Placement(transformation(origin = { -100, 200 }, + extent = {{-10, -10}, {10, 10}} +))); + house.Common. + Fluid.Ventilation.PumpSystem_002 + system_002( + m_flow_nominal=0.008, + dp_nominal=10000 +, + redeclare package Medium = MediumW + + ) annotation ( + Placement(transformation(origin = { -51.38391148010123, 188.86076764196187 }, + extent = {{-10, -10}, {10, 10}} +))); + house.Common.Controls.ventilation.CollectorControlPump_control + pump_control annotation ( + Placement(transformation(origin = { 7.939712175191028, 194.6034290862168 }, + extent = {{-10, -10}, {10, 10}} +))); + Buildings.Fluid.Actuators.Valves.ThreeWayEqualPercentageLinear + system_004( + redeclare package Medium = MediumW, + use_inputFilter=false, + R=50, + delta0=0.01, + dpFixed_nominal={100,0}, + fraK=0.7, + l={0.01,0.01}, + deltaM=0.02, + linearized={false, false}, + m_flow_nominal=0.0078, + dpValve_nominal=6000 +, + energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState) "Three-wayvalve" annotation ( + Placement(transformation(origin = { -100, -175 }, + extent = {{-10, -10}, {10, 10}} +))); + house.Common.Controls.ventilation. + ThreeWayValveControlThreewayvalvecontrol_0 + threewayvalvecontrol_0 annotation ( + Placement(transformation(origin = { -150, -175 }, + extent = {{-10, -10}, {10, 10}} +))); + Buildings.Fluid.Actuators.Valves.ThreeWayEqualPercentageLinear + system_006( + redeclare package Medium = MediumW, + use_inputFilter=false, + R=50, + delta0=0.01, + dpFixed_nominal={100,0}, + fraK=0.7, + l={0.01,0.01}, + deltaM=0.02, + linearized={false, false}, + m_flow_nominal=0.0078, + dpValve_nominal=6000 +, + energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState) "Three-wayvalve" annotation ( + Placement(transformation(origin = { 400, -25 }, + extent = {{-10, -10}, {10, 10}} +))); + house.Common.Controls.ventilation. + ThreeWayValveControlThreewayvalvecontrol_1 + threewayvalvecontrol_1 annotation ( + Placement(transformation(origin = { 350, -25 }, + extent = {{-10, -10}, {10, 10}} +))); + Buildings.Fluid.FixedResistances.Junction system_003 ( + m_flow_nominal=0.008*{1, -1, -1}, + dp_nominal={10000,-1,-1}, + deltaM=0.3, + linearized=false +, + redeclare package Medium = MediumW, + energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState) + "Flow splitter" annotation ( + Placement(transformation(origin = { 130, -175 }, + extent = {{-10, -10}, {10, 10}} +))); + house.Common.Fluid.Boilers. +BoilerWithStorageSystem_001 system_001( + a={0.9}, + effCur=Buildings.Fluid.Types.EfficiencyCurves.Constant, + T_nominal=353.15, + fue=Buildings.Fluid.Data.Fuels.HeatingOilLowerHeatingValue(), + Q_flow_nominal=2000, + dp_nominal=5000, + linearizeFlowResistance=false, + deltaM=0.1, + show_T=false, + VTan=0.2, + hTan=2, + nSeg=4, + dIns=0.002, + dp=(3000 + 2000)*{2,1}, + nominal_mass_flow_rate_boiler=0.03571428571428571, + nominal_mass_flow_radiator_loop=0.07142857142857142, + V_flow=0.03571428571428571/1000*{0.5,1} +, +redeclare package MediumW = MediumW) "Boiler" annotation ( + Placement(transformation(origin = { -190.34842248310196, 69.60735966740417 }, + extent = {{-10, -10}, {10, 10}} +))); + house.Common.Controls.ventilation.BoilerControlBoiler_control + boiler_control( TSup_nominal=353.15, + threshold_outdoor_air_cutoff=288.15, + threshold_to_switch_off_boiler=288.15 +) annotation ( + Placement(transformation(origin = { -183.16805548302662, 1.0516282371750407 }, + extent = {{-10, -10}, {10, 10}} +))); + Buildings.Fluid.FixedResistances.Junction system_005 ( + m_flow_nominal=0.008*{1, -1, -1}, + dp_nominal={10000,-1,-1}, + deltaM=0.3, + linearized=false +, + redeclare package Medium = MediumW, + energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState) + "Flow splitter" annotation ( + Placement(transformation(origin = { 630, -25 }, + extent = {{-10, -10}, {10, 10}} +))); + house.Common.Controls.ventilation.DataServer + data_bus (redeclare package + Medium = Medium) annotation ( + Placement(transformation(origin = { 193.0960509450347, -57.95937773141203 }, + extent = {{-10, -10}, {10, 10}} +))); + + +equation connect(schema_space_001.heaPorAir,system_007.heatPortCon) +annotation (Line( +points={{ 0.0, 0.0 } ,{ 0.0, 0.0 } ,{ 0.0, -75.0 } ,{ 0.0, -75.0 } }, +color={255,204,51}, +thickness=0.5, +smooth=Smooth.None)); connect(schema_space_001.heaPorRad,system_007.heatPortRad) +annotation (Line( +points={{ 0.0, 0.0 } ,{ 0.0, 0.0 } ,{ 0.0, -75.0 } ,{ 0.0, -75.0 } }, +color={255,204,51}, +thickness=0.5, +smooth=Smooth.None)); connect(schema_space_001.qGai_flow,occupancy_11.y) +annotation (Line( +points={{ 0.0, 0.0 } ,{ -25.0, 0.0 } ,{ -25.0, 0.0 } ,{ -50.0, 0.0 } }, +color={255,204,51}, +thickness=0.5, +smooth=Smooth.None)); connect(schema_space_001.surf_surBou[1],internal_schema_space_001_schema_space_002.port_a) +annotation (Line( +points={{ 0.0, 0.0 } ,{ 62.5, 0.0 } ,{ 62.5, 0.0 } ,{ 125.0, 0.0 } }, +color={191,0,0}, +thickness=0.1, +smooth=Smooth.None)); connect(schema_space_001.surf_surBou[2],internal_schema_space_001_schema_space_003.port_a) +annotation (Line( +points={{ 0.0, 0.0 } ,{ 125.0, 0.0 } ,{ 125.0, 0.0 } ,{ 250.0, 0.0 } }, +color={191,0,0}, +thickness=0.1, +smooth=Smooth.None)); connect(schema_space_001.weaBus,weather_0.weaBus) +annotation (Line( +points={{ 0.0, 0.0 } ,{ -50.0, 0.0 } ,{ -50.0, 200.0 } ,{ -100.0, 200.0 } }, +thickness=0.05, +smooth=Smooth.None)); connect(system_007.port_b,system_008.port_a) +annotation (Line( +points={{ 0.0, -75.0 } ,{ 15.0, -75.0 } ,{ 15.0, -75.0 } ,{ 30.0, -75.0 } }, +color={255,204,51}, +thickness=0.5, +smooth=Smooth.None)); connect(system_008.y,emissioncontrol_8.y) +annotation (Line( +points={{ 30.0, -75.0 } ,{ 4.559728435519048, -75.0 } ,{ 4.559728435519048, 180.02509214836158 } ,{ -20.880543128961904, 180.02509214836158 } }, +color={255,204,51}, +thickness=0.5, +smooth=Smooth.None)); connect(system_008.port_b,system_003.port_1) +annotation (Line( +points={{ 30.0, -75.0 } ,{ 80.0, -75.0 } ,{ 80.0, -175.0 } ,{ 130.0, -175.0 } }, +color={255,204,51}, +thickness=0.5, +smooth=Smooth.None)); connect(schema_space_002.heaPorAir,system_009.heatPortCon) +annotation (Line( +points={{ 250.0, 150.0 } ,{ 250.0, 150.0 } ,{ 250.0, 75.0 } ,{ 250.0, 75.0 } }, +color={255,204,51}, +thickness=0.5, +smooth=Smooth.None)); connect(schema_space_002.heaPorRad,system_009.heatPortRad) +annotation (Line( +points={{ 250.0, 150.0 } ,{ 250.0, 150.0 } ,{ 250.0, 75.0 } ,{ 250.0, 75.0 } }, +color={255,204,51}, +thickness=0.5, +smooth=Smooth.None)); connect(schema_space_002.qGai_flow,occupancy_12.y) +annotation (Line( +points={{ 250.0, 150.0 } ,{ 225.0, 150.0 } ,{ 225.0, 150.0 } ,{ 200.0, 150.0 } }, +color={255,204,51}, +thickness=0.5, +smooth=Smooth.None)); connect(schema_space_002.surf_surBou[1],internal_schema_space_001_schema_space_002.port_b) +annotation (Line( +points={{ 250.0, 150.0 } ,{ 187.5, 150.0 } ,{ 187.5, 0.0 } ,{ 125.0, 0.0 } }, +color={191,0,0}, +thickness=0.1, +smooth=Smooth.None)); connect(schema_space_002.surf_surBou[2],internal_schema_space_002_schema_space_003.port_a) +annotation (Line( +points={{ 250.0, 150.0 } ,{ 312.5, 150.0 } ,{ 312.5, 150.0 } ,{ 375.0, 150.0 } }, +color={191,0,0}, +thickness=0.1, +smooth=Smooth.None)); connect(schema_space_002.weaBus,weather_0.weaBus) +annotation (Line( +points={{ 250.0, 150.0 } ,{ 75.0, 150.0 } ,{ 75.0, 200.0 } ,{ -100.0, 200.0 } }, +thickness=0.05, +smooth=Smooth.None)); connect(system_009.port_b,system_010.port_a) +annotation (Line( +points={{ 250.0, 75.0 } ,{ 265.0, 75.0 } ,{ 265.0, 75.0 } ,{ 280.0, 75.0 } }, +color={255,204,51}, +thickness=0.5, +smooth=Smooth.None)); connect(system_010.y,emissioncontrol_9.y) +annotation (Line( +points={{ 280.0, 75.0 } ,{ 213.09070067054017, 75.0 } ,{ 213.09070067054017, -147.21373806192437 } ,{ 146.18140134108032, -147.21373806192437 } }, +color={255,204,51}, +thickness=0.5, +smooth=Smooth.None)); connect(system_010.port_b,system_003.port_1) +annotation (Line( +points={{ 280.0, 75.0 } ,{ 205.0, 75.0 } ,{ 205.0, -175.0 } ,{ 130.0, -175.0 } }, +color={255,204,51}, +thickness=0.5, +smooth=Smooth.None)); connect(schema_space_003.heaPorAir,system_011.heatPortCon) +annotation (Line( +points={{ 500.0, 150.0 } ,{ 500.0, 150.0 } ,{ 500.0, 75.0 } ,{ 500.0, 75.0 } }, +color={255,204,51}, +thickness=0.5, +smooth=Smooth.None)); connect(schema_space_003.heaPorRad,system_011.heatPortRad) +annotation (Line( +points={{ 500.0, 150.0 } ,{ 500.0, 150.0 } ,{ 500.0, 75.0 } ,{ 500.0, 75.0 } }, +color={255,204,51}, +thickness=0.5, +smooth=Smooth.None)); connect(schema_space_003.qGai_flow,occupancy_13.y) +annotation (Line( +points={{ 500.0, 150.0 } ,{ 475.0, 150.0 } ,{ 475.0, 150.0 } ,{ 450.0, 150.0 } }, +color={255,204,51}, +thickness=0.5, +smooth=Smooth.None)); connect(schema_space_003.surf_surBou[1],internal_schema_space_001_schema_space_003.port_b) +annotation (Line( +points={{ 500.0, 150.0 } ,{ 375.0, 150.0 } ,{ 375.0, 0.0 } ,{ 250.0, 0.0 } }, +color={191,0,0}, +thickness=0.1, +smooth=Smooth.None)); connect(schema_space_003.surf_surBou[2],internal_schema_space_002_schema_space_003.port_b) +annotation (Line( +points={{ 500.0, 150.0 } ,{ 437.5, 150.0 } ,{ 437.5, 150.0 } ,{ 375.0, 150.0 } }, +color={191,0,0}, +thickness=0.1, +smooth=Smooth.None)); connect(schema_space_003.weaBus,weather_0.weaBus) +annotation (Line( +points={{ 500.0, 150.0 } ,{ 200.0, 150.0 } ,{ 200.0, 200.0 } ,{ -100.0, 200.0 } }, +thickness=0.05, +smooth=Smooth.None)); connect(system_011.port_b,system_012.port_a) +annotation (Line( +points={{ 500.0, 75.0 } ,{ 515.0, 75.0 } ,{ 515.0, 75.0 } ,{ 530.0, 75.0 } }, +color={255,204,51}, +thickness=0.5, +smooth=Smooth.None)); connect(system_012.y,emissioncontrol_10.y) +annotation (Line( +points={{ 530.0, 75.0 } ,{ 341.89998761846397, 75.0 } ,{ 341.899987618464, -78.6740364035971 } ,{ 153.79997523692796, -78.6740364035971 } }, +color={255,204,51}, +thickness=0.5, +smooth=Smooth.None)); connect(system_012.port_b,system_005.port_1) +annotation (Line( +points={{ 530.0, 75.0 } ,{ 580.0, 75.0 } ,{ 580.0, -25.0 } ,{ 630.0, -25.0 } }, +color={255,204,51}, +thickness=0.5, +smooth=Smooth.None)); connect(system_002.dataBus,pump_control.dataBus) +annotation (Line( +points={{ -51.38391148010123, 188.86076764196187 } ,{ -21.722099652455103, 188.86076764196187 } ,{ -21.7220996524551, 194.6034290862168 } ,{ 7.939712175191028, 194.6034290862168 } }, +color={255,204,51}, +thickness=0.5, +smooth=Smooth.None)); connect(system_002.port_b,system_004.port_1) +annotation (Line( +points={{ -51.38391148010123, 188.86076764196187 } ,{ -75.69195574005062, 188.86076764196187 } ,{ -75.69195574005062, -175.0 } ,{ -100.0, -175.0 } }, +color={255,204,51}, +thickness=0.5, +smooth=Smooth.None)); connect(system_002.port_b,system_006.port_1) +annotation (Line( +points={{ -51.38391148010123, 188.86076764196187 } ,{ 174.30804425994938, 188.86076764196187 } ,{ 174.30804425994938, -25.0 } ,{ 400.0, -25.0 } }, +color={255,204,51}, +thickness=0.5, +smooth=Smooth.None)); connect(system_004.y,threewayvalvecontrol_0.y) +annotation (Line( +points={{ -100.0, -175.0 } ,{ -125.0, -175.0 } ,{ -125.0, -175.0 } ,{ -150.0, -175.0 } }, +color={255,204,51}, +thickness=0.5, +smooth=Smooth.None)); connect(system_004.port_2,system_007.port_a) +annotation (Line( +points={{ -100.0, -175.0 } ,{ -50.0, -175.0 } ,{ -50.0, -75.0 } ,{ 0.0, -75.0 } }, +color={255,204,51}, +thickness=0.5, +smooth=Smooth.None)); connect(system_004.port_3,system_003.port_3) +annotation (Line( +points={{ -100.0, -175.0 } ,{ 15.0, -175.0 } ,{ 15.0, -175.0 } ,{ 130.0, -175.0 } }, +color={255,204,51}, +thickness=0.5, +smooth=Smooth.None)); connect(system_006.y,threewayvalvecontrol_1.y) +annotation (Line( +points={{ 400.0, -25.0 } ,{ 375.0, -25.0 } ,{ 375.0, -25.0 } ,{ 350.0, -25.0 } }, +color={255,204,51}, +thickness=0.5, +smooth=Smooth.None)); connect(system_006.port_2,system_011.port_a) +annotation (Line( +points={{ 400.0, -25.0 } ,{ 450.0, -25.0 } ,{ 450.0, 75.0 } ,{ 500.0, 75.0 } }, +color={255,204,51}, +thickness=0.5, +smooth=Smooth.None)); connect(system_006.port_3,system_005.port_3) +annotation (Line( +points={{ 400.0, -25.0 } ,{ 515.0, -25.0 } ,{ 515.0, -25.0 } ,{ 630.0, -25.0 } }, +color={255,204,51}, +thickness=0.5, +smooth=Smooth.None)); connect(system_003.port_2,system_001.port_a) +annotation (Line( +points={{ 130.0, -175.0 } ,{ -30.174211241550978, -175.0 } ,{ -30.174211241550978, 69.60735966740417 } ,{ -190.34842248310196, 69.60735966740417 } }, +color={255,204,51}, +thickness=0.5, +smooth=Smooth.None)); connect(system_001.dataBus,boiler_control.dataBus) +annotation (Line( +points={{ -190.34842248310196, 69.60735966740417 } ,{ -186.7582389830643, 69.60735966740417 } ,{ -186.7582389830643, 1.0516282371750407 } ,{ -183.16805548302662, 1.0516282371750407 } }, +color={255,204,51}, +thickness=0.5, +smooth=Smooth.None)); connect(system_005.port_2,system_001.port_a) +annotation (Line( +points={{ 630.0, -25.0 } ,{ 219.825788758449, -25.0 } ,{ 219.82578875844905, 69.60735966740417 } ,{ -190.34842248310196, 69.60735966740417 } }, +color={255,204,51}, +thickness=0.5, +smooth=Smooth.None)); connect(emissioncontrol_8.dataBus,data_bus.dataBus) +annotation (Line( +points={{ -20.880543128961904, 180.02509214836158 } ,{ 86.1077539080364, 180.02509214836158 } ,{ 86.1077539080364, -57.95937773141203 } ,{ 193.0960509450347, -57.95937773141203 } }, +thickness=0.05, +smooth=Smooth.None)); connect(occupancy_11.dataBus,data_bus.dataBus) +annotation (Line( +points={{ -50.0, 0.0 } ,{ 71.54802547251735, 0.0 } ,{ 71.54802547251735, -57.95937773141203 } ,{ 193.0960509450347, -57.95937773141203 } }, +thickness=0.05, +smooth=Smooth.None)); connect(emissioncontrol_9.dataBus,data_bus.dataBus) +annotation (Line( +points={{ 146.18140134108032, -147.21373806192437 } ,{ 169.6387261430575, -147.21373806192437 } ,{ 169.6387261430575, -57.95937773141203 } ,{ 193.0960509450347, -57.95937773141203 } }, +thickness=0.05, +smooth=Smooth.None)); connect(occupancy_12.dataBus,data_bus.dataBus) +annotation (Line( +points={{ 200.0, 150.0 } ,{ 196.54802547251734, 150.0 } ,{ 196.54802547251734, -57.95937773141203 } ,{ 193.0960509450347, -57.95937773141203 } }, +thickness=0.05, +smooth=Smooth.None)); connect(emissioncontrol_10.dataBus,data_bus.dataBus) +annotation (Line( +points={{ 153.79997523692796, -78.6740364035971 } ,{ 173.44801309098133, -78.6740364035971 } ,{ 173.44801309098133, -57.95937773141203 } ,{ 193.0960509450347, -57.95937773141203 } }, +thickness=0.05, +smooth=Smooth.None)); connect(occupancy_13.dataBus,data_bus.dataBus) +annotation (Line( +points={{ 450.0, 150.0 } ,{ 321.54802547251734, 150.0 } ,{ 321.54802547251734, -57.95937773141203 } ,{ 193.0960509450347, -57.95937773141203 } }, +thickness=0.05, +smooth=Smooth.None)); connect(pump_control.dataBus,data_bus.dataBus) +annotation (Line( +points={{ 7.939712175191028, 194.6034290862168 } ,{ 100.51788156011287, 194.6034290862168 } ,{ 100.51788156011287, -57.95937773141203 } ,{ 193.0960509450347, -57.95937773141203 } }, +thickness=0.05, +smooth=Smooth.None)); connect(threewayvalvecontrol_0.dataBus,data_bus.dataBus) +annotation (Line( +points={{ -150.0, -175.0 } ,{ 21.548025472517338, -175.0 } ,{ 21.548025472517367, -57.95937773141203 } ,{ 193.0960509450347, -57.95937773141203 } }, +thickness=0.05, +smooth=Smooth.None)); connect(threewayvalvecontrol_1.dataBus,data_bus.dataBus) +annotation (Line( +points={{ 350.0, -25.0 } ,{ 271.54802547251734, -25.0 } ,{ 271.54802547251734, -57.95937773141203 } ,{ 193.0960509450347, -57.95937773141203 } }, +thickness=0.05, +smooth=Smooth.None)); connect(boiler_control.dataBus,data_bus.dataBus) +annotation (Line( +points={{ -183.16805548302662, 1.0516282371750407 } ,{ 4.963997731004042, 1.0516282371750407 } ,{ 4.963997731004042, -57.95937773141203 } ,{ 193.0960509450347, -57.95937773141203 } }, +thickness=0.05, +smooth=Smooth.None)); connect(schema_space_001.heaPorAir,data_bus.port[1]) +annotation (Line( +points={{ 0.0, 0.0 } ,{ 96.54802547251735, 0.0 } ,{ 96.54802547251735, -57.95937773141203 } ,{ 193.0960509450347, -57.95937773141203 } }, +thickness=0.05, +smooth=Smooth.None)); connect(schema_space_001.ports[1],data_bus.port_a[1]) +annotation (Line( +points={{ 0.0, 0.0 } ,{ 96.54802547251735, 0.0 } ,{ 96.54802547251735, -57.95937773141203 } ,{ 193.0960509450347, -57.95937773141203 } }, +thickness=0.05, +smooth=Smooth.None)); connect(schema_space_002.heaPorAir,data_bus.port[2]) +annotation (Line( +points={{ 250.0, 150.0 } ,{ 221.54802547251734, 150.0 } ,{ 221.54802547251734, -57.95937773141203 } ,{ 193.0960509450347, -57.95937773141203 } }, +thickness=0.05, +smooth=Smooth.None)); connect(schema_space_002.ports[1],data_bus.port_a[2]) +annotation (Line( +points={{ 250.0, 150.0 } ,{ 221.54802547251734, 150.0 } ,{ 221.54802547251734, -57.95937773141203 } ,{ 193.0960509450347, -57.95937773141203 } }, +thickness=0.05, +smooth=Smooth.None)); connect(schema_space_003.heaPorAir,data_bus.port[3]) +annotation (Line( +points={{ 500.0, 150.0 } ,{ 346.54802547251734, 150.0 } ,{ 346.54802547251734, -57.95937773141203 } ,{ 193.0960509450347, -57.95937773141203 } }, +thickness=0.05, +smooth=Smooth.None)); connect(schema_space_003.ports[1],data_bus.port_a[3]) +annotation (Line( +points={{ 500.0, 150.0 } ,{ 346.54802547251734, 150.0 } ,{ 346.54802547251734, -57.95937773141203 } ,{ 193.0960509450347, -57.95937773141203 } }, +thickness=0.05, +smooth=Smooth.None));annotation (Diagram(coordinateSystem(extent={{-243.50711810628377,-248.3095977487813},{680.0,250.0}})), Icon( + coordinateSystem(extent={{-243.50711810628377,-248.3095977487813},{680.0,250.0}}))); + annotation ( + Documentation(info="Spaces

Spaces

Introduction

Introduction

nameschema_space_001
parameters
mSenFac1.0
AFlo100.0
hRoo2.5
linearizeRadiationtrue
m_flow_nominal0.01
T_start294.15
volume250.0
occupancy
nameoccupancy_11
parameters
emissions
nameparameters
system_007
nEle1
fraRad0.3
Q_flow_nominal2000.0
T_a_nominal363.15
T_b_nominal353.15
TAir_nominal293.15
TRad_nominal293.15
n1.9
deltaM0.01
from_dpfalse
dp_nominal1000.0
linearizedfalse
VWat0.116
mDry52.6
system_008
R7.0
delta00.01
dpFixed_nominal6000.0
l0.0001
from_dptrue
linearizedfalse
deltaM0.02
m_flow_nominal0.01
dpValve_nominal6000.0
external_boundaries
namesurfaceazimuthtiltconstruction
externalwall_17100.0180.0wall
nameconstruction_001
externalwall_18100.0180.0wall
nameconstruction_001
externalwall_19200.0180.0wall
nameconstruction_001
internal_elements
namesurfaceazimuthtiltconstruction
internal_schema_space_001_schema_space_00210.010.0wall
nameinternal_wall
internal_schema_space_001_schema_space_00310.010.0wall
nameinternal_wall
nameschema_space_002
parameters
mSenFac1.0
AFlo100.0
hRoo2.5
linearizeRadiationtrue
m_flow_nominal0.01
T_start294.15
volume250.0
occupancy
nameoccupancy_12
parameters
emissions
nameparameters
system_009
nEle1
fraRad0.3
Q_flow_nominal2000.0
T_a_nominal363.15
T_b_nominal353.15
TAir_nominal293.15
TRad_nominal293.15
n1.9
deltaM0.01
from_dpfalse
dp_nominal1000.0
linearizedfalse
VWat0.116
mDry52.6
system_010
R7.0
delta00.01
dpFixed_nominal6000.0
l0.0001
from_dptrue
linearizedfalse
deltaM0.02
m_flow_nominal0.01
dpValve_nominal6000.0
external_boundaries
namesurfaceazimuthtiltconstruction
externalwall_20100.0180.0wall
nameconstruction_001
externalwall_21100.0180.0wall
nameconstruction_001
externalwall_22200.0180.0wall
nameconstruction_001
internal_elements
namesurfaceazimuthtiltconstruction
internal_schema_space_001_schema_space_00210.010.0wall
nameinternal_wall
internal_schema_space_002_schema_space_00310.010.0wall
nameinternal_wall
nameschema_space_003
parameters
mSenFac1.0
AFlo100.0
hRoo2.5
linearizeRadiationtrue
m_flow_nominal0.01
T_start294.15
volume250.0
occupancy
nameoccupancy_13
parameters
emissions
nameparameters
system_011
nEle1
fraRad0.3
Q_flow_nominal2000.0
T_a_nominal363.15
T_b_nominal353.15
TAir_nominal293.15
TRad_nominal293.15
n1.9
deltaM0.01
from_dpfalse
dp_nominal1000.0
linearizedfalse
VWat0.116
mDry52.6
system_012
R7.0
delta00.01
dpFixed_nominal6000.0
l0.0001
from_dptrue
linearizedfalse
deltaM0.02
m_flow_nominal0.01
dpValve_nominal6000.0
external_boundaries
namesurfaceazimuthtiltconstruction
externalwall_23100.0180.0wall
nameconstruction_001
externalwall_24100.0180.0wall
nameconstruction_001
externalwall_25200.0180.0wall
nameconstruction_001
internal_elements
namesurfaceazimuthtiltconstruction
internal_schema_space_001_schema_space_00310.010.0wall
nameinternal_wall
internal_schema_space_002_schema_space_00310.010.0wall
nameinternal_wall

Conclusions

Conclusions

Spaces

Introduction

Introduction

nameconstruction_001
layers
materialthickness
namematerial_001
k0.035
c1000.0
rho2000.0
epsLw0.85
epsSw0.85
0.1
namematerial_002
k0.035
c1000.0
rho2000.0
epsLw0.85
epsSw0.85
0.1
namematerial_003
k0.035
c1000.0
rho2000.0
epsLw0.85
epsSw0.85
0.1
nameinternal_wall
layers
materialthickness
namebrick
k0.89
c790.0
rho1920.0
epsLw0.85
epsSw0.65
0.2

Conclusions

Conclusions

Spaces

Introduction

Introduction

namesystem_001
parameters
scaFacRad1.5
dTBoi_nominal20
dTRad_nominal10
a{0.9}
effCurBuildings.Fluid.Types.EfficiencyCurves.Constant
T_nominal353.15
fueBuildings.Fluid.Data.Fuels.HeatingOilLowerHeatingValue()
Q_flow_nominal2000
dp_nominal5000
linearizeFlowResistancefalse
deltaM0.1
show_Tfalse
VTan0.2
hTan2
nSeg4
dIns0.002
dp(3000 + 2000)*{2,1}
nominal_mass_flow_rate_boiler0.03571428571428571
nominal_mass_flow_radiator_loop0.07142857142857142
V_flow0.03571428571428571/1000*{0.5,1}

Conclusions

Conclusions

")); +end building; + + +end house; diff --git a/tests/test_schema.py b/tests/test_schema.py index ea5eeb6..f0987ad 100644 --- a/tests/test_schema.py +++ b/tests/test_schema.py @@ -47,10 +47,11 @@ def schema() -> Path: def test_validate_schema() -> None: + house = Path(__file__).parents[1].joinpath("tests", "house.yaml") data_model_path = ( Path(__file__).parents[1].joinpath("trano", "data_models", "trano.yaml") ) - report = validate_file("house.yaml", data_model_path, "Building") + report = validate_file(house, data_model_path, "Building") assert report.results == [] From 9899e3023b1c0eb0a361ecf966fc755ab610800d Mon Sep 17 00:00:00 2001 From: aan Date: Tue, 6 Aug 2024 20:54:02 +0200 Subject: [PATCH 03/11] feat: Add missing files. --- tests/data/house.mo | 166 ++++++++++++++++---------------- trano/data_models/conversion.py | 14 ++- 2 files changed, 94 insertions(+), 86 deletions(-) diff --git a/tests/data/house.mo b/tests/data/house.mo index 4fd941c..8505300 100644 --- a/tests/data/house.mo +++ b/tests/data/house.mo @@ -467,7 +467,7 @@ Controls.BaseClasses.DataBus dataBus equation connect(dataBus.OccupiedSchema_space_001, occSch2.occupied); end OccupancyOccupancy_11; - + model EmissionControlEmissioncontrol_9 parameter Real schedule[:]=3600*{7,19}; @@ -531,7 +531,7 @@ Controls.BaseClasses.DataBus dataBus equation connect(dataBus.OccupiedSchema_space_002, occSch2.occupied); end OccupancyOccupancy_12; - + model EmissionControlEmissioncontrol_10 parameter Real schedule[:]=3600*{7,19}; @@ -595,7 +595,7 @@ Controls.BaseClasses.DataBus dataBus equation connect(dataBus.OccupiedSchema_space_003, occSch2.occupied); end OccupancyOccupancy_13; - + model CollectorControlPump_control Buildings.Controls.OBC.CDL.Reals.PIDWithReset conPum( controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PI, @@ -635,7 +635,7 @@ connect(dataBus.yHeaSystem_008, mulMax.u[1]); connect(dataBus.yHeaSystem_010, mulMax.u[2]); connect(dataBus.yHeaSystem_012, mulMax.u[3]); end CollectorControlPump_control; - model ThreeWayValveControlThreewayvalvecontrol_0 + model ThreeWayValveControlThree_way_valve_1 Buildings.Controls.OBC.CDL.Reals.PIDWithReset conVal( controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PI, @@ -654,13 +654,13 @@ annotation (Placement(transformation(extent={{-138,-20},{-98,20}}))); Con annotation (Placement(transformation( extent={{-120,-18},{-80,22}}), iconTransformation(extent={{-120,62},{-78,98}}))); equation -connect(dataBus.TColSetThreewayvalvecontrol_0, conVal.u_s); -connect(dataBus.triggerThreewayvalvecontrol_0, conVal.trigger); +connect(dataBus.TColSetThree_way_valve_1, conVal.u_s); +connect(dataBus.triggerThree_way_valve_1, conVal.trigger); connect(conVal.y, y) annotation (Line(points={{10,0},{110,0}}, color={0,0,127})); connect(u, conVal.u_m) annotation (Line(points={{-118,0},{-22,0},{-22,-20},{0, -20},{0,-16},{-2,-16},{-2,-12}}, color={0,0,127}));annotation (Icon(coordinateSystem(preserveAspectRatio=false)), Diagram( - coordinateSystem(preserveAspectRatio=false)));end ThreeWayValveControlThreewayvalvecontrol_0; - model ThreeWayValveControlThreewayvalvecontrol_1 + coordinateSystem(preserveAspectRatio=false)));end ThreeWayValveControlThree_way_valve_1; + model ThreeWayValveControlThree_way_valve_2 Buildings.Controls.OBC.CDL.Reals.PIDWithReset conVal( controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PI, @@ -679,12 +679,12 @@ annotation (Placement(transformation(extent={{-138,-20},{-98,20}}))); Con annotation (Placement(transformation( extent={{-120,-18},{-80,22}}), iconTransformation(extent={{-120,62},{-78,98}}))); equation -connect(dataBus.TColSetThreewayvalvecontrol_1, conVal.u_s); -connect(dataBus.triggerThreewayvalvecontrol_1, conVal.trigger); +connect(dataBus.TColSetThree_way_valve_2, conVal.u_s); +connect(dataBus.triggerThree_way_valve_2, conVal.trigger); connect(conVal.y, y) annotation (Line(points={{10,0},{110,0}}, color={0,0,127})); connect(u, conVal.u_m) annotation (Line(points={{-118,0},{-22,0},{-22,-20},{0, -20},{0,-16},{-2,-16},{-2,-12}}, color={0,0,127}));annotation (Icon(coordinateSystem(preserveAspectRatio=false)), Diagram( - coordinateSystem(preserveAspectRatio=false)));end ThreeWayValveControlThreewayvalvecontrol_1; + coordinateSystem(preserveAspectRatio=false)));end ThreeWayValveControlThree_way_valve_2; model BoilerControlBoiler_control extends house.Common.Controls.ventilation.PartialBoilerControl; Controls.BaseClasses.DataBus dataBus @@ -697,7 +697,7 @@ connect(dataBus.TAirOutSystem_001, lesThrTOut.u); connect(dataBus.yBoiConSystem_001, booToReaBoi.y); connect(dataBus.yPumBoiSystem_001, booToReaPum.y); end BoilerControlBoiler_control; - + model DataServer replaceable package Medium = Modelica.Media.Interfaces.PartialMedium; Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor[3] @@ -716,28 +716,28 @@ iconTransformation(origin = {-2, -42}, extent = {{-110, -9}, {-90, 9}}))); Cont annotation (Placement(transformation( extent={{-120,-18},{-80,22}}), iconTransformation(extent={{-120,62},{-78,98}}))); Modelica.Blocks.Sources.RealExpression - TColSetThreewayvalvecontrol_0 + TColSetThree_way_valve_2 (y=363.15); Modelica.Blocks.Sources.RealExpression TAirOutBoiler_control (y=0.0); Modelica.Blocks.Sources.RealExpression - TCooSetEmissioncontrol_9 - (y=298.15); + TColSetThree_way_valve_1 + (y=363.15); Modelica.Blocks.Sources.RealExpression - TCooSetEmissioncontrol_10 + TCooSetEmissioncontrol_8 (y=298.15); Modelica.Blocks.Sources.RealExpression - TColSetThreewayvalvecontrol_1 - (y=363.15); + TCooSetEmissioncontrol_9 + (y=298.15); Modelica.Blocks.Sources.RealExpression - TCooSetEmissioncontrol_8 + TCooSetEmissioncontrol_10 (y=298.15); Modelica.Blocks.Sources.BooleanExpression - triggerThreewayvalvecontrol_0 + triggerThree_way_valve_1 (y=true); Modelica.Blocks.Sources.BooleanExpression - triggerThreewayvalvecontrol_1 + triggerThree_way_valve_2 (y=true); equation connect(port[1],TRoo[1]. port); @@ -752,24 +752,24 @@ connect(dataBus.TZonSchema_space_003, TRoo[3].T); connect(dataBus.ppmCO2Schema_space_001, TRoo1[1].ppm); connect(dataBus.ppmCO2Schema_space_002, TRoo1[2].ppm); connect(dataBus.ppmCO2Schema_space_003, TRoo1[3].ppm); -connect(dataBus.TColSetThreewayvalvecontrol_0, -TColSetThreewayvalvecontrol_0.y); +connect(dataBus.TColSetThree_way_valve_2, +TColSetThree_way_valve_2.y); connect(dataBus.TAirOutSystem_001, TAirOutBoiler_control.y); +connect(dataBus.TColSetThree_way_valve_1, +TColSetThree_way_valve_1.y); +connect(dataBus.TCooSetSchema_space_001, +TCooSetEmissioncontrol_8.y); connect(dataBus.TCooSetSchema_space_002, TCooSetEmissioncontrol_9.y); connect(dataBus.TCooSetSchema_space_003, TCooSetEmissioncontrol_10.y); -connect(dataBus.TColSetThreewayvalvecontrol_1, -TColSetThreewayvalvecontrol_1.y); -connect(dataBus.TCooSetSchema_space_001, -TCooSetEmissioncontrol_8.y); -connect(dataBus.triggerThreewayvalvecontrol_0, -triggerThreewayvalvecontrol_0.y); -connect(dataBus.triggerThreewayvalvecontrol_1, -triggerThreewayvalvecontrol_1.y); +connect(dataBus.triggerThree_way_valve_1, +triggerThree_way_valve_1.y); +connect(dataBus.triggerThree_way_valve_2, +triggerThree_way_valve_2.y); end DataServer; - + partial model PartialBoilerControl @@ -1201,7 +1201,7 @@ connect(dataBus.yPumBoiSystem_001, pumBoi.y); connect(dataBus.TStoTopSystem_001, tanTemTop.T); connect(dataBus.TStoBotSystem_001, tanTemBot.T); end BoilerWithStorageSystem_001; - + end Boilers; @@ -2397,7 +2397,7 @@ connect(dataBus.ySystem_002, pumRad.y); connect(dataBus.y_gainSystem_002, gain.y); connect(dataBus.TPump_control, temSup.T); end PumpSystem_002; - + end Ventilation; end Fluid; @@ -2627,7 +2627,7 @@ parameter Integer nRoo = 2 "Number of rooms"; ))); house.Common.Controls.ventilation.EmissionControlEmissioncontrol_8 emissioncontrol_8 annotation ( - Placement(transformation(origin = { -20.880543128961904, 180.02509214836158 }, + Placement(transformation(origin = { -161.2231611439812, -71.59807030394693 }, extent = {{-10, -10}, {10, 10}} ))); house.Common.Controls.ventilation.OccupancyOccupancy_11 @@ -2703,7 +2703,7 @@ parameter Integer nRoo = 2 "Number of rooms"; ))); house.Common.Controls.ventilation.EmissionControlEmissioncontrol_9 emissioncontrol_9 annotation ( - Placement(transformation(origin = { 146.18140134108032, -147.21373806192437 }, + Placement(transformation(origin = { 54.309853024963715, 178.5293303083724 }, extent = {{-10, -10}, {10, 10}} ))); house.Common.Controls.ventilation.OccupancyOccupancy_12 @@ -2779,7 +2779,7 @@ parameter Integer nRoo = 2 "Number of rooms"; ))); house.Common.Controls.ventilation.EmissionControlEmissioncontrol_10 emissioncontrol_10 annotation ( - Placement(transformation(origin = { 153.79997523692796, -78.6740364035971 }, + Placement(transformation(origin = { -159.79218631382386, -106.31025963768906 }, extent = {{-10, -10}, {10, 10}} ))); house.Common.Controls.ventilation.OccupancyOccupancy_13 @@ -2818,7 +2818,7 @@ parameter Integer nRoo = 2 "Number of rooms"; extent = {{-10, -10}, {10, 10}} ))); Buildings.BoundaryConditions.WeatherData.ReaderTMY3 - weather_0(filNam=Modelica.Utilities.Files.loadResource + weather(filNam=Modelica.Utilities.Files.loadResource ("modelica://Buildings/Resources/weatherdata/USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.mos")) annotation ( Placement(transformation(origin = { -100, 200 }, @@ -2833,12 +2833,12 @@ parameter Integer nRoo = 2 "Number of rooms"; redeclare package Medium = MediumW ) annotation ( - Placement(transformation(origin = { -51.38391148010123, 188.86076764196187 }, + Placement(transformation(origin = { -186.57307338859857, -24.35702377597182 }, extent = {{-10, -10}, {10, 10}} ))); house.Common.Controls.ventilation.CollectorControlPump_control pump_control annotation ( - Placement(transformation(origin = { 7.939712175191028, 194.6034290862168 }, + Placement(transformation(origin = { -188.3857796209051, -62.55926631818296 }, extent = {{-10, -10}, {10, 10}} ))); Buildings.Fluid.Actuators.Valves.ThreeWayEqualPercentageLinear @@ -2860,8 +2860,8 @@ parameter Integer nRoo = 2 "Number of rooms"; extent = {{-10, -10}, {10, 10}} ))); house.Common.Controls.ventilation. - ThreeWayValveControlThreewayvalvecontrol_0 - threewayvalvecontrol_0 annotation ( + ThreeWayValveControlThree_way_valve_1 + three_way_valve_1 annotation ( Placement(transformation(origin = { -150, -175 }, extent = {{-10, -10}, {10, 10}} ))); @@ -2884,8 +2884,8 @@ parameter Integer nRoo = 2 "Number of rooms"; extent = {{-10, -10}, {10, 10}} ))); house.Common.Controls.ventilation. - ThreeWayValveControlThreewayvalvecontrol_1 - threewayvalvecontrol_1 annotation ( + ThreeWayValveControlThree_way_valve_2 + three_way_valve_2 annotation ( Placement(transformation(origin = { 350, -25 }, extent = {{-10, -10}, {10, 10}} ))); @@ -2922,7 +2922,7 @@ BoilerWithStorageSystem_001 system_001( V_flow=0.03571428571428571/1000*{0.5,1} , redeclare package MediumW = MediumW) "Boiler" annotation ( - Placement(transformation(origin = { -190.34842248310196, 69.60735966740417 }, + Placement(transformation(origin = { -137.42925998055202, 159.22841822037157 }, extent = {{-10, -10}, {10, 10}} ))); house.Common.Controls.ventilation.BoilerControlBoiler_control @@ -2930,7 +2930,7 @@ redeclare package MediumW = MediumW) "Boiler" annotation ( threshold_outdoor_air_cutoff=288.15, threshold_to_switch_off_boiler=288.15 ) annotation ( - Placement(transformation(origin = { -183.16805548302662, 1.0516282371750407 }, + Placement(transformation(origin = { 91.33414011956735, -170.17087032246238 }, extent = {{-10, -10}, {10, 10}} ))); Buildings.Fluid.FixedResistances.Junction system_005 ( @@ -2948,7 +2948,7 @@ redeclare package MediumW = MediumW) "Boiler" annotation ( house.Common.Controls.ventilation.DataServer data_bus (redeclare package Medium = Medium) annotation ( - Placement(transformation(origin = { 193.0960509450347, -57.95937773141203 }, + Placement(transformation(origin = { -179.32153908790966, 68.82481990289098 }, extent = {{-10, -10}, {10, 10}} ))); @@ -2978,7 +2978,7 @@ annotation (Line( points={{ 0.0, 0.0 } ,{ 125.0, 0.0 } ,{ 125.0, 0.0 } ,{ 250.0, 0.0 } }, color={191,0,0}, thickness=0.1, -smooth=Smooth.None)); connect(schema_space_001.weaBus,weather_0.weaBus) +smooth=Smooth.None)); connect(schema_space_001.weaBus,weather.weaBus) annotation (Line( points={{ 0.0, 0.0 } ,{ -50.0, 0.0 } ,{ -50.0, 200.0 } ,{ -100.0, 200.0 } }, thickness=0.05, @@ -2989,7 +2989,7 @@ color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_008.y,emissioncontrol_8.y) annotation (Line( -points={{ 30.0, -75.0 } ,{ 4.559728435519048, -75.0 } ,{ 4.559728435519048, 180.02509214836158 } ,{ -20.880543128961904, 180.02509214836158 } }, +points={{ 30.0, -75.0 } ,{ -65.6115805719906, -75.0 } ,{ -65.6115805719906, -71.59807030394693 } ,{ -161.2231611439812, -71.59807030394693 } }, color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_008.port_b,system_003.port_1) @@ -3022,7 +3022,7 @@ annotation (Line( points={{ 250.0, 150.0 } ,{ 312.5, 150.0 } ,{ 312.5, 150.0 } ,{ 375.0, 150.0 } }, color={191,0,0}, thickness=0.1, -smooth=Smooth.None)); connect(schema_space_002.weaBus,weather_0.weaBus) +smooth=Smooth.None)); connect(schema_space_002.weaBus,weather.weaBus) annotation (Line( points={{ 250.0, 150.0 } ,{ 75.0, 150.0 } ,{ 75.0, 200.0 } ,{ -100.0, 200.0 } }, thickness=0.05, @@ -3033,7 +3033,7 @@ color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_010.y,emissioncontrol_9.y) annotation (Line( -points={{ 280.0, 75.0 } ,{ 213.09070067054017, 75.0 } ,{ 213.09070067054017, -147.21373806192437 } ,{ 146.18140134108032, -147.21373806192437 } }, +points={{ 280.0, 75.0 } ,{ 167.15492651248186, 75.0 } ,{ 167.15492651248184, 178.5293303083724 } ,{ 54.309853024963715, 178.5293303083724 } }, color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_010.port_b,system_003.port_1) @@ -3066,7 +3066,7 @@ annotation (Line( points={{ 500.0, 150.0 } ,{ 437.5, 150.0 } ,{ 437.5, 150.0 } ,{ 375.0, 150.0 } }, color={191,0,0}, thickness=0.1, -smooth=Smooth.None)); connect(schema_space_003.weaBus,weather_0.weaBus) +smooth=Smooth.None)); connect(schema_space_003.weaBus,weather.weaBus) annotation (Line( points={{ 500.0, 150.0 } ,{ 200.0, 150.0 } ,{ 200.0, 200.0 } ,{ -100.0, 200.0 } }, thickness=0.05, @@ -3077,7 +3077,7 @@ color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_012.y,emissioncontrol_10.y) annotation (Line( -points={{ 530.0, 75.0 } ,{ 341.89998761846397, 75.0 } ,{ 341.899987618464, -78.6740364035971 } ,{ 153.79997523692796, -78.6740364035971 } }, +points={{ 530.0, 75.0 } ,{ 185.10390684308805, 75.0 } ,{ 185.10390684308808, -106.31025963768906 } ,{ -159.79218631382386, -106.31025963768906 } }, color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_012.port_b,system_005.port_1) @@ -3087,20 +3087,20 @@ color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_002.dataBus,pump_control.dataBus) annotation (Line( -points={{ -51.38391148010123, 188.86076764196187 } ,{ -21.722099652455103, 188.86076764196187 } ,{ -21.7220996524551, 194.6034290862168 } ,{ 7.939712175191028, 194.6034290862168 } }, +points={{ -186.57307338859857, -24.35702377597182 } ,{ -187.47942650475184, -24.35702377597182 } ,{ -187.47942650475184, -62.55926631818296 } ,{ -188.3857796209051, -62.55926631818296 } }, color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_002.port_b,system_004.port_1) annotation (Line( -points={{ -51.38391148010123, 188.86076764196187 } ,{ -75.69195574005062, 188.86076764196187 } ,{ -75.69195574005062, -175.0 } ,{ -100.0, -175.0 } }, +points={{ -186.57307338859857, -24.35702377597182 } ,{ -143.2865366942993, -24.35702377597182 } ,{ -143.2865366942993, -175.0 } ,{ -100.0, -175.0 } }, color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_002.port_b,system_006.port_1) annotation (Line( -points={{ -51.38391148010123, 188.86076764196187 } ,{ 174.30804425994938, 188.86076764196187 } ,{ 174.30804425994938, -25.0 } ,{ 400.0, -25.0 } }, +points={{ -186.57307338859857, -24.35702377597182 } ,{ 106.71346330570071, -24.35702377597182 } ,{ 106.71346330570071, -25.0 } ,{ 400.0, -25.0 } }, color={255,204,51}, thickness=0.5, -smooth=Smooth.None)); connect(system_004.y,threewayvalvecontrol_0.y) +smooth=Smooth.None)); connect(system_004.y,three_way_valve_1.y) annotation (Line( points={{ -100.0, -175.0 } ,{ -125.0, -175.0 } ,{ -125.0, -175.0 } ,{ -150.0, -175.0 } }, color={255,204,51}, @@ -3115,7 +3115,7 @@ annotation (Line( points={{ -100.0, -175.0 } ,{ 15.0, -175.0 } ,{ 15.0, -175.0 } ,{ 130.0, -175.0 } }, color={255,204,51}, thickness=0.5, -smooth=Smooth.None)); connect(system_006.y,threewayvalvecontrol_1.y) +smooth=Smooth.None)); connect(system_006.y,three_way_valve_2.y) annotation (Line( points={{ 400.0, -25.0 } ,{ 375.0, -25.0 } ,{ 375.0, -25.0 } ,{ 350.0, -25.0 } }, color={255,204,51}, @@ -3132,88 +3132,88 @@ color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_003.port_2,system_001.port_a) annotation (Line( -points={{ 130.0, -175.0 } ,{ -30.174211241550978, -175.0 } ,{ -30.174211241550978, 69.60735966740417 } ,{ -190.34842248310196, 69.60735966740417 } }, +points={{ 130.0, -175.0 } ,{ -3.7146299902760234, -175.0 } ,{ -3.714629990275995, 159.22841822037157 } ,{ -137.42925998055202, 159.22841822037157 } }, color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_001.dataBus,boiler_control.dataBus) annotation (Line( -points={{ -190.34842248310196, 69.60735966740417 } ,{ -186.7582389830643, 69.60735966740417 } ,{ -186.7582389830643, 1.0516282371750407 } ,{ -183.16805548302662, 1.0516282371750407 } }, +points={{ -137.42925998055202, 159.22841822037157 } ,{ -23.047559930492326, 159.22841822037157 } ,{ -23.04755993049234, -170.17087032246238 } ,{ 91.33414011956735, -170.17087032246238 } }, color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_005.port_2,system_001.port_a) annotation (Line( -points={{ 630.0, -25.0 } ,{ 219.825788758449, -25.0 } ,{ 219.82578875844905, 69.60735966740417 } ,{ -190.34842248310196, 69.60735966740417 } }, +points={{ 630.0, -25.0 } ,{ 246.28537000972398, -25.0 } ,{ 246.285370009724, 159.22841822037157 } ,{ -137.42925998055202, 159.22841822037157 } }, color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(emissioncontrol_8.dataBus,data_bus.dataBus) annotation (Line( -points={{ -20.880543128961904, 180.02509214836158 } ,{ 86.1077539080364, 180.02509214836158 } ,{ 86.1077539080364, -57.95937773141203 } ,{ 193.0960509450347, -57.95937773141203 } }, +points={{ -161.2231611439812, -71.59807030394693 } ,{ -170.27235011594541, -71.59807030394693 } ,{ -170.27235011594541, 68.82481990289098 } ,{ -179.32153908790966, 68.82481990289098 } }, thickness=0.05, smooth=Smooth.None)); connect(occupancy_11.dataBus,data_bus.dataBus) annotation (Line( -points={{ -50.0, 0.0 } ,{ 71.54802547251735, 0.0 } ,{ 71.54802547251735, -57.95937773141203 } ,{ 193.0960509450347, -57.95937773141203 } }, +points={{ -50.0, 0.0 } ,{ -114.66076954395483, 0.0 } ,{ -114.66076954395483, 68.82481990289098 } ,{ -179.32153908790966, 68.82481990289098 } }, thickness=0.05, smooth=Smooth.None)); connect(emissioncontrol_9.dataBus,data_bus.dataBus) annotation (Line( -points={{ 146.18140134108032, -147.21373806192437 } ,{ 169.6387261430575, -147.21373806192437 } ,{ 169.6387261430575, -57.95937773141203 } ,{ 193.0960509450347, -57.95937773141203 } }, +points={{ 54.309853024963715, 178.5293303083724 } ,{ -62.50584303147296, 178.5293303083724 } ,{ -62.50584303147298, 68.82481990289098 } ,{ -179.32153908790966, 68.82481990289098 } }, thickness=0.05, smooth=Smooth.None)); connect(occupancy_12.dataBus,data_bus.dataBus) annotation (Line( -points={{ 200.0, 150.0 } ,{ 196.54802547251734, 150.0 } ,{ 196.54802547251734, -57.95937773141203 } ,{ 193.0960509450347, -57.95937773141203 } }, +points={{ 200.0, 150.0 } ,{ 10.339230456045186, 150.0 } ,{ 10.339230456045158, 68.82481990289098 } ,{ -179.32153908790966, 68.82481990289098 } }, thickness=0.05, smooth=Smooth.None)); connect(emissioncontrol_10.dataBus,data_bus.dataBus) annotation (Line( -points={{ 153.79997523692796, -78.6740364035971 } ,{ 173.44801309098133, -78.6740364035971 } ,{ 173.44801309098133, -57.95937773141203 } ,{ 193.0960509450347, -57.95937773141203 } }, +points={{ -159.79218631382386, -106.31025963768906 } ,{ -169.55686270086676, -106.31025963768906 } ,{ -169.55686270086676, 68.82481990289098 } ,{ -179.32153908790966, 68.82481990289098 } }, thickness=0.05, smooth=Smooth.None)); connect(occupancy_13.dataBus,data_bus.dataBus) annotation (Line( -points={{ 450.0, 150.0 } ,{ 321.54802547251734, 150.0 } ,{ 321.54802547251734, -57.95937773141203 } ,{ 193.0960509450347, -57.95937773141203 } }, +points={{ 450.0, 150.0 } ,{ 135.3392304560452, 150.0 } ,{ 135.33923045604516, 68.82481990289098 } ,{ -179.32153908790966, 68.82481990289098 } }, thickness=0.05, smooth=Smooth.None)); connect(pump_control.dataBus,data_bus.dataBus) annotation (Line( -points={{ 7.939712175191028, 194.6034290862168 } ,{ 100.51788156011287, 194.6034290862168 } ,{ 100.51788156011287, -57.95937773141203 } ,{ 193.0960509450347, -57.95937773141203 } }, +points={{ -188.3857796209051, -62.55926631818296 } ,{ -183.8536593544074, -62.55926631818296 } ,{ -183.8536593544074, 68.82481990289098 } ,{ -179.32153908790966, 68.82481990289098 } }, thickness=0.05, -smooth=Smooth.None)); connect(threewayvalvecontrol_0.dataBus,data_bus.dataBus) +smooth=Smooth.None)); connect(three_way_valve_1.dataBus,data_bus.dataBus) annotation (Line( -points={{ -150.0, -175.0 } ,{ 21.548025472517338, -175.0 } ,{ 21.548025472517367, -57.95937773141203 } ,{ 193.0960509450347, -57.95937773141203 } }, +points={{ -150.0, -175.0 } ,{ -164.6607695439548, -175.0 } ,{ -164.6607695439548, 68.82481990289098 } ,{ -179.32153908790966, 68.82481990289098 } }, thickness=0.05, -smooth=Smooth.None)); connect(threewayvalvecontrol_1.dataBus,data_bus.dataBus) +smooth=Smooth.None)); connect(three_way_valve_2.dataBus,data_bus.dataBus) annotation (Line( -points={{ 350.0, -25.0 } ,{ 271.54802547251734, -25.0 } ,{ 271.54802547251734, -57.95937773141203 } ,{ 193.0960509450347, -57.95937773141203 } }, +points={{ 350.0, -25.0 } ,{ 85.33923045604519, -25.0 } ,{ 85.33923045604516, 68.82481990289098 } ,{ -179.32153908790966, 68.82481990289098 } }, thickness=0.05, smooth=Smooth.None)); connect(boiler_control.dataBus,data_bus.dataBus) annotation (Line( -points={{ -183.16805548302662, 1.0516282371750407 } ,{ 4.963997731004042, 1.0516282371750407 } ,{ 4.963997731004042, -57.95937773141203 } ,{ 193.0960509450347, -57.95937773141203 } }, +points={{ 91.33414011956735, -170.17087032246238 } ,{ -43.99369948417116, -170.17087032246238 } ,{ -43.993699484171145, 68.82481990289098 } ,{ -179.32153908790966, 68.82481990289098 } }, thickness=0.05, smooth=Smooth.None)); connect(schema_space_001.heaPorAir,data_bus.port[1]) annotation (Line( -points={{ 0.0, 0.0 } ,{ 96.54802547251735, 0.0 } ,{ 96.54802547251735, -57.95937773141203 } ,{ 193.0960509450347, -57.95937773141203 } }, +points={{ 0.0, 0.0 } ,{ -89.66076954395483, 0.0 } ,{ -89.66076954395483, 68.82481990289098 } ,{ -179.32153908790966, 68.82481990289098 } }, thickness=0.05, smooth=Smooth.None)); connect(schema_space_001.ports[1],data_bus.port_a[1]) annotation (Line( -points={{ 0.0, 0.0 } ,{ 96.54802547251735, 0.0 } ,{ 96.54802547251735, -57.95937773141203 } ,{ 193.0960509450347, -57.95937773141203 } }, +points={{ 0.0, 0.0 } ,{ -89.66076954395483, 0.0 } ,{ -89.66076954395483, 68.82481990289098 } ,{ -179.32153908790966, 68.82481990289098 } }, thickness=0.05, smooth=Smooth.None)); connect(schema_space_002.heaPorAir,data_bus.port[2]) annotation (Line( -points={{ 250.0, 150.0 } ,{ 221.54802547251734, 150.0 } ,{ 221.54802547251734, -57.95937773141203 } ,{ 193.0960509450347, -57.95937773141203 } }, +points={{ 250.0, 150.0 } ,{ 35.339230456045186, 150.0 } ,{ 35.33923045604516, 68.82481990289098 } ,{ -179.32153908790966, 68.82481990289098 } }, thickness=0.05, smooth=Smooth.None)); connect(schema_space_002.ports[1],data_bus.port_a[2]) annotation (Line( -points={{ 250.0, 150.0 } ,{ 221.54802547251734, 150.0 } ,{ 221.54802547251734, -57.95937773141203 } ,{ 193.0960509450347, -57.95937773141203 } }, +points={{ 250.0, 150.0 } ,{ 35.339230456045186, 150.0 } ,{ 35.33923045604516, 68.82481990289098 } ,{ -179.32153908790966, 68.82481990289098 } }, thickness=0.05, smooth=Smooth.None)); connect(schema_space_003.heaPorAir,data_bus.port[3]) annotation (Line( -points={{ 500.0, 150.0 } ,{ 346.54802547251734, 150.0 } ,{ 346.54802547251734, -57.95937773141203 } ,{ 193.0960509450347, -57.95937773141203 } }, +points={{ 500.0, 150.0 } ,{ 160.3392304560452, 150.0 } ,{ 160.33923045604516, 68.82481990289098 } ,{ -179.32153908790966, 68.82481990289098 } }, thickness=0.05, smooth=Smooth.None)); connect(schema_space_003.ports[1],data_bus.port_a[3]) annotation (Line( -points={{ 500.0, 150.0 } ,{ 346.54802547251734, 150.0 } ,{ 346.54802547251734, -57.95937773141203 } ,{ 193.0960509450347, -57.95937773141203 } }, +points={{ 500.0, 150.0 } ,{ 160.3392304560452, 150.0 } ,{ 160.33923045604516, 68.82481990289098 } ,{ -179.32153908790966, 68.82481990289098 } }, thickness=0.05, -smooth=Smooth.None));annotation (Diagram(coordinateSystem(extent={{-243.50711810628377,-248.3095977487813},{680.0,250.0}})), Icon( - coordinateSystem(extent={{-243.50711810628377,-248.3095977487813},{680.0,250.0}}))); +smooth=Smooth.None));annotation (Diagram(coordinateSystem(extent={{-244.70359726827792,-225.0},{680.0,250.0}})), Icon( + coordinateSystem(extent={{-244.70359726827792,-225.0},{680.0,250.0}}))); annotation ( - Documentation(info="Spaces

Spaces

Introduction

Introduction

nameschema_space_001
parameters
mSenFac1.0
AFlo100.0
hRoo2.5
linearizeRadiationtrue
m_flow_nominal0.01
T_start294.15
volume250.0
occupancy
nameoccupancy_11
parameters
emissions
nameparameters
system_007
nEle1
fraRad0.3
Q_flow_nominal2000.0
T_a_nominal363.15
T_b_nominal353.15
TAir_nominal293.15
TRad_nominal293.15
n1.9
deltaM0.01
from_dpfalse
dp_nominal1000.0
linearizedfalse
VWat0.116
mDry52.6
system_008
R7.0
delta00.01
dpFixed_nominal6000.0
l0.0001
from_dptrue
linearizedfalse
deltaM0.02
m_flow_nominal0.01
dpValve_nominal6000.0
external_boundaries
namesurfaceazimuthtiltconstruction
externalwall_17100.0180.0wall
nameconstruction_001
externalwall_18100.0180.0wall
nameconstruction_001
externalwall_19200.0180.0wall
nameconstruction_001
internal_elements
namesurfaceazimuthtiltconstruction
internal_schema_space_001_schema_space_00210.010.0wall
nameinternal_wall
internal_schema_space_001_schema_space_00310.010.0wall
nameinternal_wall
nameschema_space_002
parameters
mSenFac1.0
AFlo100.0
hRoo2.5
linearizeRadiationtrue
m_flow_nominal0.01
T_start294.15
volume250.0
occupancy
nameoccupancy_12
parameters
emissions
nameparameters
system_009
nEle1
fraRad0.3
Q_flow_nominal2000.0
T_a_nominal363.15
T_b_nominal353.15
TAir_nominal293.15
TRad_nominal293.15
n1.9
deltaM0.01
from_dpfalse
dp_nominal1000.0
linearizedfalse
VWat0.116
mDry52.6
system_010
R7.0
delta00.01
dpFixed_nominal6000.0
l0.0001
from_dptrue
linearizedfalse
deltaM0.02
m_flow_nominal0.01
dpValve_nominal6000.0
external_boundaries
namesurfaceazimuthtiltconstruction
externalwall_20100.0180.0wall
nameconstruction_001
externalwall_21100.0180.0wall
nameconstruction_001
externalwall_22200.0180.0wall
nameconstruction_001
internal_elements
namesurfaceazimuthtiltconstruction
internal_schema_space_001_schema_space_00210.010.0wall
nameinternal_wall
internal_schema_space_002_schema_space_00310.010.0wall
nameinternal_wall
nameschema_space_003
parameters
mSenFac1.0
AFlo100.0
hRoo2.5
linearizeRadiationtrue
m_flow_nominal0.01
T_start294.15
volume250.0
occupancy
nameoccupancy_13
parameters
emissions
nameparameters
system_011
nEle1
fraRad0.3
Q_flow_nominal2000.0
T_a_nominal363.15
T_b_nominal353.15
TAir_nominal293.15
TRad_nominal293.15
n1.9
deltaM0.01
from_dpfalse
dp_nominal1000.0
linearizedfalse
VWat0.116
mDry52.6
system_012
R7.0
delta00.01
dpFixed_nominal6000.0
l0.0001
from_dptrue
linearizedfalse
deltaM0.02
m_flow_nominal0.01
dpValve_nominal6000.0
external_boundaries
namesurfaceazimuthtiltconstruction
externalwall_23100.0180.0wall
nameconstruction_001
externalwall_24100.0180.0wall
nameconstruction_001
externalwall_25200.0180.0wall
nameconstruction_001
internal_elements
namesurfaceazimuthtiltconstruction
internal_schema_space_001_schema_space_00310.010.0wall
nameinternal_wall
internal_schema_space_002_schema_space_00310.010.0wall
nameinternal_wall

Conclusions

Conclusions

Spaces

Introduction

Introduction

nameconstruction_001
layers
materialthickness
namematerial_001
k0.035
c1000.0
rho2000.0
epsLw0.85
epsSw0.85
0.1
namematerial_002
k0.035
c1000.0
rho2000.0
epsLw0.85
epsSw0.85
0.1
namematerial_003
k0.035
c1000.0
rho2000.0
epsLw0.85
epsSw0.85
0.1
nameinternal_wall
layers
materialthickness
namebrick
k0.89
c790.0
rho1920.0
epsLw0.85
epsSw0.65
0.2

Conclusions

Conclusions

Spaces

Introduction

Introduction

namesystem_001
parameters
scaFacRad1.5
dTBoi_nominal20
dTRad_nominal10
a{0.9}
effCurBuildings.Fluid.Types.EfficiencyCurves.Constant
T_nominal353.15
fueBuildings.Fluid.Data.Fuels.HeatingOilLowerHeatingValue()
Q_flow_nominal2000
dp_nominal5000
linearizeFlowResistancefalse
deltaM0.1
show_Tfalse
VTan0.2
hTan2
nSeg4
dIns0.002
dp(3000 + 2000)*{2,1}
nominal_mass_flow_rate_boiler0.03571428571428571
nominal_mass_flow_radiator_loop0.07142857142857142
V_flow0.03571428571428571/1000*{0.5,1}

Conclusions

Conclusions

")); + Documentation(info="Spaces

Spaces

Introduction

Introduction

nameschema_space_001
parameters
mSenFac1.0
AFlo100.0
hRoo2.5
linearizeRadiationtrue
m_flow_nominal0.01
T_start294.15
volume250.0
occupancy
nameoccupancy_11
parameters
emissions
nameparameters
system_007
nEle1
fraRad0.3
Q_flow_nominal2000.0
T_a_nominal363.15
T_b_nominal353.15
TAir_nominal293.15
TRad_nominal293.15
n1.9
deltaM0.01
from_dpfalse
dp_nominal1000.0
linearizedfalse
VWat0.116
mDry52.6
system_008
R7.0
delta00.01
dpFixed_nominal6000.0
l0.0001
from_dptrue
linearizedfalse
deltaM0.02
m_flow_nominal0.01
dpValve_nominal6000.0
external_boundaries
namesurfaceazimuthtiltconstruction
externalwall_17100.0180.0wall
nameconstruction_001
externalwall_18100.0180.0wall
nameconstruction_001
externalwall_19200.0180.0wall
nameconstruction_001
internal_elements
namesurfaceazimuthtiltconstruction
internal_schema_space_001_schema_space_00210.010.0wall
nameinternal_wall
internal_schema_space_001_schema_space_00310.010.0wall
nameinternal_wall
nameschema_space_002
parameters
mSenFac1.0
AFlo100.0
hRoo2.5
linearizeRadiationtrue
m_flow_nominal0.01
T_start294.15
volume250.0
occupancy
nameoccupancy_12
parameters
emissions
nameparameters
system_009
nEle1
fraRad0.3
Q_flow_nominal2000.0
T_a_nominal363.15
T_b_nominal353.15
TAir_nominal293.15
TRad_nominal293.15
n1.9
deltaM0.01
from_dpfalse
dp_nominal1000.0
linearizedfalse
VWat0.116
mDry52.6
system_010
R7.0
delta00.01
dpFixed_nominal6000.0
l0.0001
from_dptrue
linearizedfalse
deltaM0.02
m_flow_nominal0.01
dpValve_nominal6000.0
external_boundaries
namesurfaceazimuthtiltconstruction
externalwall_20100.0180.0wall
nameconstruction_001
externalwall_21100.0180.0wall
nameconstruction_001
externalwall_22200.0180.0wall
nameconstruction_001
internal_elements
namesurfaceazimuthtiltconstruction
internal_schema_space_001_schema_space_00210.010.0wall
nameinternal_wall
internal_schema_space_002_schema_space_00310.010.0wall
nameinternal_wall
nameschema_space_003
parameters
mSenFac1.0
AFlo100.0
hRoo2.5
linearizeRadiationtrue
m_flow_nominal0.01
T_start294.15
volume250.0
occupancy
nameoccupancy_13
parameters
emissions
nameparameters
system_011
nEle1
fraRad0.3
Q_flow_nominal2000.0
T_a_nominal363.15
T_b_nominal353.15
TAir_nominal293.15
TRad_nominal293.15
n1.9
deltaM0.01
from_dpfalse
dp_nominal1000.0
linearizedfalse
VWat0.116
mDry52.6
system_012
R7.0
delta00.01
dpFixed_nominal6000.0
l0.0001
from_dptrue
linearizedfalse
deltaM0.02
m_flow_nominal0.01
dpValve_nominal6000.0
external_boundaries
namesurfaceazimuthtiltconstruction
externalwall_23100.0180.0wall
nameconstruction_001
externalwall_24100.0180.0wall
nameconstruction_001
externalwall_25200.0180.0wall
nameconstruction_001
internal_elements
namesurfaceazimuthtiltconstruction
internal_schema_space_001_schema_space_00310.010.0wall
nameinternal_wall
internal_schema_space_002_schema_space_00310.010.0wall
nameinternal_wall

Conclusions

Conclusions

Spaces

Introduction

Introduction

nameinternal_wall
layers
materialthickness
namebrick
k0.89
c790.0
rho1920.0
epsLw0.85
epsSw0.65
0.2
nameconstruction_001
layers
materialthickness
namematerial_001
k0.035
c1000.0
rho2000.0
epsLw0.85
epsSw0.85
0.1
namematerial_002
k0.035
c1000.0
rho2000.0
epsLw0.85
epsSw0.85
0.1
namematerial_003
k0.035
c1000.0
rho2000.0
epsLw0.85
epsSw0.85
0.1

Conclusions

Conclusions

Spaces

Introduction

Introduction

namesystem_001
parameters
scaFacRad1.5
dTBoi_nominal20
dTRad_nominal10
a{0.9}
effCurBuildings.Fluid.Types.EfficiencyCurves.Constant
T_nominal353.15
fueBuildings.Fluid.Data.Fuels.HeatingOilLowerHeatingValue()
Q_flow_nominal2000
dp_nominal5000
linearizeFlowResistancefalse
deltaM0.1
show_Tfalse
VTan0.2
hTan2
nSeg4
dIns0.002
dp(3000 + 2000)*{2,1}
nominal_mass_flow_rate_boiler0.03571428571428571
nominal_mass_flow_radiator_loop0.07142857142857142
V_flow0.03571428571428571/1000*{0.5,1}

Conclusions

Conclusions

")); end building; -end house; +end house; \ No newline at end of file diff --git a/trano/data_models/conversion.py b/trano/data_models/conversion.py index 63b2931..c207460 100644 --- a/trano/data_models/conversion.py +++ b/trano/data_models/conversion.py @@ -1,5 +1,7 @@ import json +from collections import Counter from pathlib import Path +from typing import Any, Dict from trano.construction import Construction, Layer from trano.material import Material @@ -16,6 +18,7 @@ from trano.models.elements.split_valve import SplitValve from trano.models.elements.three_way_valve import ThreeWayValve from trano.models.elements.valve import Valve +from trano.models.elements.weather import Weather from trano.topology import Network @@ -82,19 +85,24 @@ def convert_model(name: str, model_path: Path) -> str: # noqa: PLR0912, PLR0915 ) space_dict[space_.name] = space_ spaces.append(space_) - network.add_boiler_plate_spaces(spaces) + network.add_boiler_plate_spaces(spaces, weather=Weather(name="weather")) edges = [] - + system_counter: Dict[str, Any] = Counter() for system in data["systems"]: for system_type, value in system.items(): if system_type == "boiler": + boiler = Boiler( name=value["id"], control=BoilerControl(name="boiler_control") ) systems[value["id"]] = boiler if system_type == "three_way_valve": + system_counter.update([system_type]) three_way_valve = ThreeWayValve( - name=value["id"], control=ThreeWayValveControl() + name=value["id"], + control=ThreeWayValveControl( + name=f"{system_type}_{system_counter[system_type]}" + ), ) systems[value["id"]] = three_way_valve if system_type == "pump": From a7674fdac082d8285e41c2692ea623bb78c068ab Mon Sep 17 00:00:00 2001 From: aan Date: Tue, 6 Aug 2024 20:57:43 +0200 Subject: [PATCH 04/11] feat: Linting --- tests/data/house.mo | 16 ++++++++-------- tests/test_schema.py | 7 +++++++ 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/tests/data/house.mo b/tests/data/house.mo index 8505300..b92c393 100644 --- a/tests/data/house.mo +++ b/tests/data/house.mo @@ -467,7 +467,7 @@ Controls.BaseClasses.DataBus dataBus equation connect(dataBus.OccupiedSchema_space_001, occSch2.occupied); end OccupancyOccupancy_11; - + model EmissionControlEmissioncontrol_9 parameter Real schedule[:]=3600*{7,19}; @@ -531,7 +531,7 @@ Controls.BaseClasses.DataBus dataBus equation connect(dataBus.OccupiedSchema_space_002, occSch2.occupied); end OccupancyOccupancy_12; - + model EmissionControlEmissioncontrol_10 parameter Real schedule[:]=3600*{7,19}; @@ -595,7 +595,7 @@ Controls.BaseClasses.DataBus dataBus equation connect(dataBus.OccupiedSchema_space_003, occSch2.occupied); end OccupancyOccupancy_13; - + model CollectorControlPump_control Buildings.Controls.OBC.CDL.Reals.PIDWithReset conPum( controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PI, @@ -697,7 +697,7 @@ connect(dataBus.TAirOutSystem_001, lesThrTOut.u); connect(dataBus.yBoiConSystem_001, booToReaBoi.y); connect(dataBus.yPumBoiSystem_001, booToReaPum.y); end BoilerControlBoiler_control; - + model DataServer replaceable package Medium = Modelica.Media.Interfaces.PartialMedium; Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor[3] @@ -769,7 +769,7 @@ triggerThree_way_valve_1.y); connect(dataBus.triggerThree_way_valve_2, triggerThree_way_valve_2.y); end DataServer; - + partial model PartialBoilerControl @@ -1201,7 +1201,7 @@ connect(dataBus.yPumBoiSystem_001, pumBoi.y); connect(dataBus.TStoTopSystem_001, tanTemTop.T); connect(dataBus.TStoBotSystem_001, tanTemBot.T); end BoilerWithStorageSystem_001; - + end Boilers; @@ -2397,7 +2397,7 @@ connect(dataBus.ySystem_002, pumRad.y); connect(dataBus.y_gainSystem_002, gain.y); connect(dataBus.TPump_control, temSup.T); end PumpSystem_002; - + end Ventilation; end Fluid; @@ -3216,4 +3216,4 @@ smooth=Smooth.None));annotation (Diagram(coordinateSystem(extent={{-244.70359726 end building; -end house; \ No newline at end of file +end house; diff --git a/tests/test_schema.py b/tests/test_schema.py index f0987ad..0ae5aec 100644 --- a/tests/test_schema.py +++ b/tests/test_schema.py @@ -71,3 +71,10 @@ def test_create_model() -> None: model_path = Path(__file__).parents[1].joinpath("tests", "house.json") model_ = convert_model(model_name, model_path) assert clean_model(model_, model_name) == set(_read(model_name)) + + +def test_create_model_yaml() -> None: + model_name = "house" + model_path = Path(__file__).parents[1].joinpath("tests", "house.yaml") + model_ = convert_model(model_name, model_path) + assert clean_model(model_, model_name) == set(_read(model_name)) From 4b7cf2759537b26f232d631937faa9502e62f177 Mon Sep 17 00:00:00 2001 From: aan Date: Tue, 6 Aug 2024 21:35:25 +0200 Subject: [PATCH 05/11] feat: Add yaml read. --- tests/data/house_yaml.mo | 3219 +++++++++++++++++++++++++++++++ tests/test_schema.py | 2 +- trano/data_models/conversion.py | 11 +- trano/data_models/trano.yaml | 6 +- 4 files changed, 3232 insertions(+), 6 deletions(-) create mode 100644 tests/data/house_yaml.mo diff --git a/tests/data/house_yaml.mo b/tests/data/house_yaml.mo new file mode 100644 index 0000000..ac7f05a --- /dev/null +++ b/tests/data/house_yaml.mo @@ -0,0 +1,3219 @@ +package house_yaml + +package Common + package Occupancy + + model SimpleOccupancy + + parameter Real occupancy[:]=3600*{7, 19} + "Occupancy table, each entry switching occupancy on or off"; + + parameter Real gain[:, :]=[35; 70; 30] + "Gain to convert from occupancy (per person) to radiant, convective and latent heat in [W/m2] "; + + parameter Real k=1/6/4 + "Heat gain if occupied"; + + Buildings.Controls.SetPoints.OccupancySchedule + occSch2(firstEntryOccupied=true, + occupancy=occupancy) + "Occupancy schedule" + annotation (Placement(transformation(extent={{-66,-22},{-46,-2}}))); + Buildings.Controls.OBC.CDL.Reals.Switch switch2 + annotation (Placement(transformation(extent={{-20,-12},{0,8}}))); + Modelica.Blocks.Math.MatrixGain gai2(K=gain) + "Gain to convert from occupancy (per person) to radiant, convective and latent heat in [W/m2] " + annotation (Placement(transformation(extent={{18,-12},{38,8}}))); + extends Modelica.Blocks.Interfaces.MO(final nout=3); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant occ2(k=k) + "Heat gain if occupied in room 2" + annotation (Placement(transformation(extent={{-66,28},{-46,48}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zero(k=0) + "Heat gain if occupied in room 2" + annotation (Placement(transformation(extent={{-62,-68},{-42,-48}}))); +equation + connect(occSch2.occupied,switch2. u2) annotation (Line( + points={{-45,-18},{-28,-18},{-28,-2},{-22,-2}}, + color={255,0,255}, + smooth=Smooth.None)); + connect(switch2.y,gai2. u[1]) annotation (Line( + points={{2,-2},{16,-2}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(occ2.y,switch2. u1) annotation (Line(points={{-44,38},{-40,38},{-40,6}, + {-22,6}}, color={0,0,127})); + connect(zero.y, switch2.u3) + annotation (Line(points={{-40,-58},{-22,-58},{-22,-10}}, color={0,0,127})); + connect(gai2.y, y) annotation (Line(points={{39,-2},{96,-2},{96,0},{110,0}}, + color={0,0,127})); + annotation (Icon(coordinateSystem(preserveAspectRatio=false), graphics={ + Ellipse(extent={{10,70},{-26,34}}, lineColor={28,108,200}), + Line(points={{-8,34},{-8,-26}}, color={28,108,200}), + Line(points={{-8,-26},{-48,-68}}, color={28,108,200}), + Line(points={{-8,-26},{34,-70},{32,-70}}, color={28,108,200}), + Line(points={{-8,20},{-48,-8}}, color={28,108,200}), + Line(points={{-8,20},{44,-8}}, color={28,108,200})}), Diagram( + coordinateSystem(preserveAspectRatio=false))); +end SimpleOccupancy; + + end Occupancy; + + package Controls + package BaseClasses + expandable connector DataBus + extends Modelica.Icons.SignalBus; + annotation ( + Icon(coordinateSystem(preserveAspectRatio=true, extent={{-100,-100},{100, + 100}}), graphics={Rectangle( + extent={{-20,2},{22,-2}}, + lineColor={255,204,51}, + lineThickness=0.5)}), + Documentation(info=" +

+This connector defines the expandable connector ControlBus that +is used to connect control signals. +Note, this connector is empty. When using it, the actual content is +constructed by the signals connected to this bus. +

+")); + end DataBus; + annotation ( + Icon(graphics={ Rectangle(lineColor = {200, 200, 200}, fillColor = {248, 248, 248}, + fillPattern = FillPattern.HorizontalCylinder, extent = {{-100, -100}, {100, 100}}, radius = 25), Rectangle(lineColor = {128, 128, 128}, extent = {{-100, -100}, {100, 100}}, radius = 25), Ellipse(lineColor = {128, 128, 128}, fillColor = {255, 255, 255}, + fillPattern = FillPattern.Solid, extent = {{-30, -30}, {30, 30}})})); + end BaseClasses; + + package Interfaces + partial model BaseSpaceControl + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a port annotation ( + Placement(transformation(extent = {{-110, -10}, {-90, 10}}), iconTransformation(extent = {{-110, -10}, {-90, 10}}))); + Modelica.Blocks.Interfaces.RealOutput y annotation ( + Placement(transformation(origin = {106, 0}, extent = {{-10, -10}, {10, 10}}), iconTransformation(origin = {106, 0}, extent = {{-10, -10}, {10, 10}}))); + equation + + annotation ( + Icon, + Diagram); + end BaseSpaceControl; + + partial model BaseSubstanceSpaceControl + replaceable package Medium = Modelica.Media.Interfaces.PartialMedium + "Medium model" annotation (choicesAllMatching=true); + Modelica.Fluid.Interfaces.FluidPort_a port_a( + redeclare final package Medium = Medium) + "Fluid connector a (positive design flow direction is from port_a to port_b)" + annotation (Placement(transformation(extent={{-116,-16},{-82,16}}), + iconTransformation(extent={{-110,-9},{-90,9}}))); + Modelica.Blocks.Interfaces.RealOutput y annotation ( + Placement(transformation(origin = {106, 0}, extent = {{-10, -10}, {10, 10}}), iconTransformation(origin = {106, 0}, extent = {{-10, -10}, {10, 10}}))); + equation + + annotation ( + Icon, + Diagram); + end BaseSubstanceSpaceControl; + annotation ( + Icon(graphics={ Rectangle(lineColor = {200, 200, 200}, fillColor = {248, 248, 248}, + fillPattern = FillPattern.HorizontalCylinder, extent = {{-100, -100}, {100, 100}}, radius = 25), Rectangle(lineColor = {128, 128, 128}, extent = {{-100, -100}, {100, 100}}, radius = 25), Polygon(origin = {20, 0}, lineColor = {64, 64, 64}, fillColor = {255, 255, 255}, + fillPattern = FillPattern.Solid, points = {{-10, 70}, {10, 70}, {40, 20}, {80, 20}, {80, -20}, {40, -20}, {10, -70}, {-10, -70}, {-10, 70}}), Polygon(fillColor = {102, 102, 102}, pattern = LinePattern.None, + fillPattern = FillPattern.Solid, points = {{-100, 20}, {-60, 20}, {-30, 70}, {-10, 70}, {-10, -70}, {-30, -70}, {-60, -20}, {-100, -20}, {-100, 20}})})); + end Interfaces; + + package SpaceControls + model PID + extends Common.Controls.Interfaces.BaseSpaceControl; + + parameter .Modelica.Blocks.Types.SimpleController controllerType= + .Modelica.Blocks.Types.SimpleController.PID "Type of controller"; + parameter Real k(min=0, unit="1") = 1 "Gain of controller"; + parameter Modelica.Units.SI.Time Ti(min=Modelica.Constants.small)=0.5 + "Time constant of Integrator block" annotation (Dialog(enable= + controllerType == .Modelica.Blocks.Types.SimpleController.PI or + controllerType == .Modelica.Blocks.Types.SimpleController.PID)); + parameter Modelica.Units.SI.Time Td(min=0)=0.1 + "Time constant of Derivative block" annotation (Dialog(enable= + controllerType == .Modelica.Blocks.Types.SimpleController.PD or + controllerType == .Modelica.Blocks.Types.SimpleController.PID)); + parameter Real yMax(start=1) "Upper limit of output"; + parameter Real yMin=-yMax "Lower limit of output"; + parameter Modelica.Units.SI.Temperature setPoint; + Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor TRoo annotation ( + Placement(transformation(origin = {-542, -226}, extent = {{480, 216}, {500, 236}}))); + Modelica.Blocks.Continuous.LimPID conRoo(yMax = yMax, yMin = yMin, controllerType = controllerType, k = k, Ti = Ti, Td = Td) annotation ( + Placement(transformation(origin = {50, 0}, extent = {{-10, -10}, {10, 10}}))); + Modelica.Blocks.Sources.RealExpression realExpression(y=setPoint) + annotation (Placement(transformation(extent={{-42,36},{-22,56}}))); + equation + connect(port, TRoo.port) annotation ( + Line(points = {{-100, 0}, {-62, 0}}, color = {191, 0, 0})); + connect(conRoo.y, y) annotation ( + Line(points={{61,0},{106,0}}, color = {0, 0, 127})); + connect(TRoo.T, conRoo.u_m) annotation ( + Line(points={{-41,0},{4,0},{4,-36},{50,-36},{50,-12}}, color = {0, 0, 127})); + connect(realExpression.y, conRoo.u_s) annotation (Line(points={{-21,46},{32,46}, + {32,0},{38,0}}, color={0,0,127})); + annotation ( + Icon(graphics={ Rectangle(lineColor = {0, 0, 127}, fillColor = {255, 255, 255}, + fillPattern = FillPattern.Solid, extent = {{-100, -100}, {100, 100}}), Line(points = {{-80, 78}, {-80, -90}}, color = {192, 192, 192}), Polygon(lineColor = {192, 192, 192}, fillColor = {192, 192, 192}, + fillPattern = FillPattern.Solid, points = {{-80, 90}, {-88, 68}, {-72, 68}, {-80, 90}}), Line(points = {{-90, -80}, {82, -80}}, color = {192, 192, 192}), Polygon(lineColor = {192, 192, 192}, fillColor = {192, 192, 192}, + fillPattern = FillPattern.Solid, points = {{90, -80}, {68, -72}, {68, -88}, {90, -80}}), Line(points = {{-80, -80}, {-80, -20}, {60, 80}}, color = {0, 0, 127}), Text(textColor = {192, 192, 192}, extent = {{-20, -60}, {80, -20}}, textString = "PID")})); + end PID; + + model PIDSubstance + + replaceable package Medium = Modelica.Media.Interfaces.PartialMedium + "Medium model" annotation (choicesAllMatching=true); + extends Common.Controls.Interfaces.BaseSubstanceSpaceControl; + + parameter .Modelica.Blocks.Types.SimpleController controllerType= + .Modelica.Blocks.Types.SimpleController.PID "Type of controller"; + parameter Real k(min=0, unit="1") = 1 "Gain of controller"; + parameter Modelica.Units.SI.Time Ti(min=Modelica.Constants.small)=0.5 + "Time constant of Integrator block" annotation (Dialog(enable= + controllerType == .Modelica.Blocks.Types.SimpleController.PI or + controllerType == .Modelica.Blocks.Types.SimpleController.PID)); + parameter Modelica.Units.SI.Time Td(min=0)=0.1 + "Time constant of Derivative block" annotation (Dialog(enable= + controllerType == .Modelica.Blocks.Types.SimpleController.PD or + controllerType == .Modelica.Blocks.Types.SimpleController.PID)); + parameter Real yMax(start=1) "Upper limit of output"; + parameter Real yMin=-yMax "Lower limit of output"; + parameter Modelica.Units.SI.Temperature setPoint; + Buildings.Fluid.Sensors.PPM TRoo( redeclare + package Medium = Medium) annotation ( + Placement(transformation(origin = {-542, -226}, extent = {{480, 216}, {500, 236}}))); + Modelica.Blocks.Continuous.LimPID conRoo(yMax = yMax, yMin = yMin, controllerType = controllerType, k = k, Ti = Ti, Td = Td) annotation ( + Placement(transformation(origin = {50, 0}, extent = {{-10, -10}, {10, 10}}))); + Modelica.Blocks.Sources.RealExpression realExpression(y=setPoint) + annotation (Placement(transformation(extent={{-42,38},{-22,58}}))); + equation + connect(conRoo.y, y) annotation ( + Line(points={{61,0},{106,0}}, color = {0, 0, 127})); + connect(realExpression.y, conRoo.u_s) annotation (Line(points={{-21,48}, + {32,48},{32,0},{38,0}}, + color={0,0,127})); + connect(TRoo.ppm, conRoo.u_m) annotation (Line(points={{-41,0},{30,0},{30,-18}, + {50,-18},{50,-12}}, color={0,0,127})); + connect(port_a, TRoo.port) annotation (Line(points={{-99,0},{-68,0},{ + -68,-14},{-52,-14},{-52,-10}}, color={0,127,255})); + annotation ( + Icon(graphics={ Rectangle(lineColor = {0, 0, 127}, fillColor = {255, 255, 255}, + fillPattern = FillPattern.Solid, extent = {{-100, -100}, {100, 100}}), Line(points = {{-80, 78}, {-80, -90}}, color = {192, 192, 192}), Polygon(lineColor = {192, 192, 192}, fillColor = {192, 192, 192}, + fillPattern = FillPattern.Solid, points = {{-80, 90}, {-88, 68}, {-72, 68}, {-80, 90}}), Line(points = {{-90, -80}, {82, -80}}, color = {192, 192, 192}), Polygon(lineColor = {192, 192, 192}, fillColor = {192, 192, 192}, + fillPattern = FillPattern.Solid, points = {{90, -80}, {68, -72}, {68, -88}, {90, -80}}), Line(points = {{-80, -80}, {-80, -20}, {60, 80}}, color = {0, 0, 127}), Text(textColor = {192, 192, 192}, extent = {{-20, -60}, {80, -20}}, textString = "PID")})); + end PIDSubstance; + + + + annotation ( + Icon(graphics={ Rectangle(lineColor = {200, 200, 200}, fillColor = {248, 248, 248}, + fillPattern = FillPattern.HorizontalCylinder, extent = {{-100, -100}, {100, 100}}, radius = 25)})); + end SpaceControls; + annotation ( + Icon(graphics={ Rectangle(lineColor = {200, 200, 200}, fillColor = {248, 248, 248}, + fillPattern = FillPattern.HorizontalCylinder, extent = {{-100, -100}, {100, 100}}, radius = 25), Rectangle(lineColor = {200, 200, 200}, fillColor = {248, 248, 248}, + fillPattern = FillPattern.HorizontalCylinder, extent = {{-100, -100}, {100, 100}}, radius = 25), Rectangle(lineColor = {128, 128, 128}, extent = {{-100, -100}, {100, 100}}, radius = 25), Rectangle(origin = {0, 35.1488}, fillColor = {255, 255, 255}, extent = {{-30, -20.1488}, {30, 20.1488}}), Rectangle(origin = {0, -34.8512}, fillColor = {255, 255, 255}, extent = {{-30, -20.1488}, {30, 20.1488}}), Line(origin = {-51.25, 0}, points = {{21.25, -35}, {-13.75, -35}, {-13.75, 35}, {6.25, 35}}), Polygon(origin = {-40, 35}, pattern = LinePattern.None, + fillPattern = FillPattern.Solid, points = {{10, 0}, {-5, 5}, {-5, -5}, {10, 0}}), Line(origin = {51.25, 0}, points = {{-21.25, 35}, {13.75, 35}, {13.75, -35}, {-6.25, -35}}), Polygon(origin = {40, -35}, pattern = LinePattern.None, + fillPattern = FillPattern.Solid, points = {{-10, 0}, {5, 5}, {5, -5}, {-10, 0}})})); + + + package ventilation + model AHU_G36 + parameter Real VUncDesOutAir_flow=0.03; + parameter Real VDesTotOutAir_flow=0.03; + Buildings.Controls.OBC.ASHRAE.G36.AHUs.MultiZone.VAV.Controller + mulAHUCon( + eneStd=Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1, + + venStd=Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1, + + ashCliZon=Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_1A, + + have_frePro=false, + minOADes=Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.DedicatedDampersAirflow, + + buiPreCon=Buildings.Controls.OBC.ASHRAE.G36.Types.PressureControl.BarometricRelief, + + ecoHigLimCon=Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb, + + cooCoi=Buildings.Controls.OBC.ASHRAE.G36.Types.CoolingCoil.None, + heaCoi=Buildings.Controls.OBC.ASHRAE.G36.Types.HeatingCoil.None, + have_perZonRehBox=false, VUncDesOutAir_flow = VUncDesOutAir_flow, VDesTotOutAir_flow = VDesTotOutAir_flow) + annotation (Placement(transformation(extent={{-12,-14},{28,74}}))); + BaseClasses.DataBus dataBus annotation (Placement(transformation( + extent={{-120,-20},{-80,20}}), iconTransformation(extent={{ + -112,-10},{-92,10}}))); + equation + connect(mulAHUCon.ySupFan, dataBus.ySupFan) annotation (Line(points={ + {30,27.8},{36,27.8},{36,-20},{-74,-20},{-74,0},{-100,0}}, + color={0,0,127}), Text( + string="%second", + index=1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + connect(mulAHUCon.y1SupFan, dataBus.y1SupFan) annotation (Line(points + ={{30,30},{38,30},{38,-22},{-76,-22},{-76,0},{-100,0}}, color={ + 255,0,255}), Text( + string="%second", + index=1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + connect(mulAHUCon.yOutDam, dataBus.yOutDam) annotation (Line(points={ + {30,37},{36,37},{36,20},{34,20},{34,-18},{-70,-18},{-70,0},{ + -100,0}}, color={0,0,127}), Text( + string="%second", + index=1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + connect(mulAHUCon.yRetDam, dataBus.yRetDam) annotation (Line(points={ + {30,43},{36,43},{36,78},{-74,78},{-74,0},{-100,0}}, color={0, + 0,127}), Text( + string="%second", + index=1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + connect(mulAHUCon.yMinOutDam, dataBus.yMinOutDam) annotation (Line( + points={{30,49},{38,49},{38,80},{-78,80},{-78,24},{-76,24},{-76, + 0},{-100,0}}, color={0,0,127}), Text( + string="%second", + index=1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + connect(mulAHUCon.VEffAirOut_flow_min, dataBus.VEffAirOut_flow_min) + annotation (Line(points={{30,53},{30,58},{34,58},{34,76},{-72,76},{ + -72,0},{-100,0}}, color={0,0,127}), Text( + string="%second", + index=1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + connect(mulAHUCon.TAirSupSet, dataBus.TAirSupSet) annotation (Line( + points={{30,64},{34,64},{34,70},{32,70},{32,76},{-20,76},{-20,0}, + {-100,0}}, color={0,0,127}), Text( + string="%second", + index=1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + connect(dataBus.VAirOut_flow, mulAHUCon.VAirOut_flow) annotation ( + Line( + points={{-100,0},{-22,0},{-22,37},{-14,37}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + connect(dataBus.uOutAirFra_max, mulAHUCon.uOutAirFra_max) annotation + (Line( + points={{-100,0},{-24,0},{-24,47},{-14,47}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + connect(dataBus.VSumZonPri_flow, mulAHUCon.VSumZonPri_flow) + annotation (Line( + points={{-100,0},{-26,0},{-26,50},{-14,50}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + connect(dataBus.VSumAdjAreBreZon_flow, mulAHUCon.VSumAdjAreBreZon_flow) + annotation (Line( + points={{-100,0},{-28,0},{-28,53},{-14,53}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + connect(dataBus.TAirSup, mulAHUCon.TAirSup) annotation (Line( + points={{-100,0},{-30,0},{-30,58},{-14,58}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + connect(dataBus.u1SupFan, mulAHUCon.u1SupFan) annotation (Line( + points={{-100,0},{-32,0},{-32,61},{-14,61}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + connect(dataBus.uZonTemResReq, mulAHUCon.uZonTemResReq) annotation ( + Line( + points={{-100,0},{-34,0},{-34,63},{-14,63}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + connect(dataBus.TOut, mulAHUCon.TOut) annotation (Line( + points={{-100,0},{-36,0},{-36,66},{-14,66}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + connect(dataBus.dpDuc, mulAHUCon.dpDuc) annotation (Line( + points={{-100,0},{-38,0},{-38,68},{-14,68}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + connect(dataBus.uZonPreResReq, mulAHUCon.uZonPreResReq) annotation ( + Line( + points={{-100,0},{-40,0},{-40,71},{-14,71}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + connect(dataBus.uAhuOpeMod, mulAHUCon.uAhuOpeMod) annotation (Line( + points={{-100,0},{-42,0},{-42,73},{-14,73}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + connect(dataBus.VSumAdjPopBreZon_flow, mulAHUCon.VSumAdjPopBreZon_flow) + annotation (Line( + points={{-100,0},{-14,0},{-14,55}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-3,-6},{-3,-6}}, + horizontalAlignment=TextAlignment.Right)); + annotation (Icon(coordinateSystem(preserveAspectRatio=false), + graphics={Rectangle( + extent={{-100,98},{98,-100}}, + lineColor={28,108,200}, + fillColor={28,108,200}, + fillPattern=FillPattern.Solid)}), Diagram(coordinateSystem( + preserveAspectRatio=false))); + end AHU_G36; + model EmissionControlEmissioncontrol_8 + parameter Real schedule[:]=3600*{7,19}; + + parameter Modelica.Units.SI.Temperature THeaSet= 273.15+24; + parameter Modelica.Units.SI.Temperature THeaSetBack= 273.15+16; +Buildings.Controls.OBC.ASHRAE.G36.ThermalZones.ControlLoops +emissionControl( kCooCon=0.0, + TiCooCon=900, + kHeaCon=0.1, + TiHeaCon=900, + timChe=30, + dTHys=0.25, + looHys=0.01 +) +annotation (Placement(transformation(extent={{-36,-36},{28,38}}))); Modelica.Blocks.Interfaces.RealOutput y +annotation (Placement(transformation(extent={{100,-8},{120,12}}))); + + Buildings.Controls.SetPoints.OccupancySchedule + occSch2(firstEntryOccupied=true, occupancy= + schedule) + +annotation (Placement(transformation(extent={{-116,-36},{-96,-16}}))); + Buildings.Controls.OBC.CDL.Reals.Switch switch2 +annotation (Placement(transformation(extent={{-70,-26},{-50,-6}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant setpoint(k=THeaSet) + "Heat gain if occupied in room 2" + annotation (Placement(transformation(extent={{-116,14},{-96,34}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant setback(k=THeaSetBack) + "Heat gain if occupied in room 2" + annotation (Placement(transformation(extent={{-112,-82},{-92,-62}}))); +Controls.BaseClasses.DataBus dataBus + annotation (Placement(transformation( + extent={{-120,-18},{-80,22}}), iconTransformation(extent={{-120,62},{-78,98}}))); +equation +connect(emissionControl.yHea, y) annotation (Line(points={{34.4,-21.2},{96,-21.2}, +{96,2},{110,2}}, color={0,0,127})); + connect( +emissionControl.yHea, y) annotation (Line(points={{60.4,-21.2},{96,-21.2},{96,2}, + {110,2}}, color={0,0,127})); + connect(occSch2. + occupied, switch2.u2) annotation (Line( + points={{-95,-32},{-78,-32},{-78,-16},{-72,-16}}, + color={255,0,255}, + smooth=Smooth.None)); + connect(setpoint.y, switch2.u1) annotation (Line(points={{-94,24},{-90,24},{-90, + -8},{-72,-8}}, color={0,0,127})); + connect(setback.y, switch2.u3) + annotation (Line(points={{-90,-72},{-72,-72},{-72,-24}}, color={0,0,127})); + connect(switch2.y, emissionControl.THeaSet) annotation (Line(points={{-52,-22}, + {-52,-21.2},{-42.4,-21.2}}, color={0,0,127})); +connect(dataBus.TCooSetSchema_space_001, emissionControl.TCooSet); +connect(dataBus.TZonSchema_space_001, emissionControl.TZon); +connect(dataBus.yCooSystem_008, emissionControl.yCoo); +connect(dataBus.yHeaSystem_008, emissionControl.yHea); +end EmissionControlEmissioncontrol_8; + model OccupancyOccupancy_11 +extends house_yaml.Common.Occupancy.SimpleOccupancy ; +Controls.BaseClasses.DataBus dataBus + annotation (Placement(transformation( + extent={{-120,-18},{-80,22}}), iconTransformation(extent={{-120,62},{-78,98}}))); +equation +connect(dataBus.OccupiedSchema_space_001, occSch2.occupied); + end OccupancyOccupancy_11; + + model EmissionControlEmissioncontrol_9 + parameter Real schedule[:]=3600*{7,19}; + + parameter Modelica.Units.SI.Temperature THeaSet= 273.15+24; + parameter Modelica.Units.SI.Temperature THeaSetBack= 273.15+16; +Buildings.Controls.OBC.ASHRAE.G36.ThermalZones.ControlLoops +emissionControl( kCooCon=0.0, + TiCooCon=900, + kHeaCon=0.1, + TiHeaCon=900, + timChe=30, + dTHys=0.25, + looHys=0.01 +) +annotation (Placement(transformation(extent={{-36,-36},{28,38}}))); Modelica.Blocks.Interfaces.RealOutput y +annotation (Placement(transformation(extent={{100,-8},{120,12}}))); + + Buildings.Controls.SetPoints.OccupancySchedule + occSch2(firstEntryOccupied=true, occupancy= + schedule) + +annotation (Placement(transformation(extent={{-116,-36},{-96,-16}}))); + Buildings.Controls.OBC.CDL.Reals.Switch switch2 +annotation (Placement(transformation(extent={{-70,-26},{-50,-6}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant setpoint(k=THeaSet) + "Heat gain if occupied in room 2" + annotation (Placement(transformation(extent={{-116,14},{-96,34}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant setback(k=THeaSetBack) + "Heat gain if occupied in room 2" + annotation (Placement(transformation(extent={{-112,-82},{-92,-62}}))); +Controls.BaseClasses.DataBus dataBus + annotation (Placement(transformation( + extent={{-120,-18},{-80,22}}), iconTransformation(extent={{-120,62},{-78,98}}))); +equation +connect(emissionControl.yHea, y) annotation (Line(points={{34.4,-21.2},{96,-21.2}, +{96,2},{110,2}}, color={0,0,127})); + connect( +emissionControl.yHea, y) annotation (Line(points={{60.4,-21.2},{96,-21.2},{96,2}, + {110,2}}, color={0,0,127})); + connect(occSch2. + occupied, switch2.u2) annotation (Line( + points={{-95,-32},{-78,-32},{-78,-16},{-72,-16}}, + color={255,0,255}, + smooth=Smooth.None)); + connect(setpoint.y, switch2.u1) annotation (Line(points={{-94,24},{-90,24},{-90, + -8},{-72,-8}}, color={0,0,127})); + connect(setback.y, switch2.u3) + annotation (Line(points={{-90,-72},{-72,-72},{-72,-24}}, color={0,0,127})); + connect(switch2.y, emissionControl.THeaSet) annotation (Line(points={{-52,-22}, + {-52,-21.2},{-42.4,-21.2}}, color={0,0,127})); +connect(dataBus.TCooSetSchema_space_002, emissionControl.TCooSet); +connect(dataBus.TZonSchema_space_002, emissionControl.TZon); +connect(dataBus.yCooSystem_010, emissionControl.yCoo); +connect(dataBus.yHeaSystem_010, emissionControl.yHea); +end EmissionControlEmissioncontrol_9; + model OccupancyOccupancy_12 +extends house_yaml.Common.Occupancy.SimpleOccupancy ; +Controls.BaseClasses.DataBus dataBus + annotation (Placement(transformation( + extent={{-120,-18},{-80,22}}), iconTransformation(extent={{-120,62},{-78,98}}))); +equation +connect(dataBus.OccupiedSchema_space_002, occSch2.occupied); + end OccupancyOccupancy_12; + + model EmissionControlEmissioncontrol_10 + parameter Real schedule[:]=3600*{7,19}; + + parameter Modelica.Units.SI.Temperature THeaSet= 273.15+24; + parameter Modelica.Units.SI.Temperature THeaSetBack= 273.15+16; +Buildings.Controls.OBC.ASHRAE.G36.ThermalZones.ControlLoops +emissionControl( kCooCon=0.0, + TiCooCon=900, + kHeaCon=0.1, + TiHeaCon=900, + timChe=30, + dTHys=0.25, + looHys=0.01 +) +annotation (Placement(transformation(extent={{-36,-36},{28,38}}))); Modelica.Blocks.Interfaces.RealOutput y +annotation (Placement(transformation(extent={{100,-8},{120,12}}))); + + Buildings.Controls.SetPoints.OccupancySchedule + occSch2(firstEntryOccupied=true, occupancy= + schedule) + +annotation (Placement(transformation(extent={{-116,-36},{-96,-16}}))); + Buildings.Controls.OBC.CDL.Reals.Switch switch2 +annotation (Placement(transformation(extent={{-70,-26},{-50,-6}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant setpoint(k=THeaSet) + "Heat gain if occupied in room 2" + annotation (Placement(transformation(extent={{-116,14},{-96,34}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant setback(k=THeaSetBack) + "Heat gain if occupied in room 2" + annotation (Placement(transformation(extent={{-112,-82},{-92,-62}}))); +Controls.BaseClasses.DataBus dataBus + annotation (Placement(transformation( + extent={{-120,-18},{-80,22}}), iconTransformation(extent={{-120,62},{-78,98}}))); +equation +connect(emissionControl.yHea, y) annotation (Line(points={{34.4,-21.2},{96,-21.2}, +{96,2},{110,2}}, color={0,0,127})); + connect( +emissionControl.yHea, y) annotation (Line(points={{60.4,-21.2},{96,-21.2},{96,2}, + {110,2}}, color={0,0,127})); + connect(occSch2. + occupied, switch2.u2) annotation (Line( + points={{-95,-32},{-78,-32},{-78,-16},{-72,-16}}, + color={255,0,255}, + smooth=Smooth.None)); + connect(setpoint.y, switch2.u1) annotation (Line(points={{-94,24},{-90,24},{-90, + -8},{-72,-8}}, color={0,0,127})); + connect(setback.y, switch2.u3) + annotation (Line(points={{-90,-72},{-72,-72},{-72,-24}}, color={0,0,127})); + connect(switch2.y, emissionControl.THeaSet) annotation (Line(points={{-52,-22}, + {-52,-21.2},{-42.4,-21.2}}, color={0,0,127})); +connect(dataBus.TCooSetSchema_space_003, emissionControl.TCooSet); +connect(dataBus.TZonSchema_space_003, emissionControl.TZon); +connect(dataBus.yCooSystem_012, emissionControl.yCoo); +connect(dataBus.yHeaSystem_012, emissionControl.yHea); +end EmissionControlEmissioncontrol_10; + model OccupancyOccupancy_13 +extends house_yaml.Common.Occupancy.SimpleOccupancy ; +Controls.BaseClasses.DataBus dataBus + annotation (Placement(transformation( + extent={{-120,-18},{-80,22}}), iconTransformation(extent={{-120,62},{-78,98}}))); +equation +connect(dataBus.OccupiedSchema_space_003, occSch2.occupied); + end OccupancyOccupancy_13; + + model CollectorControlPump_control +Buildings.Controls.OBC.CDL.Reals.PIDWithReset +conPum( controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PI, + k=1, + Ti=0.5, + Td=0.1, + r=1, + yMax=1, + yMin=0, + Ni=0.9, + Nd=10 +) "Controller for pump" +annotation (Placement(transformation(extent={{54,-10},{74,10}})));Buildings.Controls.OBC.CDL.Reals.MultiMax +mulMax(nin=3) +"Maximum radiator valve position" +annotation (Placement(transformation(extent={{-76,-10},{-56,10}})));Buildings.Controls.OBC.CDL.Reals.Hysteresis +hysPum(uLow=0.01, uHigh=0.5) +"Hysteresis for pump" +annotation (Placement(transformation(extent={{-26,-10},{-6,10}})));Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea +"Conversion from boolean to real signal" +annotation (Placement(transformation(extent={{14,-10},{34,10}})));Controls.BaseClasses.DataBus dataBus + annotation (Placement(transformation( + extent={{-120,-18},{-80,22}}), iconTransformation(extent={{-120,62},{-78,98}}))); +equation +connect(mulMax.y,hysPum. u) annotation (Line( +points={{-54,0},{-28,0}}, +color={0,0,127}, +smooth=Smooth.None));connect(hysPum.y,conPum. trigger) annotation (Line(points={{-4,0},{4,0},{4,-18}, +{58,-18},{58,-12}}, color={255,0,255}));connect(hysPum.y,booToRea. u) +annotation (Line(points={{-4,0},{12,0}}, color={255,0,255}));connect(booToRea.y,conPum. u_s) +annotation (Line(points={{36,0},{52,0}}, color={0,0,127}));annotation (Icon(coordinateSystem(preserveAspectRatio=false)), Diagram( +coordinateSystem(preserveAspectRatio=false)));connect(dataBus.y_gainSystem_002, conPum.u_m); +connect(dataBus.ySystem_002, conPum.y); +connect(dataBus.yBoiConSystem_002, mulMax.y); +connect(dataBus.yPumBoiSystem_002, mulMax.y); +connect(dataBus.yHeaSystem_008, mulMax.u[1]); +connect(dataBus.yHeaSystem_010, mulMax.u[2]); +connect(dataBus.yHeaSystem_012, mulMax.u[3]); +end CollectorControlPump_control; + model ThreeWayValveControlThree_way_valve_1 + Buildings.Controls.OBC.CDL.Reals.PIDWithReset + conVal( + controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PI, + k=1, + Ti=0.5, + Td=0.1, + r=1, + yMax=1, + yMin=0, + Ni=0.9, + Nd=10 +) "Controller for pump" +annotation (Placement(transformation(extent={{-12,-10},{8,10}}))); Modelica.Blocks.Interfaces.RealOutput y +annotation (Placement(transformation(extent={{100,-10},{120,10}}))); Modelica.Blocks.Interfaces.RealInput u +annotation (Placement(transformation(extent={{-138,-20},{-98,20}}))); Controls.BaseClasses.DataBus dataBus + annotation (Placement(transformation( + extent={{-120,-18},{-80,22}}), iconTransformation(extent={{-120,62},{-78,98}}))); +equation +connect(dataBus.TColSetThree_way_valve_1, conVal.u_s); +connect(dataBus.triggerThree_way_valve_1, conVal.trigger); + connect(conVal.y, y) +annotation (Line(points={{10,0},{110,0}}, color={0,0,127})); connect(u, conVal.u_m) annotation (Line(points={{-118,0},{-22,0},{-22,-20},{0, + -20},{0,-16},{-2,-16},{-2,-12}}, color={0,0,127}));annotation (Icon(coordinateSystem(preserveAspectRatio=false)), Diagram( + coordinateSystem(preserveAspectRatio=false)));end ThreeWayValveControlThree_way_valve_1; + model ThreeWayValveControlThree_way_valve_2 + Buildings.Controls.OBC.CDL.Reals.PIDWithReset + conVal( + controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PI, + k=1, + Ti=0.5, + Td=0.1, + r=1, + yMax=1, + yMin=0, + Ni=0.9, + Nd=10 +) "Controller for pump" +annotation (Placement(transformation(extent={{-12,-10},{8,10}}))); Modelica.Blocks.Interfaces.RealOutput y +annotation (Placement(transformation(extent={{100,-10},{120,10}}))); Modelica.Blocks.Interfaces.RealInput u +annotation (Placement(transformation(extent={{-138,-20},{-98,20}}))); Controls.BaseClasses.DataBus dataBus + annotation (Placement(transformation( + extent={{-120,-18},{-80,22}}), iconTransformation(extent={{-120,62},{-78,98}}))); +equation +connect(dataBus.TColSetThree_way_valve_2, conVal.u_s); +connect(dataBus.triggerThree_way_valve_2, conVal.trigger); + connect(conVal.y, y) +annotation (Line(points={{10,0},{110,0}}, color={0,0,127})); connect(u, conVal.u_m) annotation (Line(points={{-118,0},{-22,0},{-22,-20},{0, + -20},{0,-16},{-2,-16},{-2,-12}}, color={0,0,127}));annotation (Icon(coordinateSystem(preserveAspectRatio=false)), Diagram( + coordinateSystem(preserveAspectRatio=false)));end ThreeWayValveControlThree_way_valve_2; + model BoilerControlBoiler_control + extends house_yaml.Common.Controls.ventilation.PartialBoilerControl; + Controls.BaseClasses.DataBus dataBus + annotation (Placement(transformation( + extent={{-120,-18},{-80,22}}), iconTransformation(extent={{-120,62},{-78,98}}))); + equation + connect(dataBus.TStoTopSystem_001, sub1.u1); +connect(dataBus.TStoBotSystem_001, greThr.u); +connect(dataBus.TAirOutSystem_001, lesThrTOut.u); +connect(dataBus.yBoiConSystem_001, booToReaBoi.y); +connect(dataBus.yPumBoiSystem_001, booToReaPum.y); + end BoilerControlBoiler_control; + + model DataServer +replaceable package Medium = Modelica.Media.Interfaces.PartialMedium; +Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor[3] +TRoo annotation ( +Placement(transformation(origin={-544,-226}, +extent = {{480, 216}, {500, 236}})));Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a[3] +port annotation ( +Placement(transformation(extent={{-112,-10},{-92,10}}), +iconTransformation(extent = {{-110, -10}, {-90, 10}})));Buildings.Fluid.Sensors.PPM[3] TRoo1(redeclare +package Medium = Medium)annotation ( +Placement(transformation(origin={-542,-268}, +extent = {{480, 216}, {500, 236}})));Modelica.Fluid.Interfaces.FluidPort_a[3] +port_a(redeclare package Medium += Medium)annotation (Placement(transformation(extent={{-116,-58},{-82,-26}}), +iconTransformation(origin = {-2, -42}, extent = {{-110, -9}, {-90, 9}}))); Controls.BaseClasses.DataBus dataBus + annotation (Placement(transformation( + extent={{-120,-18},{-80,22}}), iconTransformation(extent={{-120,62},{-78,98}}))); +Modelica.Blocks.Sources.RealExpression + TColSetThree_way_valve_1 + (y=363.15); +Modelica.Blocks.Sources.RealExpression + TColSetThree_way_valve_2 + (y=363.15); +Modelica.Blocks.Sources.RealExpression + TCooSetEmissioncontrol_8 + (y=298.15); +Modelica.Blocks.Sources.RealExpression + TCooSetEmissioncontrol_10 + (y=298.15); +Modelica.Blocks.Sources.RealExpression + TCooSetEmissioncontrol_9 + (y=298.15); +Modelica.Blocks.Sources.RealExpression + TAirOutBoiler_control + (y=0.0); +Modelica.Blocks.Sources.BooleanExpression + triggerThree_way_valve_2 + (y=true); +Modelica.Blocks.Sources.BooleanExpression + triggerThree_way_valve_1 + (y=true); +equation +connect(port[1],TRoo[1]. port); +connect(port_a[1], TRoo1[1].port); +connect(port[2],TRoo[2]. port); +connect(port_a[2], TRoo1[2].port); +connect(port[3],TRoo[3]. port); +connect(port_a[3], TRoo1[3].port); +connect(dataBus.TZonSchema_space_001, TRoo[1].T); +connect(dataBus.TZonSchema_space_002, TRoo[2].T); +connect(dataBus.TZonSchema_space_003, TRoo[3].T); +connect(dataBus.ppmCO2Schema_space_001, TRoo1[1].ppm); +connect(dataBus.ppmCO2Schema_space_002, TRoo1[2].ppm); +connect(dataBus.ppmCO2Schema_space_003, TRoo1[3].ppm); +connect(dataBus.TColSetThree_way_valve_1, +TColSetThree_way_valve_1.y); +connect(dataBus.TColSetThree_way_valve_2, +TColSetThree_way_valve_2.y); +connect(dataBus.TCooSetSchema_space_001, +TCooSetEmissioncontrol_8.y); +connect(dataBus.TCooSetSchema_space_003, +TCooSetEmissioncontrol_10.y); +connect(dataBus.TCooSetSchema_space_002, +TCooSetEmissioncontrol_9.y); +connect(dataBus.TAirOutSystem_001, +TAirOutBoiler_control.y); +connect(dataBus.triggerThree_way_valve_2, +triggerThree_way_valve_2.y); +connect(dataBus.triggerThree_way_valve_1, +triggerThree_way_valve_1.y); +end DataServer; + + + + partial model PartialBoilerControl + parameter Modelica.Units.SI.Temperature TSup_nominal=80 + 273.15 "Check for temperature at the bottom of the tank"; + parameter Modelica.Units.SI.Temperature threshold_outdoor_air_cutoff=15 + 273.15 "Output true if outdoor air is below heating cut-off limit"; + parameter Modelica.Units.SI.Temperature threshold_to_switch_off_boiler=15 + 273.15 "Threshold to switch boiler off"; + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr(t= + TSup_nominal + 5) + "Check for temperature at the bottom of the tank" annotation ( + Placement(transformation(extent={{-114,-142},{-94,-122}}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToReaPum + "Signal converter for pump" annotation (Placement(transformation( + extent={{-94,-32},{-114,-12}}))); + Buildings.Controls.OBC.CDL.Reals.Greater lesThr + "Check for temperature at the top of the tank" annotation ( + Placement(transformation(extent={{-114,-80},{-94,-60}}))); + Modelica.Blocks.MathBoolean.Or pumOnSig(nu=3) + "Signal for pump being on" + annotation (Placement(transformation(extent={{146,-2},{166,18}}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToReaBoi + "Signal converter for boiler" + annotation (Placement(transformation(extent={{-94,-2},{-114,18}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant dTThr(k=1) + "Threshold to switch boiler off" annotation (Placement( + transformation(extent={{-204,-112},{-184,-92}}))); + Buildings.Controls.OBC.CDL.Reals.Subtract sub1 annotation (Placement( + transformation(extent={{-164,-88},{-144,-68}}))); + Modelica.Blocks.Logical.LessThreshold lesThrTOut(threshold=threshold_outdoor_air_cutoff) + "Output true if outdoor air is below heating cut-off limit" + annotation (Placement(transformation(extent={{-114,38},{-94,58}}))); + Buildings.Controls.OBC.CDL.Logical.And and1 + "Logical test to enable pump and subsequently the boiler" + annotation (Placement(transformation(extent={{-74,38},{-54,58}}))); + Modelica.StateGraph.InitialStep off(nIn=1, nOut=1) + "Pump and furnace off" + annotation (Placement(transformation(extent={{-74,78},{-54,98}}))); + Modelica.StateGraph.TransitionWithSignal T1 "Transition to pump on" + annotation (Placement(transformation(extent={{-44,78},{-24,98}}))); + Modelica.StateGraph.StepWithSignal pumOn(nIn=1, nOut=1) + "Pump on" + annotation (Placement(transformation(extent={{-14,78},{6,98}}))); + Modelica.StateGraph.Transition T3(enableTimer=true, waitTime=10) + "Transition to boiler on" + annotation (Placement(transformation(extent={{16,78},{36,98}}))); + Modelica.StateGraph.StepWithSignal boiOn(nIn=1, nOut=1) + "Boiler on" + annotation (Placement(transformation(extent={{46,78},{66,98}}))); + Modelica.StateGraph.TransitionWithSignal T2 + "Transition that switches boiler off" + annotation (Placement(transformation(extent={{76,78},{96,98}}))); + Modelica.StateGraph.StepWithSignal pumOn2(nIn=1, nOut=1) + "Pump on" + annotation (Placement(transformation(extent={{106,78},{126,98}}))); + Modelica.StateGraph.Transition T4(enableTimer=true, waitTime=10) + "Transition to boiler on" + annotation (Placement(transformation(extent={{136,78},{156,98}}))); + inner Modelica.StateGraph.StateGraphRoot stateGraphRoot + "Root of the state graph" annotation (Placement(transformation( + extent={{-134,98},{-114,118}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant dTThr1(k=threshold_to_switch_off_boiler) "Threshold to switch boiler off" annotation (Placement( + transformation(extent={{-208,-22},{-188,-2}}))); +equation + connect(booToReaPum.u, pumOnSig.y) + annotation (Line( + points={{-92,-22},{176,-22},{176,8},{167.5,8}}, + color={255,0,255}, + smooth=Smooth.None)); + connect(sub1.y, lesThr.u2) + annotation (Line( + points={{-142,-78},{-116,-78}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(dTThr.y, sub1.u2) + annotation (Line( + points={{-182,-102},{-174,-102},{-174,-84},{-166,-84}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(lesThr.y, and1.u2) + annotation (Line( + points={{-92,-70},{-84,-70},{-84,40},{-76,40}}, + color={255,0,255}, + smooth=Smooth.None)); + connect(lesThrTOut.y, and1.u1) + annotation (Line( + points={{-93,48},{-76,48}}, + color={255,0,255}, + smooth=Smooth.None)); + connect(and1.y, T1.condition) + annotation (Line(points={{-52,48},{-44,48},{-44,42},{-36, + 42},{-36,58},{-34,58},{-34,76}}, +color={255,0,255})); + connect(greThr.y, T2.condition) + annotation (Line(points={{-92,-132},{86,-132},{86,76}}, + color={255,0,255})); + connect(boiOn.active, booToReaBoi.u) + annotation (Line(points={{56,77},{56,8},{-92,8}}, + color={255,0,255})); + connect(pumOn2.active, pumOnSig.u[1]) + annotation (Line(points={{116,77},{116,5.66667}, + {146,5.66667}}, + color={255,0,255})); + connect(boiOn.active, pumOnSig.u[2]) + annotation (Line(points={{56,77},{56,8},{146,8}}, + color={255,0,255})); + connect(pumOn.active, pumOnSig.u[3]) + annotation (Line(points={{-4,77},{-4,10.3333},{146,10.3333}}, + color={255,0,255})); + connect(off.outPort[1], T1.inPort) + annotation (Line(points={{-53.5,88},{-38,88}}, color={0,0,0})); + connect(T1.outPort, pumOn.inPort[1]) + annotation (Line(points={{-32.5,88},{-15,88}}, color={0,0,0})); + connect(pumOn.outPort[1], T3.inPort) + annotation (Line(points={{6.5,88},{22,88}}, + color={0,0,0})); + connect(T3.outPort, boiOn.inPort[1]) + annotation (Line(points={{27.5,88},{45,88}}, color={0,0,0})); + connect(boiOn.outPort[1], T2.inPort) + annotation (Line(points={{66.5,88},{82,88}}, color={0,0,0})); + connect(T2.outPort, pumOn2.inPort[1]) + annotation (Line(points={{87.5,88},{105,88}}, color={0,0,0})); + connect(pumOn2.outPort[1], T4.inPort) + annotation (Line(points={{126.5,88},{142,88}}, color={0,0,0})); + connect(T4.outPort, off.inPort[1]) + annotation (Line(points={{147.5,88},{166,88},{166,118}, + {-94,118},{-94,88},{-75,88}}, + color={0,0,0})); + connect( + dTThr1.y, lesThr.u1) annotation (Line(points={{-186,-12},{-124,-12},{ + -124, + -70},{-116,-70}}, color={0,0,127})); + annotation (Icon(coordinateSystem(preserveAspectRatio=false, extent={ + {-260,-180},{260,160}})), Diagram(coordinateSystem( + preserveAspectRatio=false, extent={{-260,-180},{260,160}}))); +end PartialBoilerControl; + +end ventilation; + end Controls; + + package Fluid + package Boilers + model Simple + + extends Buildings.Fluid.Interfaces.PartialTwoPort; + Buildings.Fluid.Sources.Boundary_pT bou(use_T_in = true, nPorts = 2, redeclare + final package Medium = Medium) annotation ( + Placement(transformation(origin = {90, 188}, extent = {{-82, -180}, {-62, -160}}))); + Modelica.Blocks.Sources.Constant constant1(k = 273 + 70) annotation ( + Placement(transformation(origin = {-32, 20}, extent = {{-10, -10}, {10, 10}}))); + equation + connect(constant1.y, bou.T_in) annotation ( + Line(points = {{-20, 20}, {6, 20}, {6, 22}}, color = {0, 0, 127})); + connect(bou.ports[1], port_b) annotation ( + Line(points = {{28, 18}, {100, 18}, {100, 0}}, color = {0, 127, 255})); + connect(bou.ports[2], port_a) annotation ( + Line(points = {{28, 18}, {-100, 18}, {-100, 0}}, color = {0, 127, 255})); + annotation ( + Icon(graphics={ Rectangle(fillPattern = FillPattern.Solid, extent = {{-80, 80}, {80, -80}}), Rectangle(fillColor = {255, 255, 255}, + fillPattern = FillPattern.Solid, extent = {{-68, 70}, {70, -70}}), Polygon(lineColor = {0, 0, 255}, fillColor = {0, 0, 255}, + fillPattern = FillPattern.Solid, points = {{-68, 18}, {-68, 18}, {-54, 32}, {-28, 16}, {0, 30}, {26, 16}, {46, 32}, {70, 18}, {70, 18}, {70, -70}, {70, -70}, {-68, -70}, {-68, -70}, {-68, 18}}, smooth = Smooth.Bezier)})); + end Simple; + +partial model PartialBoilerWithStorage + replaceable package MediumW = Modelica.Media.Interfaces.PartialMedium + "Medium model" annotation (choicesAllMatching=true); + extends Buildings.Fluid.Interfaces.PartialTwoPort( + redeclare package Medium = MediumW); + + + parameter Real a[:]={0.9} "Coefficients for efficiency curve"; + parameter Buildings.Fluid.Types.EfficiencyCurves effCur=Buildings.Fluid.Types.EfficiencyCurves.Constant + "Curve used to compute the efficiency"; + parameter Modelica.Units.SI.Temperature T_nominal=353.15 + "Temperature used to compute nominal efficiency (only used if efficiency curve depends on temperature)" + annotation (Dialog(enable=(effCur == Buildings.Fluid.Types.EfficiencyCurves.QuadraticLinear))); + + + parameter Buildings.Fluid.Data.Fuels.Generic fue "Fuel type" + annotation (choicesAllMatching=true); + + parameter Modelica.Units.SI.Power Q_flow_nominal "Nominal heating power"; + parameter Boolean linearizeFlowResistance=false + "= true, use linear relation between m_flow and dp for any flow rate" + annotation (Dialog(enable=computeFlowResistance, + tab="Flow resistance")); + parameter Modelica.Units.SI.PressureDifference dp_nominal(min=0, displayUnit= +"Pa") "Pressure difference" annotation (Dialog(group="Nominal condition")); +parameter Modelica.Units.SI.Pressure dp[:]=(3000 + 2000)*{2,1} "Pressure"; +parameter Real V_flow[:] = 0.001/1000*{0.5,1}; + parameter Real deltaM=0.1 + "Fraction of nominal flow rate where flow transitions to laminar"; +parameter Modelica.Units.SI.MassFlowRate nominal_mass_flow_rate_boiler; +parameter Modelica.Units.SI.MassFlowRate nominal_mass_flow_radiator_loop; + parameter Boolean show_T=false; + + + parameter Modelica.Units.SI.Volume VTan "Tank volume"; + parameter Modelica.Units.SI.Length hTan "Height of tank (without insulation)"; + parameter Modelica.Units.SI.Length dIns "Thickness of insulation"; + parameter Modelica.Units.SI.ThermalConductivity kIns=0.04 + "Specific heat conductivity of insulation"; + parameter Integer nSeg(min=2) = 2 "Number of volume segments"; + + + Buildings.Fluid.Movers.SpeedControlled_y pumBoi( + redeclare package Medium = MediumW, +per(pressure(V_flow=V_flow, dp=dp)), + use_inputFilter=false, + energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState) + "Pump for boiler circuit" annotation (Placement(transformation(extent={{-10, + -10},{10,10}}, origin={-8,10}))); + + Buildings.Fluid.Boilers.BoilerPolynomial boi( + a=a, + effCur=effCur, + redeclare package Medium = MediumW, + Q_flow_nominal=Q_flow_nominal, + m_flow_nominal=nominal_mass_flow_rate_boiler, + fue=fue, + dp_nominal=dp_nominal, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + T_start=293.15) "Boiler" + annotation (Placement(transformation(extent={{-74,0},{-54,20}}))); + Buildings.HeatTransfer.Sources.FixedTemperature TAmb(T=288.15) + "Ambient temperature in boiler room" + annotation (Placement(transformation(extent={{-14,74},{6,94}}))); + Buildings.Fluid.Storage.StratifiedEnhanced tan1( + m_flow_nominal=nominal_mass_flow_radiator_loop, + dIns=dIns, + redeclare package Medium = MediumW, + hTan=hTan, + nSeg=nSeg, + show_T=true, + VTan=VTan, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial) "Storage tank" + annotation (Placement(transformation(extent={{12,-72},{52,-32}}))); + Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor tanTemBot + "Tank temperature" + annotation (Placement(transformation(extent={{68,-66},{88,-46}}))); + Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor tanTemTop + "Tank temperature" + annotation (Placement(transformation(extent={{68,-34},{88,-14}}))); + Buildings.Fluid.Sources.Boundary_pT bou(nPorts=1, redeclare package Medium = +MediumW) "Fixed boundary condition, needed to provide a pressure in the system" + annotation (Placement(transformation(extent={{-74,68},{-54,88}}))); + Buildings.Fluid.FixedResistances.Junction splVal3( + dp_nominal={0,0,0}, + m_flow_nominal=nominal_mass_flow_rate_boiler*{-1,-1,1}, + redeclare package Medium = MediumW, + energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState) "Flow splitter" + annotation (Placement(transformation( +extent={{10,-10},{-10,10}}, +rotation=180, +origin={30,-98}))); + Buildings.Fluid.FixedResistances.Junction splVal4( + dp_nominal={0,0,0}, + m_flow_nominal=nominal_mass_flow_rate_boiler*{1,1,-1}, + redeclare package Medium = MediumW, + energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState) "Flow splitter" + annotation (Placement(transformation( +extent={{10,10},{-10,-10}}, +rotation=180, +origin={32,10}))); + Buildings.Fluid.Sensors.TemperatureTwoPort temperature_sensor1( + redeclare package Medium = MediumW, m_flow_nominal=nominal_mass_flow_rate_boiler) + "Radiator" annotation ( + Placement(transformation(origin={-36,11}, + extent = {{-10, -10}, {10, 10}}, + rotation=0))); + Buildings.Fluid.Sensors.TemperatureTwoPort temperature_sensor2( + redeclare package Medium = MediumW, m_flow_nominal=nominal_mass_flow_rate_boiler) + "Radiator" annotation ( + Placement(transformation(origin={66,-85}, + extent = {{-10, -10}, {10, 10}}, + rotation=0))); + Buildings.Fluid.Sensors.TemperatureTwoPort temperature_sensor3( + redeclare package Medium = MediumW, m_flow_nominal=nominal_mass_flow_rate_boiler) + "Radiator" annotation ( + Placement(transformation(origin={32,-16.5}, + extent={{-8.5,-8},{8.5,8}}, + rotation=-90))); + Buildings.Fluid.Sensors.TemperatureTwoPort temperature_sensor4( + redeclare package Medium = MediumW, m_flow_nominal=nominal_mass_flow_rate_boiler) + "Radiator" annotation ( + Placement(transformation(origin={-34,-97}, + extent = {{-10, -10}, {10, 10}}, + rotation=0))); + Buildings.Fluid.Sensors.MassFlowRate senMasFlo1(redeclare package Medium = + MediumW) + annotation (Placement(transformation(extent={{10,-10},{-10,10}}, + rotation=90, + origin={46,30}))); + Buildings.Fluid.Sensors.MassFlowRate senMasFlo2(redeclare package Medium = + MediumW) + annotation (Placement(transformation(extent={{-10,-10},{10,10}}, + rotation=90, + origin={-78,-46}))); + Buildings.Fluid.Sensors.MassFlowRate senMasFlo3(redeclare package Medium = + MediumW) + annotation (Placement(transformation(extent={{-6,-7},{6,7}}, + rotation=0, + origin={13,10}))); + Buildings.Fluid.Sensors.MassFlowRate senMasFlo4(redeclare package Medium = + MediumW) + annotation (Placement(transformation(extent={{-10,-10},{10,10}}, + rotation=0, + origin={94,-86}))); + Modelica.Blocks.Math.Gain gain(k=Q_flow_nominal) + annotation (Placement(transformation(extent={{-70,-22},{-58,-10}}))); + Modelica.Blocks.Continuous.Integrator integrator + annotation (Placement(transformation(extent={{-46,-26},{-30,-10}}))); + Modelica.Blocks.Math.Gain gain1(k=2.77778e-7) + annotation (Placement(transformation(extent={{-46,-52},{-26,-32}}))); + Modelica.Blocks.Math.Gain gain2(k=0.9*(1/11)) + annotation (Placement(transformation(extent={{-26,-80},{-6,-60}}))); + Modelica.Blocks.Routing.RealPassThrough Boiy + annotation (Placement(transformation(extent={{-122,36},{-104,54}}))); +equation + connect( + TAmb.port, boi.heatPort) + annotation (Line( + points={{6,84},{20,84},{20,30},{-64,30},{-64,17.2}}, + color={191,0,0}, + smooth=Smooth.None)); + connect( + tan1.heaPorVol[1], tanTemTop.port) + annotation (Line( + points={{32,-52.3},{32,-52},{64,-52},{64,-24},{68,-24}}, + color={191,0,0}, + smooth=Smooth.None)); + connect( + tanTemBot.port, tan1.heaPorVol[tan1.nSeg]) + annotation (Line( + points={{68,-56},{56,-56},{56,-52},{32,-52}}, + color={191,0,0}, + smooth=Smooth.None)); + connect( + tan1.heaPorTop, TAmb.port) + annotation (Line( + points={{36,-37.2},{62,-37.2},{62,84},{6,84}}, + color={191,0,0}, + smooth=Smooth.None)); + connect( + TAmb.port, tan1.heaPorSid) + annotation (Line( + points={{6,84},{62,84},{62,-50},{54,-50},{54,-52},{43.2,-52}}, + color={191,0,0}, + smooth=Smooth.None)); + connect( + TAmb.port, tan1.heaPorBot) + annotation (Line( + points={{6,84},{62,84},{62,-50},{54,-50},{54,-52},{8,-52},{8,-80},{36,-80}, + {36,-66.8}}, + color={191,0,0}, + smooth=Smooth.None)); + connect( + bou.ports[1], boi.port_a) + annotation (Line( + points={{-54,78},{-48,78},{-48,32},{-80,32},{-80,10},{-74,10}}, + color={0,127,255}, + smooth=Smooth.None)); + connect( + tan1.port_b, splVal3.port_3) annotation (Line(points={{32,-72},{32,-84},{30,-84}, + {30,-88}}, color={0,127,255})); + connect(boi.port_b, temperature_sensor1.port_a) annotation (Line(points={{-54, + 10},{-50,10},{-50,11},{-46,11}}, color={0,127,255})); + connect(temperature_sensor1.port_b, pumBoi.port_a) annotation (Line(points={{-26,11}, + {-23,11},{-23,10},{-18,10}}, color={0,127,255})); + connect(splVal3.port_2, temperature_sensor2.port_a) annotation (Line(points={{40,-98}, + {52,-98},{52,-85},{56,-85}}, color={0,127,255})); + connect(splVal4.port_3, temperature_sensor3.port_a) + annotation (Line(points={{32,0},{32,-8}}, color={0,127,255})); + connect(temperature_sensor3.port_b, tan1.port_a) + annotation (Line(points={{32,-25},{32,-32}}, color={0,127,255})); + connect(splVal3.port_1, temperature_sensor4.port_b) annotation (Line(points={{20,-98}, + {18,-97},{-24,-97}}, color={0,127,255})); + connect(senMasFlo1.port_b, splVal4.port_2) annotation (Line(points={{46,20},{46, + 16},{42,16},{42,10}}, color={0,127,255})); + connect(boi.port_a, senMasFlo2.port_b) + annotation (Line(points={{-74,10},{-78,10},{-78,-36}}, color={0,127,255})); + connect(temperature_sensor4.port_a, senMasFlo2.port_a) annotation (Line( + points={{-44,-97},{-44,-98},{-78,-98},{-78,-56}}, color={0,127,255})); + connect(splVal4.port_1, senMasFlo3.port_b) + annotation (Line(points={{22,10},{19,10}}, color={0,127,255})); + connect(senMasFlo3.port_a, pumBoi.port_b) + annotation (Line(points={{7,10},{2,10}}, color={0,127,255})); + connect(temperature_sensor2.port_b, senMasFlo4.port_a) annotation (Line( + points={{76,-85},{80,-85},{80,-86},{84,-86}}, color={0,127,255})); + connect(senMasFlo1.port_a, port_b) annotation (Line(points={{46,40},{46,44},{86, + 44},{86,0},{100,0}}, color={0,127,255})); + connect(port_a, senMasFlo4.port_b) annotation (Line(points={{-100,0},{-84,0},{ + -84,-32},{-96,-32},{-96,-114},{110,-114},{110,-86},{104,-86}}, color={ + 0,127,255})); + connect(gain.y, integrator.u) annotation (Line(points={{-57.4,-16},{-54,-16},{ + -54,-18},{-47.6,-18}}, color={0,0,127})); + connect(integrator.y, gain1.u) annotation (Line(points={{-29.2,-18},{-30,-18}, + {-30,-4},{-74,-4},{-74,-12},{-76,-12},{-76,-32},{-48,-32},{-48,-42}}, + color={0,0,127})); + connect(gain1.y, gain2.u) annotation (Line(points={{-25,-42},{-34,-42},{-34,-60}, + {-60,-60},{-60,-70},{-28,-70}}, color={0,0,127})); + connect(Boiy.y, boi.y) annotation (Line(points={{-103.1,45},{-84,45},{-84,18}, + {-76,18}}, color={0,0,127})); + connect(Boiy.y, gain.u) annotation (Line(points={{-103.1,45},{-84,45},{-84,2}, + {-82,2},{-82,-16},{-71.2,-16}}, color={0,0,127})); + annotation (Icon(coordinateSystem(extent={{-100,-120},{100,100}}), graphics={ +Rectangle(fillPattern=FillPattern.Solid, extent={{-80,80},{80,-80}}), +Rectangle( + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-68,70},{70,-70}}), + Polygon( + lineColor={0,0,255}, + fillColor={0,0,255}, + fillPattern=FillPattern.Solid, + points={{-68,18},{-68,18},{-54,32},{-28,16},{0,30},{26,16},{46,32},{70, + 18},{70,18},{70,-70},{70,-70},{-68,-70},{-68,-70},{-68,18}}, + smooth=Smooth.Bezier)}), Diagram(coordinateSystem(extent={{-100,-120}, + {100,100}}))); +end PartialBoilerWithStorage; + + + model BoilerWithStorageSystem_001 + extends house_yaml.Common.Fluid.Boilers.PartialBoilerWithStorage; + Controls.BaseClasses.DataBus dataBus + annotation (Placement(transformation( + extent={{-120,-18},{-80,22}}), iconTransformation(extent={{-120,62},{-78,98}}))); + equation + connect(dataBus.yBoiConSystem_001, Boiy.y); +connect(dataBus.yPumBoiSystem_001, pumBoi.y); +connect(dataBus.TStoTopSystem_001, tanTemTop.T); +connect(dataBus.TStoBotSystem_001, tanTemBot.T); + end BoilerWithStorageSystem_001; + + + end Boilers; + + package Ventilation + model SimpleHVAC + + replaceable package Medium = Modelica.Media.Interfaces.PartialMedium + "Medium model" annotation (choicesAllMatching=true); + IDEAS.Fluid.Movers.FlowControlled_dp + fanSup( + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + inputType=IDEAS.Fluid.Types.InputType.Constant, + nominalValuesDefineDefaultPressureCurve=true, + redeclare package Medium = Medium, + dp_nominal=200, + m_flow_nominal=2*100*1.2/3600) "Supply fan" + annotation (Placement(transformation(extent={{4,6},{24,26}}))); + IDEAS.Fluid.Movers.FlowControlled_dp + fanRet( + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + inputType=IDEAS.Fluid.Types.InputType.Constant, + nominalValuesDefineDefaultPressureCurve=true, + redeclare package Medium = Medium, + dp_nominal=200, + m_flow_nominal=2*100*1.2/3600) "Return fan" + annotation (Placement(transformation(extent={{24,-34},{4,-14}}))); + IDEAS.Fluid.HeatExchangers.ConstantEffectiveness + hex( + redeclare package Medium1 = Medium, + redeclare package Medium2 = Medium, + m1_flow_nominal=2*100*1.2/3600, + m2_flow_nominal=2*100*1.2/3600, + dp1_nominal=100, + dp2_nominal=100) "Heat exchanger with constant heat recovery effectivity" + annotation (Placement(transformation(extent={{-26,-14},{-6,6}}))); + Modelica.Fluid.Interfaces.FluidPort_b port_b( + redeclare final package Medium = Medium) + "Fluid connector b (positive design flow direction is from port_a to port_b)" + annotation (Placement(transformation(extent={{118,1},{86,31}}), + iconTransformation(extent={{110,31},{90,49}}))); + + Modelica.Fluid.Interfaces.FluidPort_a port_a( + redeclare final package Medium = Medium) + "Fluid connector a (positive design flow direction is from port_a to port_b)" + annotation (Placement(transformation(extent={{84,-40},{118,-8}}), + iconTransformation(extent={{90,-49},{110,-31}}))); + IDEAS.Fluid.Sources.OutsideAir outsideAir( + azi=0, nPorts=2, redeclare package + Medium = Medium) annotation ( + Placement(transformation(origin = {-64, 2}, extent = {{-10, -10}, {10, 10}}))); + equation + connect(hex.port_b1, fanSup.port_a) annotation ( + Line(points = {{-6, 2}, {-6, 16}, {4, 16}}, color = {0, 127, 255})); + connect(hex.port_a2, fanRet.port_b) annotation ( + Line(points = {{-6, -10}, {-6, -24}, {4, -24}}, color = {0, 127, 255})); + connect(fanSup.port_b, port_b) annotation ( + Line(points = {{24, 16}, {102, 16}}, color = {0, 127, 255})); + connect(fanRet.port_a, port_a) annotation ( + Line(points = {{24, -24}, {101, -24}}, color = {0, 127, 255})); + connect( + outsideAir.ports[1], hex.port_a1) annotation ( + Line(points={{-54,4},{-40,4},{-40,2},{-26,2}}, + color = {0, 127, 255})); + connect( + outsideAir.ports[2], hex.port_b2) annotation ( + Line(points={{-54,0},{-26,0},{-26,-10}}, color = {0, 127, 255})); + annotation (Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-60}, + {100,60}}), graphics={Rectangle( + extent={{-100,60},{100,-60}}, + lineColor={255,128,0}, + fillColor={255,128,0}, + fillPattern=FillPattern.Forward)}), Diagram(coordinateSystem( + preserveAspectRatio=false, extent={{-100,-60},{100,60}}))); + end SimpleHVAC; + + model SimpleVAV + annotation (Icon(coordinateSystem(preserveAspectRatio=false)), Diagram( + coordinateSystem(preserveAspectRatio=false))); + end SimpleVAV; + + model SimpleHVACBuildings + + replaceable package Medium = Modelica.Media.Interfaces.PartialMedium + "Medium model" annotation (choicesAllMatching=true); + Buildings.Fluid.Movers.FlowControlled_dp + fanSup( + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + use_inputFilter=false, + inputType=Buildings.Fluid.Types.InputType.Constant, + nominalValuesDefineDefaultPressureCurve=true, + redeclare package Medium = Medium, + dp_nominal=200, + m_flow_nominal=2*100*1.2/3600) "Supply fan" + annotation (Placement(transformation(extent={{4,6},{24,26}}))); + Buildings.Fluid.Movers.FlowControlled_dp + fanRet( + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + use_inputFilter=false, + inputType=Buildings.Fluid.Types.InputType.Constant, + nominalValuesDefineDefaultPressureCurve=true, + redeclare package Medium = Medium, + dp_nominal=200, + m_flow_nominal=2*100*1.2/3600) "Return fan" + annotation (Placement(transformation(extent={{24,-34},{4,-14}}))); + Buildings.Fluid.HeatExchangers.ConstantEffectiveness + hex( + redeclare package Medium1 = Medium, + redeclare package Medium2 = Medium, + m1_flow_nominal=2*100*1.2/3600, + m2_flow_nominal=2*100*1.2/3600, + dp1_nominal=100, + dp2_nominal=100) "Heat exchanger with constant heat recovery effectivity" + annotation (Placement(transformation(extent={{-26,-14},{-6,6}}))); + Modelica.Fluid.Interfaces.FluidPort_b port_b( + redeclare final package Medium = Medium) + "Fluid connector b (positive design flow direction is from port_a to port_b)" + annotation (Placement(transformation(extent={{118,1},{86,31}}), + iconTransformation(extent={{110,31},{90,49}}))); + + Modelica.Fluid.Interfaces.FluidPort_a port_a( + redeclare final package Medium = Medium) + "Fluid connector a (positive design flow direction is from port_a to port_b)" + annotation (Placement(transformation(extent={{84,-40},{118,-8}}), + iconTransformation(extent={{90,-49},{110,-31}}))); + Buildings.Fluid.Sources.Boundary_pT bou(T=295.15, nPorts=2, redeclare + package Medium = Medium) + annotation (Placement(transformation(extent={{-78,-14},{-58,6}}))); + Buildings.Fluid.Sensors.TemperatureTwoPort TSup( + redeclare package Medium = Medium, + m_flow_nominal=2*100*1.2/3600, + allowFlowReversal=false) +annotation (Placement(transformation(extent={{48,6},{68,26}}))); + Controls.BaseClasses.DataBus dataBus annotation (Placement(transformation( + extent={{-120,22},{-80,62}}), iconTransformation(extent={{-208,22},{-188, + 42}}))); +equation + connect(hex.port_b1, fanSup.port_a) annotation ( + Line(points = {{-6, 2}, {-6, 16}, {4, 16}}, color = {0, 127, 255})); + connect(hex.port_a2, fanRet.port_b) annotation ( + Line(points = {{-6, -10}, {-6, -24}, {4, -24}}, color = {0, 127, 255})); + connect(fanRet.port_a, port_a) annotation ( + Line(points = {{24, -24}, {101, -24}}, color = {0, 127, 255})); + connect(bou.ports[1], hex.port_b2) annotation (Line(points={{-58,-2},{-32,-2}, + {-32,-10},{-26,-10}}, color={0,127,255})); + connect(bou.ports[2], hex.port_a1) annotation (Line(points={{-58,-6},{-32,-6}, + {-32,2},{-26,2}}, color={0,127,255})); + connect(fanSup.port_b, TSup.port_a) + annotation (Line(points={{24,16},{48,16}}, color={0,127,255})); + connect(TSup.port_b, port_b) + annotation (Line(points={{68,16},{102,16}}, color={0,127,255})); + connect(TSup.T, dataBus.TSupAhu) annotation (Line(points={{58,27},{58,42},{ + -100,42}}, color={0,0,127}), Text( + string="%second", + index=1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + annotation (Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-60}, + {100,60}}), graphics={Rectangle( + extent={{-100,60},{100,-60}}, + lineColor={255,128,0}, + fillColor={255,128,0}, + fillPattern=FillPattern.Forward)}), Diagram(coordinateSystem( + preserveAspectRatio=false, extent={{-100,-60},{100,60}}))); +end SimpleHVACBuildings; + + model AhuWithEconomizer + replaceable package MediumA = Modelica.Media.Interfaces.PartialMedium + "Medium model" annotation (choicesAllMatching=true); + + constant Integer numZon(min=2)=2 "Total number of served VAV boxes"; + + parameter Modelica.Units.SI.Volume VRoo[numZon] "Room volume per zone"; + parameter Modelica.Units.SI.Area AFlo[numZon] "Floor area per zone"; + + final parameter Modelica.Units.SI.Area ATot=sum(AFlo) + "Total floor area for all zone"; + + constant Real conv=1.2/3600 "Conversion factor for nominal mass flow rate"; + + + parameter Modelica.Units.SI.HeatFlowRate QHeaAHU_flow_nominal(min=0) = mHeaAir_flow_nominal * Buildings.Utilities.Psychrometrics.Constants.cpAir * (THeaAirSup_nominal-THeaAirMix_nominal) + "Nominal heating heat flow rate of air handler unit coil"; + + parameter Modelica.Units.SI.HeatFlowRate QCooAHU_flow_nominal(max=0) = 1.3 * mCooAir_flow_nominal * Buildings.Utilities.Psychrometrics.Constants.cpAir *(TCooAirSup_nominal-TCooAirMix_nominal) + "Nominal total cooling heat flow rate of air handler unit coil (negative number)"; + + parameter Modelica.Units.SI.MassFlowRate mCooVAV_flow_nominal[numZon] + "Design mass flow rate per zone for cooling" + annotation (Dialog(group="Nominal mass flow rate")); + + parameter Modelica.Units.SI.MassFlowRate mHeaVAV_flow_nominal[numZon] = 0.3*mCooVAV_flow_nominal + "Design mass flow rate per zone for heating" + annotation (Dialog(group="Nominal mass flow rate")); + + parameter Modelica.Units.SI.MassFlowRate mAir_flow_nominal=0.01 + "Nominal mass flow rate for fan" + annotation (Dialog(group="Nominal mass flow rate")); + parameter Modelica.Units.SI.MassFlowRate mCooAir_flow_nominal=0.7*sum(mCooVAV_flow_nominal) + "Nominal mass flow rate for fan" + annotation (Dialog(group="Nominal mass flow rate")); + parameter Modelica.Units.SI.MassFlowRate mHeaAir_flow_nominal = 0.7*sum(mHeaVAV_flow_nominal) + "Nominal mass flow rate for fan" + annotation (Dialog(group="Nominal mass flow rate")); + + parameter Modelica.Units.SI.MassFlowRate mHeaWat_flow_nominal= + QHeaAHU_flow_nominal/Buildings.Utilities.Psychrometrics.Constants.cpWatLiq/10 + "Nominal water mass flow rate for heating coil in AHU" + annotation (Dialog(group="Nominal mass flow rate")); + parameter Modelica.Units.SI.MassFlowRate mCooWat_flow_nominal= + QCooAHU_flow_nominal/Buildings.Utilities.Psychrometrics.Constants.cpWatLiq/(-6) + "Nominal water mass flow rate for cooling coil" + annotation (Dialog(group="Nominal mass flow rate")); + + parameter Real ratOAFlo_A(final unit="m3/(s.m2)") = 0.3e-3 + "Outdoor airflow rate required per unit area"; + parameter Real ratOAFlo_P = 2.5e-3 + "Outdoor airflow rate required per person"; + parameter Real ratP_A = 5e-2 + "Occupant density"; + parameter Real effZ(final unit="1") = 0.8 + "Zone air distribution effectiveness (limiting value)"; + parameter Real divP(final unit="1") = 0.7 + "Occupant diversity ratio"; + + parameter Modelica.Units.SI.VolumeFlowRate VZonOA_flow_nominal[numZon]=( + ratOAFlo_P*ratP_A + ratOAFlo_A)*AFlo/effZ + "Zone outdoor air flow rate of each VAV box"; + + parameter Modelica.Units.SI.VolumeFlowRate Vou_flow_nominal=(divP*ratOAFlo_P* + ratP_A + ratOAFlo_A)*sum(AFlo) "System uncorrected outdoor air flow rate"; + parameter Real effVen(final unit="1") = if divP < 0.6 then + 0.88 * divP + 0.22 else 0.75 + "System ventilation efficiency"; + parameter Modelica.Units.SI.VolumeFlowRate Vot_flow_nominal=Vou_flow_nominal/ + effVen "System design outdoor air flow rate"; + + parameter Modelica.Units.SI.Temperature THeaOn=293.15 + "Heating setpoint during on" + annotation (Dialog(group="Room temperature setpoints")); + parameter Modelica.Units.SI.Temperature THeaOff=285.15 + "Heating setpoint during off" + annotation (Dialog(group="Room temperature setpoints")); + parameter Modelica.Units.SI.Temperature TCooOn=297.15 + "Cooling setpoint during on" + annotation (Dialog(group="Room temperature setpoints")); + parameter Modelica.Units.SI.Temperature TCooOff=303.15 + "Cooling setpoint during off" + annotation (Dialog(group="Room temperature setpoints")); + parameter Modelica.Units.SI.PressureDifference dpBuiStaSet(min=0) = 12 + "Building static pressure"; + parameter Real yFanMin = 0.1 "Minimum fan speed"; + + + parameter Modelica.Units.SI.Temperature TCooAirMix_nominal(displayUnit="degC")=303.15 + "Mixed air temperature during cooling nominal conditions (used to size cooling coil)" + annotation (Dialog(group="Air handler unit nominal temperatures and humidity")); + parameter Modelica.Units.SI.Temperature TCooAirSup_nominal(displayUnit="degC")=285.15 + "Supply air temperature during cooling nominal conditions (used to size cooling coil)" + annotation (Dialog(group="Air handler unit nominal temperatures and humidity")); + parameter Modelica.Units.SI.MassFraction wCooAirMix_nominal = 0.017 + "Humidity ratio of mixed air at a nominal conditions used to size cooling coil (in kg/kg dry total)" + annotation (Dialog(group="Air handler unit nominal temperatures and humidity")); + parameter Modelica.Units.SI.Temperature TCooWatInl_nominal(displayUnit="degC") = 279.15 + "Cooling coil nominal inlet water temperature" + annotation (Dialog(group="Air handler unit nominal temperatures and humidity")); + + + parameter Modelica.Units.SI.Temperature THeaAirMix_nominal(displayUnit="degC")=277.15 + "Mixed air temperature during heating nominal conditions (used to size heating coil)" + annotation (Dialog(group="Air handler unit nominal temperatures and humidity")); + parameter Modelica.Units.SI.Temperature THeaAirSup_nominal(displayUnit="degC")=285.15 + "Supply air temperature during heating nominal conditions (used to size heating coil)" + annotation (Dialog(group="Air handler unit nominal temperatures and humidity")); + parameter Modelica.Units.SI.Temperature THeaWatInl_nominal(displayUnit="degC") + "Reheat coil nominal inlet water temperature" + annotation (Dialog(group="Air handler unit nominal temperatures and humidity")); + + parameter Boolean allowFlowReversal=false + "= false to simplify equations, assuming, but not enforcing, no flow reversal" + annotation (Evaluate=true); + + + + Buildings.Fluid.Movers.Preconfigured.SpeedControlled_y fanSup( + redeclare package Medium = MediumA, + m_flow_nominal=mAir_flow_nominal, + dp_nominal=780 + 10 + dpBuiStaSet, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial) + "Supply air fan" + annotation (Placement(transformation(extent={{246,-82},{266,-62}}))); + Buildings.Fluid.Sensors.VolumeFlowRate senSupFlo(redeclare package Medium = + MediumA, m_flow_nominal=mAir_flow_nominal) + "Sensor for supply fan flow rate" + annotation (Placement(transformation(extent={{346,-82},{366,-62}}))); + Buildings.Fluid.Sensors.TemperatureTwoPort TSup( + redeclare package Medium = MediumA, + m_flow_nominal=mAir_flow_nominal, + allowFlowReversal=allowFlowReversal) + annotation (Placement(transformation(extent={{276,-82},{296,-62}}))); + Buildings.Fluid.Sensors.TemperatureTwoPort TMix( + redeclare package Medium = MediumA, + m_flow_nominal=mAir_flow_nominal, + allowFlowReversal=allowFlowReversal, + transferHeat=true) "Mixed air temperature sensor" + annotation (Placement(transformation(extent={{82,-82},{102,-62}}))); + Buildings.Fluid.Sensors.VolumeFlowRate VOut1(redeclare package Medium = + MediumA, m_flow_nominal=mAir_flow_nominal) + "Outside air volume flow rate" + annotation (Placement(transformation(extent={{-68,-80},{-48,-60}}))); + Buildings.Fluid.Actuators.Dampers.Exponential + damRet( + redeclare package Medium = MediumA, + m_flow_nominal=mAir_flow_nominal, + from_dp=false, + riseTime=15, + dpDamper_nominal=5, + dpFixed_nominal=5) + "Return air damper" annotation (Placement(transformation( + origin={52,-6}, + extent={{10,-10},{-10,10}}, + rotation=90))); + Buildings.Fluid.Actuators.Dampers.Exponential + damOut( + redeclare package Medium = MediumA, + m_flow_nominal=mAir_flow_nominal, + from_dp=false, + riseTime=15, + dpDamper_nominal=5, + dpFixed_nominal=5) + "Outdoor air damper" + annotation (Placement(transformation(extent={{2,-80},{22,-60}}))); + Buildings.Fluid.FixedResistances.PressureDrop + dpSupDuc( + m_flow_nominal=mAir_flow_nominal, + redeclare package Medium = MediumA, + allowFlowReversal=allowFlowReversal, + dp_nominal=200 + 200 + 100 + 40) + "Pressure drop for supply duct" + annotation (Placement(transformation(extent={{196,-82},{216,-62}}))); + Buildings.Fluid.FixedResistances.Junction + splRetOut( + redeclare package Medium = MediumA, + tau=15, + m_flow_nominal=mAir_flow_nominal*{1,1,1}, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + dp_nominal(each displayUnit="Pa") = {0,0,0}, + portFlowDirection_1=if allowFlowReversal then Modelica.Fluid.Types.PortFlowDirection.Bidirectional + else Modelica.Fluid.Types.PortFlowDirection.Entering, + portFlowDirection_2=if allowFlowReversal then Modelica.Fluid.Types.PortFlowDirection.Bidirectional + else Modelica.Fluid.Types.PortFlowDirection.Leaving, + portFlowDirection_3=if allowFlowReversal then Modelica.Fluid.Types.PortFlowDirection.Bidirectional + else Modelica.Fluid.Types.PortFlowDirection.Entering, + linearized=true) + "Flow splitter" + annotation (Placement(transformation( + extent={{-10,10},{10,-10}}, + rotation=0, + origin={52,-70}))); + Buildings.Fluid.Actuators.Dampers.Exponential damExh( + from_dp=false, + riseTime=15, + dpFixed_nominal=5, + redeclare package Medium = MediumA, + m_flow_nominal=mAir_flow_nominal, + dpDamper_nominal=5) + "Exhaust air damper" + annotation (Placement(transformation(extent={{-16,-14},{-36,6}}))); + Buildings.Fluid.FixedResistances.PressureDrop dpRetDuc( + m_flow_nominal=mAir_flow_nominal, + redeclare package Medium = MediumA, + allowFlowReversal=allowFlowReversal, + dp_nominal=40) + "Pressure drop for return duct" + annotation (Placement(transformation(extent={{368,0},{348,20}}))); + Buildings.Fluid.Sensors.VolumeFlowRate senRetFlo(redeclare package Medium = + MediumA, m_flow_nominal=mAir_flow_nominal) + "Sensor for return fan flow rate" + annotation (Placement(transformation(extent={{234,0},{214,20}}))); + Buildings.Fluid.Sensors.TemperatureTwoPort TRet( + redeclare package Medium = MediumA, + m_flow_nominal=mAir_flow_nominal, + allowFlowReversal=allowFlowReversal) + "Return air temperature sensor" + annotation (Placement(transformation(extent={{138,0},{118,20}}))); + Buildings.Fluid.Movers.Preconfigured.SpeedControlled_y fanSup1( + redeclare package Medium = MediumA, + m_flow_nominal=mAir_flow_nominal, + dp_nominal=780 + 10 + dpBuiStaSet, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial) + "Supply air fan" + annotation (Placement(transformation(extent={{278,0},{258,20}}))); + Modelica.Fluid.Interfaces.FluidPort_b port_b(redeclare final package Medium = + MediumA) + "Fluid connector b (positive design flow direction is from port_a to port_b)" + annotation (Placement(transformation(extent={{556,-5},{524,25}}), + iconTransformation(extent={{552,11},{532,29}}))); + Modelica.Fluid.Interfaces.FluidPort_a port_a(redeclare final package Medium = + MediumA) + "Fluid connector a (positive design flow direction is from port_a to port_b)" + annotation (Placement(transformation(extent={{522,-90},{556,-58}}), + iconTransformation(extent={{532,-69},{552,-51}}))); + Modelica.Fluid.Interfaces.FluidPorts_b ports[2](redeclare each package Medium = + MediumA, each m_flow(max=if flowDirection == Modelica.Fluid.Types.PortFlowDirection.Leaving + then 0 else +Modelica.Constants.inf, min=if flowDirection == + Modelica.Fluid.Types.PortFlowDirection.Entering then 0 else -Modelica.Constants.inf)) + "Fluid ports" + annotation (Placement(transformation(extent={{-110,26},{-90,-54}}), + iconTransformation(extent={{-110,26},{-90,-54}}))); + Controls.BaseClasses.DataBus dataBus annotation (Placement(transformation( + extent={{-90,78},{-50,118}}), iconTransformation(extent={{-84,54},{-34, + 96}}))); + Modelica.Blocks.Math.RealToBoolean u1SupFan(threshold=0.2) + "Convert real to integer" + annotation (Placement(transformation(extent={{316,30},{356,70}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant opeMod(final k=Buildings.Controls.OBC.ASHRAE.G36.Types.OperationModes.occupied) + "AHU operation mode is occupied" + annotation (Placement(transformation(extent={{-66,-170},{-46,-150}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant sumDesPopBreZon(final k=0.0125) + "Sum of the population component design breathing zone flow rate" + annotation (Placement(transformation(extent={{200,-160},{220,-140}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant sumDesAreBreZon(final k=0.03) + "Sum of the area component design breathing zone flow rate" + annotation (Placement(transformation(extent={{324,-160},{344,-140}}))); + Buildings.Fluid.Sensors.RelativePressure dpDisSupFan(redeclare package Medium = + MediumA) "Supply fan static discharge pressure" annotation (Placement( + transformation( + extent={{-18,22},{18,-22}}, + rotation=90, + origin={404,-28}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant ducPreResReq(final k=2) + "AHU operation mode is occupied" + annotation (Placement(transformation(extent={{-64,-218},{-44,-198}}))); + Buildings.Fluid.Sensors.TemperatureTwoPort TOut( + redeclare package Medium = MediumA, + m_flow_nominal=mAir_flow_nominal, + allowFlowReversal=allowFlowReversal, + transferHeat=true) "Mixed air temperature sensor" + annotation (Placement(transformation(extent={{-32,-80},{-12,-60}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant sumDesPopBreZon1(final k=0.04) + "Sum of the population component design breathing zone flow rate" + annotation (Placement(transformation(extent={{264,-160},{284,-140}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant VSumZonPri_flow(final k=0.03) + "Sum of the area component design breathing zone flow rate" + annotation (Placement(transformation(extent={{444,-112},{464,-92}}))); + Buildings.Controls.OBC.CDL.Reals.Sources.Constant uOutAirFra_max(final k=0.5) + "Sum of the area component design breathing zone flow rate" + annotation (Placement(transformation(extent={{498,-122},{518,-102}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant maxSupResReq(final k=6) + "AHU operation mode is occupied" + annotation (Placement(transformation(extent={{-74,-268},{-54,-248}}))); + + protected + parameter Modelica.Fluid.Types.PortFlowDirection flowDirection=Modelica.Fluid.Types.PortFlowDirection.Bidirectional + "Allowed flow direction" annotation (Evaluate=true, Dialog(tab="Advanced")); +equation + connect(TSup.port_a,fanSup. port_b) annotation (Line( + points={{276,-72},{266,-72}}, + color={0,127,255}, + smooth=Smooth.None, + thickness=0.5)); + connect(TSup.port_b,senSupFlo. port_a) + annotation (Line(points={{296,-72},{346,-72}}, color={0,127,255})); + connect(dpSupDuc.port_b,fanSup. port_a) + annotation (Line(points={{216,-72},{246,-72}}, color={0,127,255})); + connect(damOut.port_b,splRetOut. port_1) + annotation (Line(points={{22,-70},{42,-70}}, color={0,127,255})); + connect(splRetOut.port_2,TMix. port_a) + annotation (Line(points={{62,-70},{72,-70},{72,-72},{82,-72}}, + color={0,127,255})); + connect(damRet.port_b,splRetOut. port_3) annotation (Line(points={{52,-16},{52, + -60}}, color={0,127,255})); + connect(dpSupDuc.port_a, TMix.port_b) annotation (Line(points={{196,-72},{102, + -72}}, color={0,127,255})); + connect(senRetFlo.port_b,TRet. port_a) annotation (Line(points={{214,10},{138, + 10}}, color={0,127,255})); + connect(TRet.port_b, damRet.port_a) annotation (Line(points={{118,10},{52,10}, + {52,4}}, color={0,127,255})); + connect(TRet.port_b, damExh.port_a) annotation (Line(points={{118,10},{-6,10}, + {-6,-4},{-16,-4}}, color= + {0,127,255})); + connect(senRetFlo.port_a, fanSup1.port_b) + annotation (Line(points={{234,10},{258,10}}, color={0,127,255})); + connect(fanSup1.port_a, dpRetDuc.port_b) + annotation (Line(points={{278,10},{348,10}}, color={0,127,255})); + connect(senSupFlo.port_b, port_a) annotation (Line(points={{366,-72},{516,-72}, + {516,-74},{539,-74}}, color={0,127,255})); + connect(dpRetDuc.port_a, port_b) + annotation (Line(points={{368,10},{540,10}}, color={0,127,255})); + connect(damExh.port_b, ports[1]) annotation (Line(points={{-36,-4},{-84,-4},{-84, + 6},{-100,6}}, color={0,127,255})); + connect(VOut1.port_a, ports[2]) annotation (Line(points={{-68,-70},{-84,-70},{ + -84,-34},{-100,-34}}, color={0,127,255})); + connect(dataBus.yRetDam, damRet.y) annotation (Line( + points={{-70,98},{-70,-24},{32,-24},{32,-6},{40,-6}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + connect(dataBus.yOutDam, damOut.y) annotation (Line( + points={{-70,98},{-70,-48},{12,-48},{12,-58}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-3,6},{-3,6}}, + horizontalAlignment=TextAlignment.Right)); + connect(dataBus.ySupFan, fanSup1.y) annotation (Line( + points={{-70,98},{-70,32},{268,32},{268,22}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + connect(dataBus.ySupFan, fanSup.y) annotation (Line( + points={{-70,98},{-70,32},{248,32},{248,-52},{256,-52},{256,-60}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + connect(dataBus.yOutDam, damExh.y) annotation (Line( + points={{-70,98},{-70,18},{-26,18},{-26,8}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + connect(opeMod.y, dataBus.uAhuOpeMod) annotation (Line(points={{-44,-160},{-34, + -160},{-34,-158},{-36,-158},{-36,-154},{-34,-154},{-34,-86},{-38,-86}, + {-38,-52},{-70,-52},{-70,98}}, color={255,127,0}), Text( + string="%second", + index=1, + extent={{6,3},{6,3}}, + horizontalAlignment=TextAlignment.Left)); + connect(dpDisSupFan.port_a, port_a) annotation (Line(points={{404,-46},{404,-72}, + {516,-72},{516,-74},{539,-74}}, color={0,127,255})); + connect(VOut1.port_a, dpDisSupFan.port_b) annotation (Line(points={{-68,-70},{ + -84,-70},{-84,-26},{376,-26},{376,0},{404,0},{404,-10}}, color={0,127, + 255})); + connect(dpDisSupFan.p_rel, dataBus.dpDuc) annotation (Line(points={{384.2,-28}, + {-70,-28},{-70,98}}, color={0,0,127}), Text( + string="%second", + index=1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + connect(ducPreResReq.y, dataBus.uZonPreResReq) annotation (Line(points={{-42,-208}, + {-38,-208},{-38,-204},{-40,-204},{-40,-200},{-38,-200},{-38,-178},{-70, + -178},{-70,98}}, color={255,127,0}), Text( + string="%second", + index=1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + connect(VOut1.port_b, TOut.port_a) + annotation (Line(points={{-48,-70},{-32,-70}}, color={0,127,255})); + connect(TOut.port_b, damOut.port_a) + annotation (Line(points={{-12,-70},{2,-70}}, color={0,127,255})); + connect(TSup.T, dataBus.TAirSup) annotation (Line(points={{286,-61},{136,-61}, + {136,38},{-70,38},{-70,98}}, color={0,0,127}), Text( + string="%second", + index=1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + connect(dataBus.ySupFan, u1SupFan.u) annotation (Line( + points={{-70,98},{-70,50},{312,50}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + connect(u1SupFan.y, dataBus.u1SupFan) annotation (Line(points={{358,50},{366,50}, + {366,76},{-44,76},{-44,72},{-70,72},{-70,98}}, color={255,0,255}), + Text( + string="%second", + index=1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + connect(sumDesPopBreZon.y, dataBus.VSumAdjPopBreZon_flow) annotation (Line( + points={{222,-150},{230,-150},{230,-6},{200,-6},{200,48},{-70,48},{-70,98}}, + color={0,0,127}), Text( + string="%second", + index=1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + connect(sumDesAreBreZon.y, dataBus.VSumAdjAreBreZon_flow) annotation (Line( + points={{346,-150},{364,-150},{364,-26},{-70,-26},{-70,98}}, color={0,0, + 127}), Text( + string="%second", + index=1, + extent={{6,3},{6,3}}, + horizontalAlignment=TextAlignment.Left)); + connect(TOut.T, dataBus.TOut) annotation (Line(points={{-22,-59},{-22,-50},{-70, + -50},{-70,98}}, color={0,0,127}), Text( + string="%second", + index=1, + extent={{-3,6},{-3,6}}, + horizontalAlignment=TextAlignment.Right)); + connect(VOut1.V_flow, dataBus.VAirOut_flow) annotation (Line(points={{-58,-59}, + {-38,-59},{-38,98},{-70,98}}, color={0,0,127}), Text( + string="%second", + index=1, + extent={{6,3},{6,3}}, + horizontalAlignment=TextAlignment.Left)); + connect(VSumZonPri_flow.y, dataBus.VSumZonPri_flow) annotation (Line(points={{ + 466,-102},{200,-102},{200,98},{-70,98}}, color={0,0,127}), Text( + string="%second", + index=1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + connect(uOutAirFra_max.y, dataBus.uOutAirFra_max) annotation (Line(points={{520, + -112},{226,-112},{226,98},{-70,98}}, color={0,0,127}), Text( + string="%second", + index=1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + connect(maxSupResReq.y, dataBus.uZonTemResReq) annotation (Line(points={{-52,-258}, + {-44,-258},{-44,-224},{-70,-224},{-70,98}}, color={255,127,0}), Text( + string="%second", + index=1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + annotation (Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-180}, + {540,100}}), graphics={Rectangle( + extent={{-98,102},{542,-138}}, + lineColor={28,108,200}, + fillColor={244,125,35}, + fillPattern=FillPattern.Solid)}), + Diagram(coordinateSystem( + preserveAspectRatio=false, extent={{-100,-180},{540,100}}))); +end AhuWithEconomizer; + partial model PartialAhu +replaceable package MediumA = Modelica.Media.Interfaces.PartialMedium +"Medium model" annotation (choicesAllMatching=true); + + constant Integer numZon(min=2)=2 "Total number of served VAV boxes"; + + parameter Modelica.Units.SI.Volume VRoo[numZon] "Room volume per zone"; + parameter Modelica.Units.SI.Area AFlo[numZon] "Floor area per zone"; + + final parameter Modelica.Units.SI.Area ATot=sum(AFlo) +"Total floor area for all zone"; + + constant Real conv=1.2/3600 "Conversion factor for nominal mass flow rate"; + + parameter Modelica.Units.SI.HeatFlowRate QHeaAHU_flow_nominal(min=0)= + mHeaAir_flow_nominal*Buildings.Utilities.Psychrometrics.Constants.cpAir*( + THeaAirSup_nominal - THeaAirMix_nominal) +"Nominal heating heat flow rate of air handler unit coil"; + + parameter Modelica.Units.SI.HeatFlowRate QCooAHU_flow_nominal(max=0) = 1.3* + mCooAir_flow_nominal*Buildings.Utilities.Psychrometrics.Constants.cpAir*( + TCooAirSup_nominal - TCooAirMix_nominal) +"Nominal total cooling heat flow rate of air handler unit coil (negative number)"; + + parameter Modelica.Units.SI.MassFlowRate mCooVAV_flow_nominal[numZon] +"Design mass flow rate per zone for cooling" +annotation (Dialog(group="Nominal mass flow rate")); + + parameter Modelica.Units.SI.MassFlowRate mHeaVAV_flow_nominal[numZon]=0.3* + mCooVAV_flow_nominal +"Design mass flow rate per zone for heating" +annotation (Dialog(group="Nominal mass flow rate")); + + parameter Modelica.Units.SI.MassFlowRate mAir_flow_nominal= + 0.01 +"Nominal mass flow rate for fan" +annotation (Dialog(group="Nominal mass flow rate")); + parameter Modelica.Units.SI.MassFlowRate mCooAir_flow_nominal=0.7*sum( + mCooVAV_flow_nominal) +"Nominal mass flow rate for fan" +annotation (Dialog(group="Nominal mass flow rate")); + parameter Modelica.Units.SI.MassFlowRate mHeaAir_flow_nominal=0.7*sum( + mHeaVAV_flow_nominal) +"Nominal mass flow rate for fan" +annotation (Dialog(group="Nominal mass flow rate")); + + parameter Modelica.Units.SI.MassFlowRate mHeaWat_flow_nominal= + QHeaAHU_flow_nominal/Buildings.Utilities.Psychrometrics.Constants.cpWatLiq/10 +"Nominal water mass flow rate for heating coil in AHU" +annotation (Dialog(group="Nominal mass flow rate")); + parameter Modelica.Units.SI.MassFlowRate mCooWat_flow_nominal= + QCooAHU_flow_nominal/Buildings.Utilities.Psychrometrics.Constants.cpWatLiq/(-6) +"Nominal water mass flow rate for cooling coil" +annotation (Dialog(group="Nominal mass flow rate")); + + parameter Real ratOAFlo_A(final unit="m3/(s.m2)") = 0.3e-3 +"Outdoor airflow rate required per unit area"; + parameter Real ratOAFlo_P=2.5e-3 +"Outdoor airflow rate required per person"; + parameter Real ratP_A=5e-2 +"Occupant density"; + parameter Real effZ(final unit="1") = 0.8 +"Zone air distribution effectiveness (limiting value)"; + parameter Real divP(final unit="1") = 0.7 +"Occupant diversity ratio"; + + parameter Modelica.Units.SI.VolumeFlowRate VZonOA_flow_nominal[numZon]= + ( + ratOAFlo_P*ratP_A + ratOAFlo_A)*AFlo/effZ +"Zone outdoor air flow rate of each VAV box"; + + parameter Modelica.Units.SI.VolumeFlowRate Vou_flow_nominal= + (divP*ratOAFlo_P* + ratP_A + ratOAFlo_A)*sum(AFlo) "System uncorrected outdoor air flow rate"; + parameter Real effVen(final unit="1") = if divP < 0.6 then +0.88 * divP + 0.22 else 0.75 +"System ventilation efficiency"; + parameter Modelica.Units.SI.VolumeFlowRate Vot_flow_nominal=Vou_flow_nominal/ + effVen "System design outdoor air flow rate"; + + parameter Modelica.Units.SI.Temperature THeaOn=293.15 +"Heating setpoint during on" +annotation (Dialog(group="Room temperature setpoints")); + parameter Modelica.Units.SI.Temperature THeaOff=285.15 +"Heating setpoint during off" +annotation (Dialog(group="Room temperature setpoints")); + parameter Modelica.Units.SI.Temperature TCooOn=297.15 +"Cooling setpoint during on" +annotation (Dialog(group="Room temperature setpoints")); + parameter Modelica.Units.SI.Temperature TCooOff=303.15 +"Cooling setpoint during off" +annotation (Dialog(group="Room temperature setpoints")); + parameter Modelica.Units.SI.PressureDifference dpBuiStaSet(min=0) = 12 +"Building static pressure"; + parameter Real yFanMin=0.1 "Minimum fan speed"; + + parameter Modelica.Units.SI.Temperature TCooAirMix_nominal(displayUnit="degC")= + 303.15 +"Mixed air temperature during cooling nominal conditions (used to size cooling coil)" +annotation (Dialog(group="Air handler unit nominal temperatures and humidity")); + parameter Modelica.Units.SI.Temperature TCooAirSup_nominal(displayUnit="degC")= + 285.15 +"Supply air temperature during cooling nominal conditions (used to size cooling coil)" +annotation (Dialog(group="Air handler unit nominal temperatures and humidity")); + parameter Modelica.Units.SI.MassFraction wCooAirMix_nominal=0.017 +"Humidity ratio of mixed air at a nominal conditions used to size cooling coil (in kg/kg dry total)" +annotation (Dialog(group="Air handler unit nominal temperatures and humidity")); + parameter Modelica.Units.SI.Temperature TCooWatInl_nominal(displayUnit="degC")= + 279.15 +"Cooling coil nominal inlet water temperature" +annotation (Dialog(group="Air handler unit nominal temperatures and humidity")); + + parameter Modelica.Units.SI.Temperature THeaAirMix_nominal(displayUnit="degC")= + 277.15 +"Mixed air temperature during heating nominal conditions (used to size heating coil)" +annotation (Dialog(group="Air handler unit nominal temperatures and humidity")); + parameter Modelica.Units.SI.Temperature THeaAirSup_nominal(displayUnit="degC")= + 285.15 +"Supply air temperature during heating nominal conditions (used to size heating coil)" +annotation (Dialog(group="Air handler unit nominal temperatures and humidity")); + parameter Modelica.Units.SI.Temperature THeaWatInl_nominal(displayUnit="degC") +"Reheat coil nominal inlet water temperature" +annotation (Dialog(group="Air handler unit nominal temperatures and humidity")); + + parameter Boolean allowFlowReversal=false +"= false to simplify equations, assuming, but not enforcing, no flow reversal" +annotation (Evaluate=true); + + Buildings.Fluid.Movers.Preconfigured.SpeedControlled_y fanSup( + redeclare package Medium = MediumA, + m_flow_nominal=mAir_flow_nominal, + dp_nominal=780 + 10 + dpBuiStaSet, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial) + "Supply air fan" +annotation (Placement(transformation(extent={{246,-82},{266,-62}}))); + Buildings.Fluid.Sensors.VolumeFlowRate senSupFlo(redeclare package Medium = + MediumA, m_flow_nominal=mAir_flow_nominal) +"Sensor for supply fan flow rate" +annotation (Placement(transformation(extent={{346,-82},{366,-62}}))); + Buildings.Fluid.Sensors.TemperatureTwoPort TSup( + redeclare package Medium = MediumA, + m_flow_nominal=mAir_flow_nominal, + allowFlowReversal=allowFlowReversal) +annotation (Placement(transformation(extent={{276,-82},{296,-62}}))); + Buildings.Fluid.Sensors.TemperatureTwoPort TMix( + redeclare package Medium = MediumA, + m_flow_nominal=mAir_flow_nominal, + allowFlowReversal=allowFlowReversal, + transferHeat=true) "Mixed air temperature sensor" +annotation (Placement(transformation(extent={{82,-82},{102,-62}}))); + Buildings.Fluid.Sensors.VolumeFlowRate VOut1(redeclare package Medium = + MediumA, m_flow_nominal=mAir_flow_nominal) +"Outside air volume flow rate" +annotation (Placement(transformation(extent={{-68,-80},{-48,-60}}))); + Buildings.Fluid.Actuators.Dampers.Exponential + damRet( + redeclare package Medium = MediumA, + m_flow_nominal=mAir_flow_nominal, + from_dp=false, + riseTime=15, + dpDamper_nominal=5, + dpFixed_nominal=5) + "Return air damper" annotation (Placement(transformation( + origin={52,-6}, + extent={{10,-10},{-10,10}}, + rotation=90))); + Buildings.Fluid.Actuators.Dampers.Exponential + damOut( + redeclare package Medium = MediumA, + m_flow_nominal=mAir_flow_nominal, + from_dp=false, + riseTime=15, + dpDamper_nominal=5, + dpFixed_nominal=5) + "Outdoor air damper" +annotation (Placement(transformation(extent={{2,-80},{22,-60}}))); + Buildings.Fluid.FixedResistances.PressureDrop + dpSupDuc( + m_flow_nominal=mAir_flow_nominal, + redeclare package Medium = MediumA, + allowFlowReversal=allowFlowReversal, + dp_nominal=200 + 200 + 100 + 40) + "Pressure drop for supply duct" +annotation (Placement(transformation(extent={{196,-82},{216,-62}}))); + Buildings.Fluid.FixedResistances.Junction + splRetOut( + redeclare package Medium = MediumA, + tau=15, + m_flow_nominal=mAir_flow_nominal*{1,1,1}, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + dp_nominal(each displayUnit="Pa") = {0,0,0}, + portFlowDirection_1=if allowFlowReversal then Modelica.Fluid.Types.PortFlowDirection.Bidirectional + else Modelica.Fluid.Types.PortFlowDirection.Entering, + portFlowDirection_2=if allowFlowReversal then Modelica.Fluid.Types.PortFlowDirection.Bidirectional + else Modelica.Fluid.Types.PortFlowDirection.Leaving, + portFlowDirection_3=if allowFlowReversal then Modelica.Fluid.Types.PortFlowDirection.Bidirectional + else Modelica.Fluid.Types.PortFlowDirection.Entering, + linearized=true) +"Flow splitter" +annotation (Placement(transformation( + extent={{-10,10},{10,-10}}, + rotation=0, + origin={52,-70}))); + Buildings.Fluid.Actuators.Dampers.Exponential damExh( + from_dp=false, + riseTime=15, + dpFixed_nominal=5, + redeclare package Medium = MediumA, + m_flow_nominal=mAir_flow_nominal, + dpDamper_nominal=5) + "Exhaust air damper" +annotation (Placement(transformation(extent={{-16,-14},{-36,6}}))); + Buildings.Fluid.FixedResistances.PressureDrop dpRetDuc( + m_flow_nominal=mAir_flow_nominal, + redeclare package Medium = MediumA, + allowFlowReversal=allowFlowReversal, + dp_nominal=40) + "Pressure drop for return duct" +annotation (Placement(transformation(extent={{368,0},{348,20}}))); + Buildings.Fluid.Sensors.VolumeFlowRate senRetFlo(redeclare package Medium = + MediumA, m_flow_nominal=mAir_flow_nominal) +"Sensor for return fan flow rate" +annotation (Placement(transformation(extent={{234,0},{214,20}}))); + Buildings.Fluid.Sensors.TemperatureTwoPort TRet( + redeclare package Medium = MediumA, + m_flow_nominal=mAir_flow_nominal, + allowFlowReversal=allowFlowReversal) + "Return air temperature sensor" +annotation (Placement(transformation(extent={{138,0},{118,20}}))); + Buildings.Fluid.Movers.Preconfigured.SpeedControlled_y fanSup1( + redeclare package Medium = MediumA, + m_flow_nominal=mAir_flow_nominal, + dp_nominal=780 + 10 + dpBuiStaSet, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial) + "Supply air fan" +annotation (Placement(transformation(extent={{278,0},{258,20}}))); + Modelica.Fluid.Interfaces.FluidPort_b port_b(redeclare final package Medium = + MediumA) +"Fluid connector b (positive design flow direction is from port_a to port_b)" +annotation (Placement(transformation(extent={{556,-5},{524,25}}), + iconTransformation(extent={{552,11},{532,29}}))); + Modelica.Fluid.Interfaces.FluidPort_a port_a(redeclare final package Medium = + MediumA) +"Fluid connector a (positive design flow direction is from port_a to port_b)" +annotation (Placement(transformation(extent={{522,-90},{556,-58}}), + iconTransformation(extent={{532,-69},{552,-51}}))); + Modelica.Fluid.Interfaces.FluidPorts_b ports[2](redeclare each package Medium = + MediumA, each m_flow(max=if flowDirection == Modelica.Fluid.Types.PortFlowDirection.Leaving + then 0 else +Modelica.Constants.inf, min=if flowDirection == + Modelica.Fluid.Types.PortFlowDirection.Entering then 0 else -Modelica.Constants.inf)) +"Fluid ports" +annotation (Placement(transformation(extent={{-110,26},{-90,-54}}), + iconTransformation(extent={{-110,26},{-90,-54}}))); + Buildings.Fluid.Sensors.RelativePressure dpDisSupFan(redeclare package Medium = + MediumA) "Supply fan static discharge pressure" annotation (Placement( + transformation( + extent={{-18,22},{18,-22}}, + rotation=90, + origin={404,-28}))); + Buildings.Fluid.Sensors.TemperatureTwoPort TOut( +redeclare package Medium = MediumA, +m_flow_nominal=mAir_flow_nominal, +allowFlowReversal=allowFlowReversal, +transferHeat=true) "Mixed air temperature sensor" +annotation (Placement(transformation(extent={{-32,-80},{-12,-60}}))); + +protected + parameter Modelica.Fluid.Types.PortFlowDirection flowDirection=Modelica.Fluid.Types.PortFlowDirection.Bidirectional +"Allowed flow direction" annotation (Evaluate=true, Dialog(tab="Advanced")); +equation + connect( + TSup.port_a,fanSup. port_b) annotation (Line( + points={{276,-72},{266,-72}}, + color={0,127,255}, + smooth=Smooth.None, + thickness=0.5)); + connect( + TSup.port_b,senSupFlo. port_a) +annotation (Line(points={{296,-72},{346,-72}}, color={0,127,255})); + connect( + dpSupDuc.port_b,fanSup. port_a) +annotation (Line(points={{216,-72},{246,-72}}, color={0,127,255})); + connect( + damOut.port_b,splRetOut. port_1) +annotation (Line(points={{22,-70},{42,-70}}, color={0,127,255})); + connect( + splRetOut.port_2,TMix. port_a) +annotation (Line(points={{62,-70},{72,-70},{72,-72},{82,-72}}, + color={0,127,255})); + connect( + damRet.port_b,splRetOut. port_3) annotation (Line(points={{52,-16},{52, + -60}}, color={0,127,255})); +connect(dpSupDuc.port_a, TMix.port_b) annotation (Line(points={{196,-72},{102, + -72}}, color={0,127,255})); + connect( + senRetFlo.port_b,TRet. port_a) annotation (Line(points={{214,10},{138, + 10}}, color={0,127,255})); +connect(TRet.port_b, damRet.port_a) annotation (Line(points={{118,10},{52,10}, + {52,4}}, color={0,127,255})); +connect(TRet.port_b, damExh.port_a) annotation (Line(points={{118,10},{-6,10}, + {-6,-4},{-16,-4}}, color= + {0,127,255})); +connect(senRetFlo.port_a, fanSup1.port_b) + annotation (Line(points={{234,10},{258,10}}, color={0,127,255})); +connect(fanSup1.port_a, dpRetDuc.port_b) + annotation (Line(points={{278,10},{348,10}}, color={0,127,255})); + connect( + senSupFlo.port_b, port_a) annotation (Line(points={{366,-72},{516,-72}, + {516,-74},{539,-74}}, color={0,127,255})); + connect( + dpRetDuc.port_a, port_b) +annotation (Line(points={{368,10},{540,10}}, color={0,127,255})); + connect( + damExh.port_b, ports[1]) annotation (Line(points={{-36,-4},{-84,-4},{-84, + 6},{-100,6}}, color={0,127,255})); + connect( + VOut1.port_a, ports[2]) annotation (Line(points={{-68,-70},{-84,-70},{ + -84,-34},{-100,-34}}, color={0,127,255})); + connect( + dpDisSupFan.port_a, port_a) annotation (Line(points={{404,-46},{404,-72}, + {516,-72},{516,-74},{539,-74}}, color={0,127,255})); + connect( + VOut1.port_a, dpDisSupFan.port_b) annotation (Line(points={{-68,-70},{ + -84,-70},{-84,-26},{376,-26},{376,0},{404,0},{404,-10}}, color={0,127, + 255})); + connect( + VOut1.port_b, TOut.port_a) +annotation (Line(points={{-48,-70},{-32,-70}}, color={0,127,255})); + connect( + TOut.port_b, damOut.port_a) +annotation (Line(points={{-12,-70},{2,-70}}, color={0,127,255})); +annotation (Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-180}, + {540,100}}), graphics={Rectangle( + extent={{-98,102},{542,-138}}, + lineColor={28,108,200}, + fillColor={244,125,35}, + fillPattern=FillPattern.Solid)}), + Diagram(coordinateSystem( + preserveAspectRatio=false, extent={{-100,-180},{540,100}}))); +end PartialAhu; +partial model PartialPump + replaceable package Medium = Modelica.Media.Interfaces.PartialMedium + "Medium model for air" annotation (choicesAllMatching=true); + + parameter Modelica.Units.SI.MassFlowRate m_flow_nominal + "Nominal mass flow rate of radiator loop"; + parameter Modelica.Units.SI.PressureDifference dp_nominal + "Pressure difference of loop"; + + Buildings.Fluid.Movers.Preconfigured.SpeedControlled_y pumRad( + redeclare package Medium = Medium, + m_flow_nominal=m_flow_nominal, + dp_nominal=dp_nominal, + energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState) + "Pump that serves the radiators" annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-4,0}))); + Buildings.Fluid.Sensors.RelativePressure dpSen(redeclare package Medium = + Medium) + annotation (Placement(transformation(extent={{-10,-10},{10,10}}, + rotation=180, + origin={-6,32}))); + Buildings.Fluid.Sensors.TemperatureTwoPort temSup(redeclare package Medium = + Medium, m_flow_nominal=m_flow_nominal) + annotation (Placement(transformation(extent={{-10,-10},{10,10}}, + rotation=0, + origin={42,0}))); + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter + gain(k=1/dp_nominal) + "Gain used to normalize pressure measurement signal" + annotation (Placement(transformation(extent={{10,-10},{-10,10}}, + rotation=-90, + origin={-6,76}))); + extends Buildings.Fluid.Interfaces.PartialTwoPort; +equation + connect(pumRad.port_b,dpSen. port_a) + annotation (Line( + points={{6,0},{14,0},{14,32},{4,32}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(dpSen.port_b,pumRad. port_a) + annotation (Line( + points={{-16,32},{-22,32},{-22,0},{-14,0}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(pumRad.port_b,temSup. port_a) annotation (Line( + points={{6,0},{32,0}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(gain.u,dpSen. p_rel) annotation (Line( + points={{-6,64},{-6,41}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(port_a, pumRad.port_a) + annotation (Line(points={{-100,0},{-14,0}}, color={0,127,255})); + connect(temSup.port_b, port_b) + annotation (Line(points={{52,0},{100,0}}, color={0,127,255})); + annotation (Icon(coordinateSystem(preserveAspectRatio=false), graphics={ + Rectangle( + extent={{-100,16},{100,-16}}, + lineColor={0,0,0}, + fillColor={0,127,255}, + fillPattern=FillPattern.HorizontalCylinder), + Ellipse( + extent={{-58,58},{58,-58}}, + lineColor={0,0,0}, + fillPattern=FillPattern.Sphere, + fillColor={0,100,199}), + Polygon( + points={{0,50},{0,-50},{54,0},{0,50}}, + lineColor={0,0,0}, + pattern=LinePattern.None, + fillPattern=FillPattern.HorizontalCylinder, + fillColor={255,255,255}), + Ellipse( + extent={{4,16},{36,-16}}, + lineColor={0,0,0}, + fillPattern=FillPattern.Sphere, + visible=energyDynamics <> Modelica.Fluid.Types.Dynamics.SteadyState, + fillColor={0,100,199})}), Diagram(coordinateSystem( + preserveAspectRatio=false))); +end PartialPump; + + + partial model PartialVAVBox + "Supply box of a VAV system with a hot water reheat coil" + extends + Modelica.Blocks.Icons.Block; + replaceable package MediumA = Modelica.Media.Interfaces.PartialMedium + "Medium model for air" annotation (choicesAllMatching=true); + + + parameter Boolean allowFlowReversal=true +"= false to simplify equations, assuming, but not enforcing, no flow reversal"; + parameter Modelica.Units.SI.MassFlowRate mCooAir_flow_nominal +"Nominal air mass flow rate from cooling sizing calculations"; + parameter Modelica.Units.SI.MassFlowRate mHeaAir_flow_nominal +"Nominal air mass flow rate from heating sizing calculations"; + final parameter Modelica.Units.SI.MassFlowRate mHeaWat_flow_nominal= + QHea_flow_nominal/(cpWatLiq*(THeaWatInl_nominal - THeaWatOut_nominal)) +"Nominal mass flow rate of hot water to reheat coil"; + parameter Modelica.Units.SI.Volume VRoo "Room volume"; + parameter Modelica.Units.SI.Temperature THeaWatInl_nominal(start=55 + 273.15, + displayUnit="degC") "Reheat coil nominal inlet water temperature"; + parameter Modelica.Units.SI.Temperature THeaWatOut_nominal(start= + THeaWatInl_nominal - 10, displayUnit="degC") +"Reheat coil nominal outlet water temperature"; + parameter Modelica.Units.SI.Temperature THeaAirInl_nominal(start=12 + 273.15, + displayUnit="degC") +"Inlet air nominal temperature into VAV box during heating"; + parameter Modelica.Units.SI.Temperature THeaAirDis_nominal(start=28 + 273.15, + displayUnit="degC") +"Discharge air temperature from VAV box during heating"; + parameter Modelica.Units.SI.HeatFlowRate QHea_flow_nominal= + mHeaAir_flow_nominal * cpAir * (THeaAirDis_nominal-THeaAirInl_nominal) +"Nominal heating heat flow rate"; + Modelica.Fluid.Interfaces.FluidPort_a port_aAir( +redeclare package Medium=MediumA) +"Fluid connector a1 (positive design flow direction is from port_a1 to port_b1)" +annotation (Placement(transformation(extent={{-10,-110},{10,-90}}), + iconTransformation(extent={{-10,-110},{10,-90}}))); + Modelica.Fluid.Interfaces.FluidPort_a port_bAir( +redeclare package Medium=MediumA) +"Fluid connector b (positive design flow direction is from port_a1 to port_b1)" +annotation (Placement(transformation(extent={{-10,90},{10,110}}), + iconTransformation(extent={{-10,90},{10,110}}))); + Buildings.Fluid.Actuators.Dampers.Exponential vav( +redeclare package Medium = MediumA, +m_flow_nominal=mCooAir_flow_nominal, +dpDamper_nominal=20, +allowFlowReversal=allowFlowReversal, +dpFixed_nominal=130) "VAV box for room" annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=90, + origin={0,10}))); + + Buildings.Fluid.Sensors.TemperatureTwoPort senTem( +redeclare package Medium = MediumA, +initType=Modelica.Blocks.Types.Init.InitialState, +m_flow_nominal=mCooAir_flow_nominal, +allowFlowReversal=allowFlowReversal) "Supply air temperature sensor" +annotation (Placement(transformation( + extent={{-10,10},{10,-10}}, + rotation=90, + origin={0,40}))); + Buildings.Fluid.Sensors.VolumeFlowRate senVolFlo( +redeclare package Medium = MediumA, +initType=Modelica.Blocks.Types.Init.InitialState, +m_flow_nominal=mCooAir_flow_nominal, +allowFlowReversal=allowFlowReversal) +"Supply air volumetric flow rate sensor" annotation (Placement( + transformation( + extent={{-10,10},{10,-10}}, + rotation=90, + origin={0,80}))); +protected + constant Modelica.Units.SI.SpecificHeatCapacity cpAir=Buildings.Utilities.Psychrometrics.Constants.cpAir +"Air specific heat capacity"; + constant Modelica.Units.SI.SpecificHeatCapacity cpWatLiq=Buildings.Utilities.Psychrometrics.Constants.cpWatLiq +"Water specific heat capacity"; +equation + connect( + vav.port_b, senTem.port_a) annotation (Line(points={{6.66134e-16,20},{ + 0,20},{0,30},{-4.44089e-16,30}}, color={0,127,255})); + connect( + senTem.port_b, senVolFlo.port_a) +annotation (Line(points={{0,50},{0,70},{-6.66134e-16,70}}, + color={0,127,255})); + connect( + senVolFlo.port_b, port_bAir) +annotation (Line(points={{4.44089e-16,90},{0,90},{0,100}}, + color={0,127,255})); + connect( + vav.port_a, port_aAir) +annotation (Line(points={{-5.55112e-16,0},{0,-100}}, color={0,127,255})); + annotation (Icon( +graphics={ + Rectangle( + extent={{-108.07,-16.1286},{93.93,-20.1286}}, + lineColor={0,0,0}, + fillPattern=FillPattern.HorizontalCylinder, + fillColor={0,127,255}, + origin={-18.1286,6.07}, + rotation=90), + Rectangle( + extent={{100.8,-22},{128.8,-44}}, + lineColor={0,0,0}, + fillPattern=FillPattern.HorizontalCylinder, + fillColor={192,192,192}, + origin={-32,-76.8}, + rotation=90), + Rectangle( + extent={{102.2,-11.6667},{130.2,-25.6667}}, + lineColor={0,0,0}, + fillPattern=FillPattern.HorizontalCylinder, + fillColor={0,127,255}, + origin={-17.6667,-78.2}, + rotation=90), + Polygon( + points={{-12,32},{16,48},{16,46},{-12,30},{-12,32}}, + pattern=LinePattern.None, + smooth=Smooth.None, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + lineColor={0,0,0}), + Line(points={{-100,80},{-38,80},{-38,38},{-10,38}}, color={255,255,0}, + thickness=1)})); +end PartialVAVBox; + model PumpSystem_002 +extends house_yaml.Common.Fluid.Ventilation.PartialPump; +Controls.BaseClasses.DataBus dataBus + annotation (Placement(transformation( + extent={{-120,-18},{-80,22}}), iconTransformation(extent={{-120,62},{-78,98}}))); +equation +connect(dataBus.ySystem_002, pumRad.y); +connect(dataBus.y_gainSystem_002, gain.y); +connect(dataBus.TPump_control, temSup.T); + end PumpSystem_002; + + + end Ventilation; + end Fluid; + + package HeatTransfer + package IdealHeatingSystem + model IdealHeatEmission + parameter Real frad=0.3 "radiative fraction"; + parameter Real power=2000 "heating power"; + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a heatPortCon + "Heat port for convective heat transfer with room air temperature" + annotation (Placement(transformation(extent={{-30,62},{-10,82}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a heatPortRad + "Heat port for radiative heat transfer with room radiation temperature" + annotation (Placement(transformation(extent={{10,62},{30,82}}))); + Modelica.Blocks.Interfaces.RealInput y + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + Modelica.Blocks.Math.Gain HeatingPower(k=power) + annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); + Modelica.Blocks.Math.Gain convectiveGain(k=1 - frad) + annotation (Placement(transformation(extent={{2,-60},{22,-40}}))); + Modelica.Blocks.Math.Gain radiativeGain(k=frad) + annotation (Placement(transformation(extent={{2,-90},{22,-70}}))); + Modelica.Blocks.Nonlinear.Limiter limiter(uMax=1, uMin=0) + annotation (Placement(transformation(extent={{-86,-10},{-66,10}}))); + protected + Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow preSumCon(final + alpha=0) + "Heat input into radiator from convective heat transfer" + annotation (Placement(transformation(extent={{52,-60},{72,-40}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow preSumRad(final + alpha=0) + "Heat input into radiator from radiative heat transfer" + annotation (Placement(transformation(extent={{52,-90},{72,-70}}))); + equation + + connect(preSumCon.port,heatPortCon) annotation (Line( + points={{72,-50},{80,-50},{80,40},{-20,40},{-20,72}}, + color={191,0,0})); + connect(preSumRad.port,heatPortRad) annotation (Line( + points={{72,-80},{86,-80},{86,50},{20,50},{20,72}}, + color={191,0,0})); + connect(preSumCon.Q_flow, convectiveGain.y) + annotation (Line(points={{52,-50},{23,-50}}, color={0,0,127})); + connect(radiativeGain.y, preSumRad.Q_flow) + annotation (Line(points={{23,-80},{52,-80}}, color={0,0,127})); + connect(HeatingPower.y, convectiveGain.u) annotation (Line(points={{-19, + 0},{-6,0},{-6,-50},{0,-50}}, color={0,0,127})); + connect(HeatingPower.y, radiativeGain.u) annotation (Line(points={{-19, + 0},{-6,0},{-6,-80},{0,-80}}, color={0,0,127})); + connect(y, limiter.u) + annotation (Line(points={{-120,0},{-88,0}}, color={0,0,127})); + connect(limiter.y, HeatingPower.u) + annotation (Line(points={{-65,0},{-42,0}}, color={0,0,127})); + annotation (Icon(graphics={ + Ellipse( + extent={{-20,20},{20,-22}}, + fillColor={127,0,0}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Ellipse( + extent={{-20,20},{20,-22}}, + fillColor={127,0,0}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Rectangle( + extent={{-80,58},{80,-62}}, + lineColor={0,0,0}, + fillColor={127,0,0}, + fillPattern=FillPattern.Solid), + Line( + points={{-66,28},{66,28}}), + Line( + points={{-66,0},{66,0}}), + Line( + points={{-66,-32},{66,-32}}), + Line( + points={{-66,58},{-66,-62}}), + Line( + points={{66,58},{66,-62}})})); + end IdealHeatEmission; + end IdealHeatingSystem; + end HeatTransfer; + annotation (uses(Buildings(version = "11.0.0"), Modelica(version = "4.0.0"), + IDEAS(version="3.0.0")), + Icon(graphics={ Rectangle(lineColor = {200, 200, 200}, fillColor = {248, 248, 248}, + fillPattern = FillPattern.HorizontalCylinder, extent = {{-100, -100}, {100, 100}}, radius = 25), Rectangle(lineColor = {128, 128, 128}, extent = {{-100, -100}, {100, 100}}, radius = 25)})); +end Common; + +model building + parameter Buildings.HeatTransfer.Data.OpaqueConstructions.Generic + construction_001( + final nLay=3, + absIR_a=0.9, + absIR_b=0.9, + absSol_a=0.6, + absSol_b=0.6, + material={Buildings.HeatTransfer.Data.Solids.Generic( + x=0.1, + k=0.035, + c=1000.0, + d=2000.0),Buildings.HeatTransfer.Data.Solids.Generic( + x=0.1, + k=0.035, + c=1000.0, + d=2000.0),Buildings.HeatTransfer.Data.Solids.Generic( + x=0.1, + k=0.035, + c=1000.0, + d=2000.0) }, + roughness_a=Buildings.HeatTransfer.Types.SurfaceRoughness.Rough) + annotation (Placement(transformation(extent={{20,84},{34,98}}))); parameter Buildings.HeatTransfer.Data.OpaqueConstructions.Generic + internal_wall( + final nLay=1, + absIR_a=0.9, + absIR_b=0.9, + absSol_a=0.6, + absSol_b=0.6, + material={Buildings.HeatTransfer.Data.Solids.Generic( + x=0.2, + k=0.89, + c=790.0, + d=1920.0) }, + roughness_a=Buildings.HeatTransfer.Types.SurfaceRoughness.Rough) + annotation (Placement(transformation(extent={{20,84},{34,98}}))); + + + +package Medium = Buildings.Media.Air(extraPropertiesNames={"CO2"}) "Medium model"; +package MediumW = Buildings.Media.Water "Medium model"; +parameter Integer nRoo = 2 "Number of rooms"; + parameter Modelica.Units.SI.Volume VRoo=4*6*3 "Volume of one room"; + parameter Modelica.Units.SI.Power Q_flow_nominal=2200 + "Nominal power of heating plant"; + // Due to the night setback, in which the radiator do not provide heat input into the room, + // we scale the design power of the radiator loop + parameter Real scaFacRad = 1.5 + "Scaling factor to scale the power (and mass flow rate) of the radiator loop"; + parameter Modelica.Units.SI.Temperature TSup_nominal=273.15 + 50 + 5 + "Nominal supply temperature for radiators"; + parameter Modelica.Units.SI.Temperature TRet_nominal=273.15 + 40 + 5 + "Nominal return temperature for radiators"; + parameter Modelica.Units.SI.Temperature dTRad_nominal=TSup_nominal - + TRet_nominal "Nominal temperature difference for radiator loop"; + parameter Modelica.Units.SI.Temperature dTBoi_nominal=20 + "Nominal temperature difference for boiler loop"; + parameter Modelica.Units.SI.MassFlowRate mRad_flow_nominal=scaFacRad* + Q_flow_nominal/dTRad_nominal/4200 + "Nominal mass flow rate of radiator loop"; + parameter Modelica.Units.SI.MassFlowRate mBoi_flow_nominal=scaFacRad* + Q_flow_nominal/dTBoi_nominal/4200 "Nominal mass flow rate of boiler loop"; + parameter Modelica.Units.SI.PressureDifference dpPip_nominal=10000 + "Pressure difference of pipe (without valve)"; + parameter Modelica.Units.SI.PressureDifference dpVal_nominal=6000 + "Pressure difference of valve"; + parameter Modelica.Units.SI.PressureDifference dpRoo_nominal=6000 + "Pressure difference of flow leg that serves a room"; + parameter Modelica.Units.SI.PressureDifference dpThrWayVal_nominal=6000 + "Pressure difference of three-way valve"; + parameter Modelica.Units.SI.PressureDifference dp_nominal=dpPip_nominal + + dpVal_nominal + dpRoo_nominal + dpThrWayVal_nominal + "Pressure difference of loop"; + + + Buildings.ThermalZones.Detailed.MixedAir schema_space_001( + redeclare package Medium = Medium, + mSenFac=1, + AFlo=100.0, + hRoo=2.5, + linearizeRadiation=true, + m_flow_nominal=0.01, + T_start=294.15 +,nPorts = 3, nConExt=3, + datConExt( + layers={ construction_001, construction_001, construction_001 }, + A={ 100.0, 100.0, 200.0 }, + til={Buildings.Types.Tilt.Wall,Buildings.Types.Tilt.Wall,Buildings.Types.Tilt.Wall}, + azi={ 180.0, 180.0, 180.0 }), + nSurBou=2, + surBou( + A={ 10.0, 10.0 }, + til={Buildings.Types.Tilt.Wall,Buildings.Types.Tilt.Wall}), + nConBou=0, nConExtWin=0, nConPar=0, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial) annotation ( + Placement(transformation(origin = { 0, 0 }, + extent = {{-20, -20}, {20, 20}} +))); + Buildings.Fluid.HeatExchangers.Radiators. + RadiatorEN442_2 system_007( + nEle=1, + fraRad=0.3, + Q_flow_nominal=2000, + T_a_nominal=363.15, + T_b_nominal=353.15, + TAir_nominal=293.15, + TRad_nominal=293.15, + n=1.9, + deltaM=0.01, + from_dp=false, + dp_nominal=0, + linearized=false, + VWat=0.116, + mDry=52.6 +, + redeclare package Medium = MediumW, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial) "Radiator" annotation ( + Placement(transformation(origin = { 0, -75 }, + extent = {{-10, -10}, {10, 10}} +))); + Buildings.Fluid.Actuators.Valves.TwoWayEqualPercentage + system_008( + R=7.0, + delta0=0.01, + dpFixed_nominal=6000, + l=0.0001, + from_dp=true, + linearized=false, + deltaM=0.02, + m_flow_nominal=0.01, + dpValve_nominal=6000 +, + redeclare package Medium = MediumW + + ) "Radiator valve" annotation ( + Placement(transformation(origin = { 30, -75 }, + extent = {{-10, -10}, {10, 10}} +))); + house_yaml.Common.Controls.ventilation.EmissionControlEmissioncontrol_8 + emissioncontrol_8 annotation ( + Placement(transformation(origin = { 71.39084169804254, 194.35742875153028 }, + extent = {{-10, -10}, {10, 10}} +))); + house_yaml.Common.Controls.ventilation.OccupancyOccupancy_11 + occupancy_11( occupancy=3600*{7, 19}, + gain=[35; 70; 30], + k=1/6/4 +) annotation ( + Placement(transformation(origin = { -50, 0 }, + extent = {{-10, -10}, {10, 10}} +))); + Buildings.ThermalZones.Detailed.MixedAir schema_space_002( + redeclare package Medium = Medium, + mSenFac=1, + AFlo=100.0, + hRoo=2.5, + linearizeRadiation=true, + m_flow_nominal=0.01, + T_start=294.15 +,nPorts = 3, nConExt=3, + datConExt( + layers={ construction_001, construction_001, construction_001 }, + A={ 100.0, 100.0, 200.0 }, + til={Buildings.Types.Tilt.Wall,Buildings.Types.Tilt.Wall,Buildings.Types.Tilt.Wall}, + azi={ 180.0, 180.0, 180.0 }), + nSurBou=2, + surBou( + A={ 10.0, 10.0 }, + til={Buildings.Types.Tilt.Wall,Buildings.Types.Tilt.Wall}), + nConBou=0, nConExtWin=0, nConPar=0, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial) annotation ( + Placement(transformation(origin = { 250, 150 }, + extent = {{-20, -20}, {20, 20}} +))); + Buildings.Fluid.HeatExchangers.Radiators. + RadiatorEN442_2 system_009( + nEle=1, + fraRad=0.3, + Q_flow_nominal=2000, + T_a_nominal=363.15, + T_b_nominal=353.15, + TAir_nominal=293.15, + TRad_nominal=293.15, + n=1.9, + deltaM=0.01, + from_dp=false, + dp_nominal=0, + linearized=false, + VWat=0.116, + mDry=52.6 +, + redeclare package Medium = MediumW, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial) "Radiator" annotation ( + Placement(transformation(origin = { 250, 75 }, + extent = {{-10, -10}, {10, 10}} +))); + Buildings.Fluid.Actuators.Valves.TwoWayEqualPercentage + system_010( + R=7.0, + delta0=0.01, + dpFixed_nominal=6000, + l=0.0001, + from_dp=true, + linearized=false, + deltaM=0.02, + m_flow_nominal=0.01, + dpValve_nominal=6000 +, + redeclare package Medium = MediumW + + ) "Radiator valve" annotation ( + Placement(transformation(origin = { 280, 75 }, + extent = {{-10, -10}, {10, 10}} +))); + house_yaml.Common.Controls.ventilation.EmissionControlEmissioncontrol_9 + emissioncontrol_9 annotation ( + Placement(transformation(origin = { 181.91888644766794, 83.46287938471441 }, + extent = {{-10, -10}, {10, 10}} +))); + house_yaml.Common.Controls.ventilation.OccupancyOccupancy_12 + occupancy_12( occupancy=3600*{7, 19}, + gain=[35; 70; 30], + k=1/6/4 +) annotation ( + Placement(transformation(origin = { 200, 150 }, + extent = {{-10, -10}, {10, 10}} +))); + Buildings.ThermalZones.Detailed.MixedAir schema_space_003( + redeclare package Medium = Medium, + mSenFac=1, + AFlo=100.0, + hRoo=2.5, + linearizeRadiation=true, + m_flow_nominal=0.01, + T_start=294.15 +,nPorts = 3, nConExt=3, + datConExt( + layers={ construction_001, construction_001, construction_001 }, + A={ 100.0, 100.0, 200.0 }, + til={Buildings.Types.Tilt.Wall,Buildings.Types.Tilt.Wall,Buildings.Types.Tilt.Wall}, + azi={ 180.0, 180.0, 180.0 }), + nSurBou=2, + surBou( + A={ 10.0, 10.0 }, + til={Buildings.Types.Tilt.Wall,Buildings.Types.Tilt.Wall}), + nConBou=0, nConExtWin=0, nConPar=0, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial) annotation ( + Placement(transformation(origin = { 500, 150 }, + extent = {{-20, -20}, {20, 20}} +))); + Buildings.Fluid.HeatExchangers.Radiators. + RadiatorEN442_2 system_011( + nEle=1, + fraRad=0.3, + Q_flow_nominal=2000, + T_a_nominal=363.15, + T_b_nominal=353.15, + TAir_nominal=293.15, + TRad_nominal=293.15, + n=1.9, + deltaM=0.01, + from_dp=false, + dp_nominal=0, + linearized=false, + VWat=0.116, + mDry=52.6 +, + redeclare package Medium = MediumW, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial) "Radiator" annotation ( + Placement(transformation(origin = { 500, 75 }, + extent = {{-10, -10}, {10, 10}} +))); + Buildings.Fluid.Actuators.Valves.TwoWayEqualPercentage + system_012( + R=7.0, + delta0=0.01, + dpFixed_nominal=6000, + l=0.0001, + from_dp=true, + linearized=false, + deltaM=0.02, + m_flow_nominal=0.01, + dpValve_nominal=6000 +, + redeclare package Medium = MediumW + + ) "Radiator valve" annotation ( + Placement(transformation(origin = { 530, 75 }, + extent = {{-10, -10}, {10, 10}} +))); + house_yaml.Common.Controls.ventilation.EmissionControlEmissioncontrol_10 + emissioncontrol_10 annotation ( + Placement(transformation(origin = { 189.6094951506921, -69.8057000790667 }, + extent = {{-10, -10}, {10, 10}} +))); + house_yaml.Common.Controls.ventilation.OccupancyOccupancy_13 + occupancy_13( occupancy=3600*{7, 19}, + gain=[35; 70; 30], + k=1/6/4 +) annotation ( + Placement(transformation(origin = { 450, 150 }, + extent = {{-10, -10}, {10, 10}} +))); + Buildings.HeatTransfer.Conduction.MultiLayer + internal_schema_space_001_schema_space_002(A = + 10, layers = + internal_wall, stateAtSurface_a = true, stateAtSurface_b = true) + "Partition wall between the two + rooms" annotation ( + Placement(transformation(origin = { 125.0, 0 }, + extent = {{-10, -10}, {10, 10}} +))); + Buildings.HeatTransfer.Conduction.MultiLayer + internal_schema_space_001_schema_space_003(A = + 10, layers = + internal_wall, stateAtSurface_a = true, stateAtSurface_b = true) + "Partition wall between the two + rooms" annotation ( + Placement(transformation(origin = { 250.0, 0 }, + extent = {{-10, -10}, {10, 10}} +))); + Buildings.HeatTransfer.Conduction.MultiLayer + internal_schema_space_002_schema_space_003(A = + 10, layers = + internal_wall, stateAtSurface_a = true, stateAtSurface_b = true) + "Partition wall between the two + rooms" annotation ( + Placement(transformation(origin = { 375.0, 150 }, + extent = {{-10, -10}, {10, 10}} +))); + Buildings.BoundaryConditions.WeatherData.ReaderTMY3 + weather(filNam=Modelica.Utilities.Files.loadResource + ("modelica://Buildings/Resources/weatherdata/USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.mos")) + annotation ( + Placement(transformation(origin = { -100, 200 }, + extent = {{-10, -10}, {10, 10}} +))); + house_yaml.Common. + Fluid.Ventilation.PumpSystem_002 + system_002( + m_flow_nominal=0.008, + dp_nominal=10000 +, + redeclare package Medium = MediumW + + ) annotation ( + Placement(transformation(origin = { 177.3535362800334, 49.36012094035274 }, + extent = {{-10, -10}, {10, 10}} +))); + house_yaml.Common.Controls.ventilation.CollectorControlPump_control + pump_control annotation ( + Placement(transformation(origin = { 9.746812125077104, -192.0345385542482 }, + extent = {{-10, -10}, {10, 10}} +))); + Buildings.Fluid.Actuators.Valves.ThreeWayEqualPercentageLinear + system_004( + redeclare package Medium = MediumW, + use_inputFilter=false, + R=50, + delta0=0.01, + dpFixed_nominal={100,0}, + fraK=0.7, + l={0.01,0.01}, + deltaM=0.02, + linearized={false, false}, + m_flow_nominal=0.0078, + dpValve_nominal=6000 +, + energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState) "Three-wayvalve" annotation ( + Placement(transformation(origin = { -100, -175 }, + extent = {{-10, -10}, {10, 10}} +))); + house_yaml.Common.Controls.ventilation. + ThreeWayValveControlThree_way_valve_1 + three_way_valve_1 annotation ( + Placement(transformation(origin = { -150, -175 }, + extent = {{-10, -10}, {10, 10}} +))); + Buildings.Fluid.Actuators.Valves.ThreeWayEqualPercentageLinear + system_006( + redeclare package Medium = MediumW, + use_inputFilter=false, + R=50, + delta0=0.01, + dpFixed_nominal={100,0}, + fraK=0.7, + l={0.01,0.01}, + deltaM=0.02, + linearized={false, false}, + m_flow_nominal=0.0078, + dpValve_nominal=6000 +, + energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState) "Three-wayvalve" annotation ( + Placement(transformation(origin = { 400, -25 }, + extent = {{-10, -10}, {10, 10}} +))); + house_yaml.Common.Controls.ventilation. + ThreeWayValveControlThree_way_valve_2 + three_way_valve_2 annotation ( + Placement(transformation(origin = { 350, -25 }, + extent = {{-10, -10}, {10, 10}} +))); + Buildings.Fluid.FixedResistances.Junction system_003 ( + m_flow_nominal=0.008*{1, -1, -1}, + dp_nominal={10000,-1,-1}, + deltaM=0.3, + linearized=false +, + redeclare package Medium = MediumW, + energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState) + "Flow splitter" annotation ( + Placement(transformation(origin = { 130, -175 }, + extent = {{-10, -10}, {10, 10}} +))); + house_yaml.Common.Fluid.Boilers. +BoilerWithStorageSystem_001 system_001( + a={0.9}, + effCur=Buildings.Fluid.Types.EfficiencyCurves.Constant, + T_nominal=353.15, + fue=Buildings.Fluid.Data.Fuels.HeatingOilLowerHeatingValue(), + Q_flow_nominal=2000, + dp_nominal=5000, + linearizeFlowResistance=false, + deltaM=0.1, + show_T=false, + VTan=0.2, + hTan=2, + nSeg=4, + dIns=0.002, + dp=(3000 + 2000)*{2,1}, + nominal_mass_flow_rate_boiler=0.03571428571428571, + nominal_mass_flow_radiator_loop=0.07142857142857142, + V_flow=0.03571428571428571/1000*{0.5,1} +, +redeclare package MediumW = MediumW) "Boiler" annotation ( + Placement(transformation(origin = { 134.32240807676123, 112.62266697610724 }, + extent = {{-10, -10}, {10, 10}} +))); + house_yaml.Common.Controls.ventilation.BoilerControlBoiler_control + boiler_control( TSup_nominal=353.15, + threshold_outdoor_air_cutoff=288.15, + threshold_to_switch_off_boiler=288.15 +) annotation ( + Placement(transformation(origin = { -187.14430303440434, -81.9856472933729 }, + extent = {{-10, -10}, {10, 10}} +))); + Buildings.Fluid.FixedResistances.Junction system_005 ( + m_flow_nominal=0.008*{1, -1, -1}, + dp_nominal={10000,-1,-1}, + deltaM=0.3, + linearized=false +, + redeclare package Medium = MediumW, + energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState) + "Flow splitter" annotation ( + Placement(transformation(origin = { 630, -25 }, + extent = {{-10, -10}, {10, 10}} +))); + house_yaml.Common.Controls.ventilation.DataServer + data_bus (redeclare package + Medium = Medium) annotation ( + Placement(transformation(origin = { -122.89327650346242, 122.40622127177545 }, + extent = {{-10, -10}, {10, 10}} +))); + + +equation connect(schema_space_001.heaPorAir,system_007.heatPortCon) +annotation (Line( +points={{ 0.0, 0.0 } ,{ 0.0, 0.0 } ,{ 0.0, -75.0 } ,{ 0.0, -75.0 } }, +color={255,204,51}, +thickness=0.5, +smooth=Smooth.None)); connect(schema_space_001.heaPorRad,system_007.heatPortRad) +annotation (Line( +points={{ 0.0, 0.0 } ,{ 0.0, 0.0 } ,{ 0.0, -75.0 } ,{ 0.0, -75.0 } }, +color={255,204,51}, +thickness=0.5, +smooth=Smooth.None)); connect(schema_space_001.qGai_flow,occupancy_11.y) +annotation (Line( +points={{ 0.0, 0.0 } ,{ -25.0, 0.0 } ,{ -25.0, 0.0 } ,{ -50.0, 0.0 } }, +color={255,204,51}, +thickness=0.5, +smooth=Smooth.None)); connect(schema_space_001.surf_surBou[1],internal_schema_space_001_schema_space_002.port_a) +annotation (Line( +points={{ 0.0, 0.0 } ,{ 62.5, 0.0 } ,{ 62.5, 0.0 } ,{ 125.0, 0.0 } }, +color={191,0,0}, +thickness=0.1, +smooth=Smooth.None)); connect(schema_space_001.surf_surBou[2],internal_schema_space_001_schema_space_003.port_a) +annotation (Line( +points={{ 0.0, 0.0 } ,{ 125.0, 0.0 } ,{ 125.0, 0.0 } ,{ 250.0, 0.0 } }, +color={191,0,0}, +thickness=0.1, +smooth=Smooth.None)); connect(schema_space_001.weaBus,weather.weaBus) +annotation (Line( +points={{ 0.0, 0.0 } ,{ -50.0, 0.0 } ,{ -50.0, 200.0 } ,{ -100.0, 200.0 } }, +thickness=0.05, +smooth=Smooth.None)); connect(system_007.port_b,system_008.port_a) +annotation (Line( +points={{ 0.0, -75.0 } ,{ 15.0, -75.0 } ,{ 15.0, -75.0 } ,{ 30.0, -75.0 } }, +color={255,204,51}, +thickness=0.5, +smooth=Smooth.None)); connect(system_008.y,emissioncontrol_8.y) +annotation (Line( +points={{ 30.0, -75.0 } ,{ 50.69542084902127, -75.0 } ,{ 50.69542084902127, 194.35742875153028 } ,{ 71.39084169804254, 194.35742875153028 } }, +color={255,204,51}, +thickness=0.5, +smooth=Smooth.None)); connect(system_008.port_b,system_003.port_1) +annotation (Line( +points={{ 30.0, -75.0 } ,{ 80.0, -75.0 } ,{ 80.0, -175.0 } ,{ 130.0, -175.0 } }, +color={255,204,51}, +thickness=0.5, +smooth=Smooth.None)); connect(schema_space_002.heaPorAir,system_009.heatPortCon) +annotation (Line( +points={{ 250.0, 150.0 } ,{ 250.0, 150.0 } ,{ 250.0, 75.0 } ,{ 250.0, 75.0 } }, +color={255,204,51}, +thickness=0.5, +smooth=Smooth.None)); connect(schema_space_002.heaPorRad,system_009.heatPortRad) +annotation (Line( +points={{ 250.0, 150.0 } ,{ 250.0, 150.0 } ,{ 250.0, 75.0 } ,{ 250.0, 75.0 } }, +color={255,204,51}, +thickness=0.5, +smooth=Smooth.None)); connect(schema_space_002.qGai_flow,occupancy_12.y) +annotation (Line( +points={{ 250.0, 150.0 } ,{ 225.0, 150.0 } ,{ 225.0, 150.0 } ,{ 200.0, 150.0 } }, +color={255,204,51}, +thickness=0.5, +smooth=Smooth.None)); connect(schema_space_002.surf_surBou[1],internal_schema_space_001_schema_space_002.port_b) +annotation (Line( +points={{ 250.0, 150.0 } ,{ 187.5, 150.0 } ,{ 187.5, 0.0 } ,{ 125.0, 0.0 } }, +color={191,0,0}, +thickness=0.1, +smooth=Smooth.None)); connect(schema_space_002.surf_surBou[2],internal_schema_space_002_schema_space_003.port_a) +annotation (Line( +points={{ 250.0, 150.0 } ,{ 312.5, 150.0 } ,{ 312.5, 150.0 } ,{ 375.0, 150.0 } }, +color={191,0,0}, +thickness=0.1, +smooth=Smooth.None)); connect(schema_space_002.weaBus,weather.weaBus) +annotation (Line( +points={{ 250.0, 150.0 } ,{ 75.0, 150.0 } ,{ 75.0, 200.0 } ,{ -100.0, 200.0 } }, +thickness=0.05, +smooth=Smooth.None)); connect(system_009.port_b,system_010.port_a) +annotation (Line( +points={{ 250.0, 75.0 } ,{ 265.0, 75.0 } ,{ 265.0, 75.0 } ,{ 280.0, 75.0 } }, +color={255,204,51}, +thickness=0.5, +smooth=Smooth.None)); connect(system_010.y,emissioncontrol_9.y) +annotation (Line( +points={{ 280.0, 75.0 } ,{ 230.95944322383397, 75.0 } ,{ 230.95944322383397, 83.46287938471441 } ,{ 181.91888644766794, 83.46287938471441 } }, +color={255,204,51}, +thickness=0.5, +smooth=Smooth.None)); connect(system_010.port_b,system_003.port_1) +annotation (Line( +points={{ 280.0, 75.0 } ,{ 205.0, 75.0 } ,{ 205.0, -175.0 } ,{ 130.0, -175.0 } }, +color={255,204,51}, +thickness=0.5, +smooth=Smooth.None)); connect(schema_space_003.heaPorAir,system_011.heatPortCon) +annotation (Line( +points={{ 500.0, 150.0 } ,{ 500.0, 150.0 } ,{ 500.0, 75.0 } ,{ 500.0, 75.0 } }, +color={255,204,51}, +thickness=0.5, +smooth=Smooth.None)); connect(schema_space_003.heaPorRad,system_011.heatPortRad) +annotation (Line( +points={{ 500.0, 150.0 } ,{ 500.0, 150.0 } ,{ 500.0, 75.0 } ,{ 500.0, 75.0 } }, +color={255,204,51}, +thickness=0.5, +smooth=Smooth.None)); connect(schema_space_003.qGai_flow,occupancy_13.y) +annotation (Line( +points={{ 500.0, 150.0 } ,{ 475.0, 150.0 } ,{ 475.0, 150.0 } ,{ 450.0, 150.0 } }, +color={255,204,51}, +thickness=0.5, +smooth=Smooth.None)); connect(schema_space_003.surf_surBou[1],internal_schema_space_001_schema_space_003.port_b) +annotation (Line( +points={{ 500.0, 150.0 } ,{ 375.0, 150.0 } ,{ 375.0, 0.0 } ,{ 250.0, 0.0 } }, +color={191,0,0}, +thickness=0.1, +smooth=Smooth.None)); connect(schema_space_003.surf_surBou[2],internal_schema_space_002_schema_space_003.port_b) +annotation (Line( +points={{ 500.0, 150.0 } ,{ 437.5, 150.0 } ,{ 437.5, 150.0 } ,{ 375.0, 150.0 } }, +color={191,0,0}, +thickness=0.1, +smooth=Smooth.None)); connect(schema_space_003.weaBus,weather.weaBus) +annotation (Line( +points={{ 500.0, 150.0 } ,{ 200.0, 150.0 } ,{ 200.0, 200.0 } ,{ -100.0, 200.0 } }, +thickness=0.05, +smooth=Smooth.None)); connect(system_011.port_b,system_012.port_a) +annotation (Line( +points={{ 500.0, 75.0 } ,{ 515.0, 75.0 } ,{ 515.0, 75.0 } ,{ 530.0, 75.0 } }, +color={255,204,51}, +thickness=0.5, +smooth=Smooth.None)); connect(system_012.y,emissioncontrol_10.y) +annotation (Line( +points={{ 530.0, 75.0 } ,{ 359.804747575346, 75.0 } ,{ 359.804747575346, -69.8057000790667 } ,{ 189.6094951506921, -69.8057000790667 } }, +color={255,204,51}, +thickness=0.5, +smooth=Smooth.None)); connect(system_012.port_b,system_005.port_1) +annotation (Line( +points={{ 530.0, 75.0 } ,{ 580.0, 75.0 } ,{ 580.0, -25.0 } ,{ 630.0, -25.0 } }, +color={255,204,51}, +thickness=0.5, +smooth=Smooth.None)); connect(system_002.dataBus,pump_control.dataBus) +annotation (Line( +points={{ 177.3535362800334, 49.36012094035274 } ,{ 93.55017420255525, 49.36012094035274 } ,{ 93.55017420255525, -192.0345385542482 } ,{ 9.746812125077104, -192.0345385542482 } }, +color={255,204,51}, +thickness=0.5, +smooth=Smooth.None)); connect(system_002.port_b,system_004.port_1) +annotation (Line( +points={{ 177.3535362800334, 49.36012094035274 } ,{ 38.67676814001672, 49.36012094035274 } ,{ 38.67676814001669, -175.0 } ,{ -100.0, -175.0 } }, +color={255,204,51}, +thickness=0.5, +smooth=Smooth.None)); connect(system_002.port_b,system_006.port_1) +annotation (Line( +points={{ 177.3535362800334, 49.36012094035274 } ,{ 288.6767681400167, 49.36012094035274 } ,{ 288.6767681400167, -25.0 } ,{ 400.0, -25.0 } }, +color={255,204,51}, +thickness=0.5, +smooth=Smooth.None)); connect(system_004.y,three_way_valve_1.y) +annotation (Line( +points={{ -100.0, -175.0 } ,{ -125.0, -175.0 } ,{ -125.0, -175.0 } ,{ -150.0, -175.0 } }, +color={255,204,51}, +thickness=0.5, +smooth=Smooth.None)); connect(system_004.port_2,system_007.port_a) +annotation (Line( +points={{ -100.0, -175.0 } ,{ -50.0, -175.0 } ,{ -50.0, -75.0 } ,{ 0.0, -75.0 } }, +color={255,204,51}, +thickness=0.5, +smooth=Smooth.None)); connect(system_004.port_3,system_003.port_3) +annotation (Line( +points={{ -100.0, -175.0 } ,{ 15.0, -175.0 } ,{ 15.0, -175.0 } ,{ 130.0, -175.0 } }, +color={255,204,51}, +thickness=0.5, +smooth=Smooth.None)); connect(system_006.y,three_way_valve_2.y) +annotation (Line( +points={{ 400.0, -25.0 } ,{ 375.0, -25.0 } ,{ 375.0, -25.0 } ,{ 350.0, -25.0 } }, +color={255,204,51}, +thickness=0.5, +smooth=Smooth.None)); connect(system_006.port_2,system_011.port_a) +annotation (Line( +points={{ 400.0, -25.0 } ,{ 450.0, -25.0 } ,{ 450.0, 75.0 } ,{ 500.0, 75.0 } }, +color={255,204,51}, +thickness=0.5, +smooth=Smooth.None)); connect(system_006.port_3,system_005.port_3) +annotation (Line( +points={{ 400.0, -25.0 } ,{ 515.0, -25.0 } ,{ 515.0, -25.0 } ,{ 630.0, -25.0 } }, +color={255,204,51}, +thickness=0.5, +smooth=Smooth.None)); connect(system_003.port_2,system_001.port_a) +annotation (Line( +points={{ 130.0, -175.0 } ,{ 132.16120403838062, -175.0 } ,{ 132.16120403838062, 112.62266697610724 } ,{ 134.32240807676123, 112.62266697610724 } }, +color={255,204,51}, +thickness=0.5, +smooth=Smooth.None)); connect(system_001.dataBus,boiler_control.dataBus) +annotation (Line( +points={{ 134.32240807676123, 112.62266697610724 } ,{ -26.410947478821555, 112.62266697610724 } ,{ -26.410947478821555, -81.9856472933729 } ,{ -187.14430303440434, -81.9856472933729 } }, +color={255,204,51}, +thickness=0.5, +smooth=Smooth.None)); connect(system_005.port_2,system_001.port_a) +annotation (Line( +points={{ 630.0, -25.0 } ,{ 382.1612040383806, -25.0 } ,{ 382.1612040383806, 112.62266697610724 } ,{ 134.32240807676123, 112.62266697610724 } }, +color={255,204,51}, +thickness=0.5, +smooth=Smooth.None)); connect(emissioncontrol_8.dataBus,data_bus.dataBus) +annotation (Line( +points={{ 71.39084169804254, 194.35742875153028 } ,{ -25.75121740270994, 194.35742875153028 } ,{ -25.75121740270994, 122.40622127177545 } ,{ -122.89327650346242, 122.40622127177545 } }, +thickness=0.05, +smooth=Smooth.None)); connect(occupancy_11.dataBus,data_bus.dataBus) +annotation (Line( +points={{ -50.0, 0.0 } ,{ -86.4466382517312, 0.0 } ,{ -86.4466382517312, 122.40622127177545 } ,{ -122.89327650346242, 122.40622127177545 } }, +thickness=0.05, +smooth=Smooth.None)); connect(emissioncontrol_9.dataBus,data_bus.dataBus) +annotation (Line( +points={{ 181.91888644766794, 83.46287938471441 } ,{ 29.51280497210277, 83.46287938471441 } ,{ 29.512804972102757, 122.40622127177545 } ,{ -122.89327650346242, 122.40622127177545 } }, +thickness=0.05, +smooth=Smooth.None)); connect(occupancy_12.dataBus,data_bus.dataBus) +annotation (Line( +points={{ 200.0, 150.0 } ,{ 38.5533617482688, 150.0 } ,{ 38.553361748268784, 122.40622127177545 } ,{ -122.89327650346242, 122.40622127177545 } }, +thickness=0.05, +smooth=Smooth.None)); connect(emissioncontrol_10.dataBus,data_bus.dataBus) +annotation (Line( +points={{ 189.6094951506921, -69.8057000790667 } ,{ 33.358109323614855, -69.8057000790667 } ,{ 33.35810932361484, 122.40622127177545 } ,{ -122.89327650346242, 122.40622127177545 } }, +thickness=0.05, +smooth=Smooth.None)); connect(occupancy_13.dataBus,data_bus.dataBus) +annotation (Line( +points={{ 450.0, 150.0 } ,{ 163.5533617482688, 150.0 } ,{ 163.5533617482688, 122.40622127177545 } ,{ -122.89327650346242, 122.40622127177545 } }, +thickness=0.05, +smooth=Smooth.None)); connect(pump_control.dataBus,data_bus.dataBus) +annotation (Line( +points={{ 9.746812125077104, -192.0345385542482 } ,{ -56.57323218919266, -192.0345385542482 } ,{ -56.57323218919265, 122.40622127177545 } ,{ -122.89327650346242, 122.40622127177545 } }, +thickness=0.05, +smooth=Smooth.None)); connect(three_way_valve_1.dataBus,data_bus.dataBus) +annotation (Line( +points={{ -150.0, -175.0 } ,{ -136.4466382517312, -175.0 } ,{ -136.4466382517312, 122.40622127177545 } ,{ -122.89327650346242, 122.40622127177545 } }, +thickness=0.05, +smooth=Smooth.None)); connect(three_way_valve_2.dataBus,data_bus.dataBus) +annotation (Line( +points={{ 350.0, -25.0 } ,{ 113.5533617482688, -25.0 } ,{ 113.55336174826878, 122.40622127177545 } ,{ -122.89327650346242, 122.40622127177545 } }, +thickness=0.05, +smooth=Smooth.None)); connect(boiler_control.dataBus,data_bus.dataBus) +annotation (Line( +points={{ -187.14430303440434, -81.9856472933729 } ,{ -155.01878976893337, -81.9856472933729 } ,{ -155.01878976893337, 122.40622127177545 } ,{ -122.89327650346242, 122.40622127177545 } }, +thickness=0.05, +smooth=Smooth.None)); connect(schema_space_001.heaPorAir,data_bus.port[1]) +annotation (Line( +points={{ 0.0, 0.0 } ,{ -61.44663825173121, 0.0 } ,{ -61.44663825173121, 122.40622127177545 } ,{ -122.89327650346242, 122.40622127177545 } }, +thickness=0.05, +smooth=Smooth.None)); connect(schema_space_001.ports[1],data_bus.port_a[1]) +annotation (Line( +points={{ 0.0, 0.0 } ,{ -61.44663825173121, 0.0 } ,{ -61.44663825173121, 122.40622127177545 } ,{ -122.89327650346242, 122.40622127177545 } }, +thickness=0.05, +smooth=Smooth.None)); connect(schema_space_002.heaPorAir,data_bus.port[2]) +annotation (Line( +points={{ 250.0, 150.0 } ,{ 63.5533617482688, 150.0 } ,{ 63.553361748268784, 122.40622127177545 } ,{ -122.89327650346242, 122.40622127177545 } }, +thickness=0.05, +smooth=Smooth.None)); connect(schema_space_002.ports[1],data_bus.port_a[2]) +annotation (Line( +points={{ 250.0, 150.0 } ,{ 63.5533617482688, 150.0 } ,{ 63.553361748268784, 122.40622127177545 } ,{ -122.89327650346242, 122.40622127177545 } }, +thickness=0.05, +smooth=Smooth.None)); connect(schema_space_003.heaPorAir,data_bus.port[3]) +annotation (Line( +points={{ 500.0, 150.0 } ,{ 188.5533617482688, 150.0 } ,{ 188.5533617482688, 122.40622127177545 } ,{ -122.89327650346242, 122.40622127177545 } }, +thickness=0.05, +smooth=Smooth.None)); connect(schema_space_003.ports[1],data_bus.port_a[3]) +annotation (Line( +points={{ 500.0, 150.0 } ,{ 188.5533617482688, 150.0 } ,{ 188.5533617482688, 122.40622127177545 } ,{ -122.89327650346242, 122.40622127177545 } }, +thickness=0.05, +smooth=Smooth.None));annotation (Diagram(coordinateSystem(extent={{-237.95032328355612,-242.0345385542482},{680.0,250.0}})), Icon( + coordinateSystem(extent={{-237.95032328355612,-242.0345385542482},{680.0,250.0}}))); + annotation ( + Documentation(info="Spaces

Spaces

Introduction

Introduction

nameschema_space_001
parameters
mSenFac1.0
AFlo100.0
hRoo2.5
linearizeRadiationtrue
m_flow_nominal0.01
T_start294.15
volume250.0
occupancy
nameoccupancy_11
parameters
emissions
nameparameters
system_007
nEle1
fraRad0.3
Q_flow_nominal2000.0
T_a_nominal363.15
T_b_nominal353.15
TAir_nominal293.15
TRad_nominal293.15
n1.9
deltaM0.01
from_dpfalse
dp_nominal0.0
linearizedfalse
VWat0.116
mDry52.6
system_008
R7.0
delta00.01
dpFixed_nominal6000.0
l0.0001
from_dptrue
linearizedfalse
deltaM0.02
m_flow_nominal0.01
dpValve_nominal6000.0
external_boundaries
namesurfaceazimuthtiltconstruction
externalwall_17100.0180.0wall
nameconstruction_001
externalwall_18100.0180.0wall
nameconstruction_001
externalwall_19200.0180.0wall
nameconstruction_001
internal_elements
namesurfaceazimuthtiltconstruction
internal_schema_space_001_schema_space_00210.010.0wall
nameinternal_wall
internal_schema_space_001_schema_space_00310.010.0wall
nameinternal_wall
nameschema_space_002
parameters
mSenFac1.0
AFlo100.0
hRoo2.5
linearizeRadiationtrue
m_flow_nominal0.01
T_start294.15
volume250.0
occupancy
nameoccupancy_12
parameters
emissions
nameparameters
system_009
nEle1
fraRad0.3
Q_flow_nominal2000.0
T_a_nominal363.15
T_b_nominal353.15
TAir_nominal293.15
TRad_nominal293.15
n1.9
deltaM0.01
from_dpfalse
dp_nominal0.0
linearizedfalse
VWat0.116
mDry52.6
system_010
R7.0
delta00.01
dpFixed_nominal6000.0
l0.0001
from_dptrue
linearizedfalse
deltaM0.02
m_flow_nominal0.01
dpValve_nominal6000.0
external_boundaries
namesurfaceazimuthtiltconstruction
externalwall_20100.0180.0wall
nameconstruction_001
externalwall_21100.0180.0wall
nameconstruction_001
externalwall_22200.0180.0wall
nameconstruction_001
internal_elements
namesurfaceazimuthtiltconstruction
internal_schema_space_001_schema_space_00210.010.0wall
nameinternal_wall
internal_schema_space_002_schema_space_00310.010.0wall
nameinternal_wall
nameschema_space_003
parameters
mSenFac1.0
AFlo100.0
hRoo2.5
linearizeRadiationtrue
m_flow_nominal0.01
T_start294.15
volume250.0
occupancy
nameoccupancy_13
parameters
emissions
nameparameters
system_011
nEle1
fraRad0.3
Q_flow_nominal2000.0
T_a_nominal363.15
T_b_nominal353.15
TAir_nominal293.15
TRad_nominal293.15
n1.9
deltaM0.01
from_dpfalse
dp_nominal0.0
linearizedfalse
VWat0.116
mDry52.6
system_012
R7.0
delta00.01
dpFixed_nominal6000.0
l0.0001
from_dptrue
linearizedfalse
deltaM0.02
m_flow_nominal0.01
dpValve_nominal6000.0
external_boundaries
namesurfaceazimuthtiltconstruction
externalwall_23100.0180.0wall
nameconstruction_001
externalwall_24100.0180.0wall
nameconstruction_001
externalwall_25200.0180.0wall
nameconstruction_001
internal_elements
namesurfaceazimuthtiltconstruction
internal_schema_space_001_schema_space_00310.010.0wall
nameinternal_wall
internal_schema_space_002_schema_space_00310.010.0wall
nameinternal_wall

Conclusions

Conclusions

Spaces

Introduction

Introduction

nameconstruction_001
layers
materialthickness
namematerial_001
k0.035
c1000.0
rho2000.0
epsLw0.85
epsSw0.65
0.1
namematerial_002
k0.035
c1000.0
rho2000.0
epsLw0.85
epsSw0.65
0.1
namematerial_003
k0.035
c1000.0
rho2000.0
epsLw0.85
epsSw0.65
0.1
nameinternal_wall
layers
materialthickness
namebrick
k0.89
c790.0
rho1920.0
epsLw0.85
epsSw0.65
0.2

Conclusions

Conclusions

Spaces

Introduction

Introduction

namesystem_001
parameters
scaFacRad1.5
dTBoi_nominal20
dTRad_nominal10
a{0.9}
effCurBuildings.Fluid.Types.EfficiencyCurves.Constant
T_nominal353.15
fueBuildings.Fluid.Data.Fuels.HeatingOilLowerHeatingValue()
Q_flow_nominal2000
dp_nominal5000
linearizeFlowResistancefalse
deltaM0.1
show_Tfalse
VTan0.2
hTan2
nSeg4
dIns0.002
dp(3000 + 2000)*{2,1}
nominal_mass_flow_rate_boiler0.03571428571428571
nominal_mass_flow_radiator_loop0.07142857142857142
V_flow0.03571428571428571/1000*{0.5,1}

Conclusions

Conclusions

")); +end building; + + +end house_yaml; diff --git a/tests/test_schema.py b/tests/test_schema.py index 0ae5aec..cf67f51 100644 --- a/tests/test_schema.py +++ b/tests/test_schema.py @@ -74,7 +74,7 @@ def test_create_model() -> None: def test_create_model_yaml() -> None: - model_name = "house" + model_name = "house_yaml" model_path = Path(__file__).parents[1].joinpath("tests", "house.yaml") model_ = convert_model(model_name, model_path) assert clean_model(model_, model_name) == set(_read(model_name)) diff --git a/trano/data_models/conversion.py b/trano/data_models/conversion.py index c207460..e1410fa 100644 --- a/trano/data_models/conversion.py +++ b/trano/data_models/conversion.py @@ -3,6 +3,8 @@ from pathlib import Path from typing import Any, Dict +import yaml # type: ignore + from trano.construction import Construction, Layer from trano.material import Material from trano.models.elements.boiler import Boiler @@ -26,8 +28,13 @@ def convert_model(name: str, model_path: Path) -> str: # noqa: PLR0912, PLR0915, C901 network = Network(name=name) occupancy = None - house_json = model_path - data = json.loads(house_json.read_text()) + data = None + if model_path.suffix == ".yaml": + data = yaml.safe_load(model_path.read_text()) + if model_path.suffix == ".json": + data = json.loads(model_path.read_text()) + if not data: + raise Exception("Invalid file format") materials = { material["id"]: Material(**(material | {"name": material["id"]})) for material in data["materials"] diff --git a/trano/data_models/trano.yaml b/trano/data_models/trano.yaml index 1675ba4..abdd199 100644 --- a/trano/data_models/trano.yaml +++ b/trano/data_models/trano.yaml @@ -433,7 +433,7 @@ classes: range: float required: false description: Pa - ifabsent: float(6000) + ifabsent: float(6000.0) aliases: - dpFixed_nominal valve_leakage: @@ -513,7 +513,7 @@ classes: nominal_heating_power_positive_for_heating: range: float description: Nominal heating power (positive for heating) - ifabsent: float(2000) + ifabsent: float(2000.0) aliases: - Q_flow_nominal water_inlet_temperature_at_nominal_condition: @@ -598,7 +598,7 @@ classes: sensible_thermal_mass_scaling_factor: range: float description: Factor for scaling the sensible thermal mass of the zone air volume - ifabsent: float(1.0) + ifabsent: float(1) aliases: - mSenFac floor_area: From 639a0d74653ef9709f5b689dd680af0f70448a56 Mon Sep 17 00:00:00 2001 From: aan Date: Thu, 8 Aug 2024 14:50:20 +0200 Subject: [PATCH 06/11] feat: Simulate yaml model. --- tests/data/house.mo | 240 ++++++++++++--------- tests/data/house_yaml.mo | 238 ++++++++++++--------- tests/house.json | 363 -------------------------------- tests/house.yaml | 24 ++- tests/test_schema.py | 27 ++- trano/data_models/conversion.py | 23 +- trano/data_models/trano.yaml | 8 + trano/topology.py | 13 ++ 8 files changed, 358 insertions(+), 578 deletions(-) delete mode 100644 tests/house.json diff --git a/tests/data/house.mo b/tests/data/house.mo index b92c393..bc3e9a0 100644 --- a/tests/data/house.mo +++ b/tests/data/house.mo @@ -410,7 +410,7 @@ constructed by the signals connected to this bus. parameter Modelica.Units.SI.Temperature THeaSet= 273.15+24; parameter Modelica.Units.SI.Temperature THeaSetBack= 273.15+16; Buildings.Controls.OBC.ASHRAE.G36.ThermalZones.ControlLoops -emissionControl( kCooCon=0.0, +emissionControl( kCooCon=1.0, TiCooCon=900.0, kHeaCon=0.1, TiHeaCon=900.0, @@ -474,7 +474,7 @@ connect(dataBus.OccupiedSchema_space_001, occSch2.occupied); parameter Modelica.Units.SI.Temperature THeaSet= 273.15+24; parameter Modelica.Units.SI.Temperature THeaSetBack= 273.15+16; Buildings.Controls.OBC.ASHRAE.G36.ThermalZones.ControlLoops -emissionControl( kCooCon=0.0, +emissionControl( kCooCon=1.0, TiCooCon=900.0, kHeaCon=0.1, TiHeaCon=900.0, @@ -538,7 +538,7 @@ connect(dataBus.OccupiedSchema_space_002, occSch2.occupied); parameter Modelica.Units.SI.Temperature THeaSet= 273.15+24; parameter Modelica.Units.SI.Temperature THeaSetBack= 273.15+16; Buildings.Controls.OBC.ASHRAE.G36.ThermalZones.ControlLoops -emissionControl( kCooCon=0.0, +emissionControl( kCooCon=1.0, TiCooCon=900.0, kHeaCon=0.1, TiHeaCon=900.0, @@ -635,7 +635,7 @@ connect(dataBus.yHeaSystem_008, mulMax.u[1]); connect(dataBus.yHeaSystem_010, mulMax.u[2]); connect(dataBus.yHeaSystem_012, mulMax.u[3]); end CollectorControlPump_control; - model ThreeWayValveControlThree_way_valve_1 + model ThreeWayValveControlThree_way_valve_control_1 Buildings.Controls.OBC.CDL.Reals.PIDWithReset conVal( controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PI, @@ -654,13 +654,13 @@ annotation (Placement(transformation(extent={{-138,-20},{-98,20}}))); Con annotation (Placement(transformation( extent={{-120,-18},{-80,22}}), iconTransformation(extent={{-120,62},{-78,98}}))); equation -connect(dataBus.TColSetThree_way_valve_1, conVal.u_s); -connect(dataBus.triggerThree_way_valve_1, conVal.trigger); +connect(dataBus.TColSetThree_way_valve_control_1, conVal.u_s); +connect(dataBus.triggerThree_way_valve_control_1, conVal.trigger); connect(conVal.y, y) annotation (Line(points={{10,0},{110,0}}, color={0,0,127})); connect(u, conVal.u_m) annotation (Line(points={{-118,0},{-22,0},{-22,-20},{0, -20},{0,-16},{-2,-16},{-2,-12}}, color={0,0,127}));annotation (Icon(coordinateSystem(preserveAspectRatio=false)), Diagram( - coordinateSystem(preserveAspectRatio=false)));end ThreeWayValveControlThree_way_valve_1; - model ThreeWayValveControlThree_way_valve_2 + coordinateSystem(preserveAspectRatio=false)));end ThreeWayValveControlThree_way_valve_control_1; + model ThreeWayValveControlThree_way_valve_control_2 Buildings.Controls.OBC.CDL.Reals.PIDWithReset conVal( controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PI, @@ -679,12 +679,12 @@ annotation (Placement(transformation(extent={{-138,-20},{-98,20}}))); Con annotation (Placement(transformation( extent={{-120,-18},{-80,22}}), iconTransformation(extent={{-120,62},{-78,98}}))); equation -connect(dataBus.TColSetThree_way_valve_2, conVal.u_s); -connect(dataBus.triggerThree_way_valve_2, conVal.trigger); +connect(dataBus.TColSetThree_way_valve_control_2, conVal.u_s); +connect(dataBus.triggerThree_way_valve_control_2, conVal.trigger); connect(conVal.y, y) annotation (Line(points={{10,0},{110,0}}, color={0,0,127})); connect(u, conVal.u_m) annotation (Line(points={{-118,0},{-22,0},{-22,-20},{0, -20},{0,-16},{-2,-16},{-2,-12}}, color={0,0,127}));annotation (Icon(coordinateSystem(preserveAspectRatio=false)), Diagram( - coordinateSystem(preserveAspectRatio=false)));end ThreeWayValveControlThree_way_valve_2; + coordinateSystem(preserveAspectRatio=false)));end ThreeWayValveControlThree_way_valve_control_2; model BoilerControlBoiler_control extends house.Common.Controls.ventilation.PartialBoilerControl; Controls.BaseClasses.DataBus dataBus @@ -716,28 +716,28 @@ iconTransformation(origin = {-2, -42}, extent = {{-110, -9}, {-90, 9}}))); Cont annotation (Placement(transformation( extent={{-120,-18},{-80,22}}), iconTransformation(extent={{-120,62},{-78,98}}))); Modelica.Blocks.Sources.RealExpression - TColSetThree_way_valve_2 - (y=363.15); + TCooSetEmissioncontrol_8 + (y=298.15); Modelica.Blocks.Sources.RealExpression TAirOutBoiler_control (y=0.0); -Modelica.Blocks.Sources.RealExpression - TColSetThree_way_valve_1 - (y=363.15); -Modelica.Blocks.Sources.RealExpression - TCooSetEmissioncontrol_8 - (y=298.15); Modelica.Blocks.Sources.RealExpression TCooSetEmissioncontrol_9 (y=298.15); +Modelica.Blocks.Sources.RealExpression + TColSetThree_way_valve_control_1 + (y=363.15); +Modelica.Blocks.Sources.RealExpression + TColSetThree_way_valve_control_2 + (y=363.15); Modelica.Blocks.Sources.RealExpression TCooSetEmissioncontrol_10 (y=298.15); Modelica.Blocks.Sources.BooleanExpression - triggerThree_way_valve_1 + triggerThree_way_valve_control_2 (y=true); Modelica.Blocks.Sources.BooleanExpression - triggerThree_way_valve_2 + triggerThree_way_valve_control_1 (y=true); equation connect(port[1],TRoo[1]. port); @@ -752,22 +752,22 @@ connect(dataBus.TZonSchema_space_003, TRoo[3].T); connect(dataBus.ppmCO2Schema_space_001, TRoo1[1].ppm); connect(dataBus.ppmCO2Schema_space_002, TRoo1[2].ppm); connect(dataBus.ppmCO2Schema_space_003, TRoo1[3].ppm); -connect(dataBus.TColSetThree_way_valve_2, -TColSetThree_way_valve_2.y); -connect(dataBus.TAirOutSystem_001, -TAirOutBoiler_control.y); -connect(dataBus.TColSetThree_way_valve_1, -TColSetThree_way_valve_1.y); connect(dataBus.TCooSetSchema_space_001, TCooSetEmissioncontrol_8.y); +connect(dataBus.TAirOutSystem_001, +TAirOutBoiler_control.y); connect(dataBus.TCooSetSchema_space_002, TCooSetEmissioncontrol_9.y); +connect(dataBus.TColSetThree_way_valve_control_1, +TColSetThree_way_valve_control_1.y); +connect(dataBus.TColSetThree_way_valve_control_2, +TColSetThree_way_valve_control_2.y); connect(dataBus.TCooSetSchema_space_003, TCooSetEmissioncontrol_10.y); -connect(dataBus.triggerThree_way_valve_1, -triggerThree_way_valve_1.y); -connect(dataBus.triggerThree_way_valve_2, -triggerThree_way_valve_2.y); +connect(dataBus.triggerThree_way_valve_control_2, +triggerThree_way_valve_control_2.y); +connect(dataBus.triggerThree_way_valve_control_1, +triggerThree_way_valve_control_1.y); end DataServer; @@ -2627,7 +2627,7 @@ parameter Integer nRoo = 2 "Number of rooms"; ))); house.Common.Controls.ventilation.EmissionControlEmissioncontrol_8 emissioncontrol_8 annotation ( - Placement(transformation(origin = { -161.2231611439812, -71.59807030394693 }, + Placement(transformation(origin = { -191.87336630414592, 28.514829986510875 }, extent = {{-10, -10}, {10, 10}} ))); house.Common.Controls.ventilation.OccupancyOccupancy_11 @@ -2703,7 +2703,7 @@ parameter Integer nRoo = 2 "Number of rooms"; ))); house.Common.Controls.ventilation.EmissionControlEmissioncontrol_9 emissioncontrol_9 annotation ( - Placement(transformation(origin = { 54.309853024963715, 178.5293303083724 }, + Placement(transformation(origin = { -112.16472713646796, 154.2722666969942 }, extent = {{-10, -10}, {10, 10}} ))); house.Common.Controls.ventilation.OccupancyOccupancy_12 @@ -2779,7 +2779,7 @@ parameter Integer nRoo = 2 "Number of rooms"; ))); house.Common.Controls.ventilation.EmissionControlEmissioncontrol_10 emissioncontrol_10 annotation ( - Placement(transformation(origin = { -159.79218631382386, -106.31025963768906 }, + Placement(transformation(origin = { 157.67183992469273, 77.1376029845984 }, extent = {{-10, -10}, {10, 10}} ))); house.Common.Controls.ventilation.OccupancyOccupancy_13 @@ -2833,12 +2833,12 @@ parameter Integer nRoo = 2 "Number of rooms"; redeclare package Medium = MediumW ) annotation ( - Placement(transformation(origin = { -186.57307338859857, -24.35702377597182 }, + Placement(transformation(origin = { 144.6037620695326, -142.56379068560165 }, extent = {{-10, -10}, {10, 10}} ))); house.Common.Controls.ventilation.CollectorControlPump_control pump_control annotation ( - Placement(transformation(origin = { -188.3857796209051, -62.55926631818296 }, + Placement(transformation(origin = { -156.2885229098753, -94.20984165824021 }, extent = {{-10, -10}, {10, 10}} ))); Buildings.Fluid.Actuators.Valves.ThreeWayEqualPercentageLinear @@ -2856,13 +2856,13 @@ parameter Integer nRoo = 2 "Number of rooms"; dpValve_nominal=6000 , energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState) "Three-wayvalve" annotation ( - Placement(transformation(origin = { -100, -175 }, + Placement(transformation(origin = { 30, -275 }, extent = {{-10, -10}, {10, 10}} ))); house.Common.Controls.ventilation. - ThreeWayValveControlThree_way_valve_1 - three_way_valve_1 annotation ( - Placement(transformation(origin = { -150, -175 }, + ThreeWayValveControlThree_way_valve_control_1 + three_way_valve_control_1 annotation ( + Placement(transformation(origin = { -20, -275 }, extent = {{-10, -10}, {10, 10}} ))); Buildings.Fluid.Actuators.Valves.ThreeWayEqualPercentageLinear @@ -2880,25 +2880,13 @@ parameter Integer nRoo = 2 "Number of rooms"; dpValve_nominal=6000 , energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState) "Three-wayvalve" annotation ( - Placement(transformation(origin = { 400, -25 }, + Placement(transformation(origin = { 530, -125 }, extent = {{-10, -10}, {10, 10}} ))); house.Common.Controls.ventilation. - ThreeWayValveControlThree_way_valve_2 - three_way_valve_2 annotation ( - Placement(transformation(origin = { 350, -25 }, - extent = {{-10, -10}, {10, 10}} -))); - Buildings.Fluid.FixedResistances.Junction system_003 ( - m_flow_nominal=0.008*{1, -1, -1}, - dp_nominal={10000,-1,-1}, - deltaM=0.3, - linearized=false -, - redeclare package Medium = MediumW, - energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState) - "Flow splitter" annotation ( - Placement(transformation(origin = { 130, -175 }, + ThreeWayValveControlThree_way_valve_control_2 + three_way_valve_control_2 annotation ( + Placement(transformation(origin = { 480, -125 }, extent = {{-10, -10}, {10, 10}} ))); house.Common.Fluid.Boilers. @@ -2922,7 +2910,7 @@ BoilerWithStorageSystem_001 system_001( V_flow=0.03571428571428571/1000*{0.5,1} , redeclare package MediumW = MediumW) "Boiler" annotation ( - Placement(transformation(origin = { -137.42925998055202, 159.22841822037157 }, + Placement(transformation(origin = { 181.39128496522164, 106.7438790626681 }, extent = {{-10, -10}, {10, 10}} ))); house.Common.Controls.ventilation.BoilerControlBoiler_control @@ -2930,7 +2918,25 @@ redeclare package MediumW = MediumW) "Boiler" annotation ( threshold_outdoor_air_cutoff=288.15, threshold_to_switch_off_boiler=288.15 ) annotation ( - Placement(transformation(origin = { 91.33414011956735, -170.17087032246238 }, + Placement(transformation(origin = { -186.79273286424512, -67.99391324994959 }, + extent = {{-10, -10}, {10, 10}} +))); + Buildings.Fluid.FixedResistances.Junction system_003 ( + m_flow_nominal=0.008*{1, -1, -1}, + dp_nominal={10000,-1,-1}, + deltaM=0.3, + linearized=false +, + redeclare package Medium = MediumW, + energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState) + "Flow splitter" annotation ( + Placement(transformation(origin = { 130, -175 }, + extent = {{-10, -10}, {10, 10}} +))); + Buildings.Fluid.Sensors.TemperatureTwoPort system_013( + redeclare package Medium = MediumW, + m_flow_nominal=mRad_flow_nominal) "Radiator" annotation ( + Placement(transformation(origin = { 150, -25 }, extent = {{-10, -10}, {10, 10}} ))); Buildings.Fluid.FixedResistances.Junction system_005 ( @@ -2944,11 +2950,17 @@ redeclare package MediumW = MediumW) "Boiler" annotation ( "Flow splitter" annotation ( Placement(transformation(origin = { 630, -25 }, extent = {{-10, -10}, {10, 10}} +))); + Buildings.Fluid.Sensors.TemperatureTwoPort system_014( + redeclare package Medium = MediumW, + m_flow_nominal=mRad_flow_nominal) "Radiator" annotation ( + Placement(transformation(origin = { 400, -25 }, + extent = {{-10, -10}, {10, 10}} ))); house.Common.Controls.ventilation.DataServer data_bus (redeclare package Medium = Medium) annotation ( - Placement(transformation(origin = { -179.32153908790966, 68.82481990289098 }, + Placement(transformation(origin = { -173.962761682544, 53.96716762020198 }, extent = {{-10, -10}, {10, 10}} ))); @@ -2989,7 +3001,7 @@ color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_008.y,emissioncontrol_8.y) annotation (Line( -points={{ 30.0, -75.0 } ,{ -65.6115805719906, -75.0 } ,{ -65.6115805719906, -71.59807030394693 } ,{ -161.2231611439812, -71.59807030394693 } }, +points={{ 30.0, -75.0 } ,{ -80.93668315207296, -75.0 } ,{ -80.93668315207296, 28.514829986510875 } ,{ -191.87336630414592, 28.514829986510875 } }, color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_008.port_b,system_003.port_1) @@ -3033,7 +3045,7 @@ color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_010.y,emissioncontrol_9.y) annotation (Line( -points={{ 280.0, 75.0 } ,{ 167.15492651248186, 75.0 } ,{ 167.15492651248184, 178.5293303083724 } ,{ 54.309853024963715, 178.5293303083724 } }, +points={{ 280.0, 75.0 } ,{ 83.91763643176603, 75.0 } ,{ 83.91763643176601, 154.2722666969942 } ,{ -112.16472713646796, 154.2722666969942 } }, color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_010.port_b,system_003.port_1) @@ -3077,7 +3089,7 @@ color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_012.y,emissioncontrol_10.y) annotation (Line( -points={{ 530.0, 75.0 } ,{ 185.10390684308805, 75.0 } ,{ 185.10390684308808, -106.31025963768906 } ,{ -159.79218631382386, -106.31025963768906 } }, +points={{ 530.0, 75.0 } ,{ 343.83591996234634, 75.0 } ,{ 343.83591996234634, 77.1376029845984 } ,{ 157.67183992469273, 77.1376029845984 } }, color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_012.port_b,system_005.port_1) @@ -3087,130 +3099,160 @@ color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_002.dataBus,pump_control.dataBus) annotation (Line( -points={{ -186.57307338859857, -24.35702377597182 } ,{ -187.47942650475184, -24.35702377597182 } ,{ -187.47942650475184, -62.55926631818296 } ,{ -188.3857796209051, -62.55926631818296 } }, +points={{ 144.6037620695326, -142.56379068560165 } ,{ -5.8423804201713665, -142.56379068560165 } ,{ -5.842380420171338, -94.20984165824021 } ,{ -156.2885229098753, -94.20984165824021 } }, color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_002.port_b,system_004.port_1) annotation (Line( -points={{ -186.57307338859857, -24.35702377597182 } ,{ -143.2865366942993, -24.35702377597182 } ,{ -143.2865366942993, -175.0 } ,{ -100.0, -175.0 } }, +points={{ 144.6037620695326, -142.56379068560165 } ,{ 87.3018810347663, -142.56379068560165 } ,{ 87.3018810347663, -275.0 } ,{ 30.0, -275.0 } }, color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_002.port_b,system_006.port_1) annotation (Line( -points={{ -186.57307338859857, -24.35702377597182 } ,{ 106.71346330570071, -24.35702377597182 } ,{ 106.71346330570071, -25.0 } ,{ 400.0, -25.0 } }, +points={{ 144.6037620695326, -142.56379068560165 } ,{ 337.3018810347663, -142.56379068560165 } ,{ 337.3018810347663, -125.0 } ,{ 530.0, -125.0 } }, color={255,204,51}, thickness=0.5, -smooth=Smooth.None)); connect(system_004.y,three_way_valve_1.y) +smooth=Smooth.None)); connect(system_004.y,three_way_valve_control_1.y) annotation (Line( -points={{ -100.0, -175.0 } ,{ -125.0, -175.0 } ,{ -125.0, -175.0 } ,{ -150.0, -175.0 } }, +points={{ 30.0, -275.0 } ,{ 5.0, -275.0 } ,{ 5.0, -275.0 } ,{ -20.0, -275.0 } }, color={255,204,51}, thickness=0.5, -smooth=Smooth.None)); connect(system_004.port_2,system_007.port_a) +smooth=Smooth.None)); connect(system_004.port_2,system_013.port_a) annotation (Line( -points={{ -100.0, -175.0 } ,{ -50.0, -175.0 } ,{ -50.0, -75.0 } ,{ 0.0, -75.0 } }, +points={{ 30.0, -275.0 } ,{ 90.0, -275.0 } ,{ 90.0, -25.0 } ,{ 150.0, -25.0 } }, color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_004.port_3,system_003.port_3) annotation (Line( -points={{ -100.0, -175.0 } ,{ 15.0, -175.0 } ,{ 15.0, -175.0 } ,{ 130.0, -175.0 } }, +points={{ 30.0, -275.0 } ,{ 80.0, -275.0 } ,{ 80.0, -175.0 } ,{ 130.0, -175.0 } }, color={255,204,51}, thickness=0.5, -smooth=Smooth.None)); connect(system_006.y,three_way_valve_2.y) +smooth=Smooth.None)); connect(three_way_valve_control_1.u,system_013.T) annotation (Line( -points={{ 400.0, -25.0 } ,{ 375.0, -25.0 } ,{ 375.0, -25.0 } ,{ 350.0, -25.0 } }, +points={{ -20.0, -275.0 } ,{ 65.0, -275.0 } ,{ 65.0, -25.0 } ,{ 150.0, -25.0 } }, color={255,204,51}, thickness=0.5, -smooth=Smooth.None)); connect(system_006.port_2,system_011.port_a) +smooth=Smooth.None)); connect(system_006.y,three_way_valve_control_2.y) annotation (Line( -points={{ 400.0, -25.0 } ,{ 450.0, -25.0 } ,{ 450.0, 75.0 } ,{ 500.0, 75.0 } }, +points={{ 530.0, -125.0 } ,{ 505.0, -125.0 } ,{ 505.0, -125.0 } ,{ 480.0, -125.0 } }, +color={255,204,51}, +thickness=0.5, +smooth=Smooth.None)); connect(system_006.port_2,system_014.port_a) +annotation (Line( +points={{ 530.0, -125.0 } ,{ 465.0, -125.0 } ,{ 465.0, -25.0 } ,{ 400.0, -25.0 } }, color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_006.port_3,system_005.port_3) annotation (Line( -points={{ 400.0, -25.0 } ,{ 515.0, -25.0 } ,{ 515.0, -25.0 } ,{ 630.0, -25.0 } }, +points={{ 530.0, -125.0 } ,{ 580.0, -125.0 } ,{ 580.0, -25.0 } ,{ 630.0, -25.0 } }, color={255,204,51}, thickness=0.5, -smooth=Smooth.None)); connect(system_003.port_2,system_001.port_a) +smooth=Smooth.None)); connect(three_way_valve_control_2.u,system_014.T) annotation (Line( -points={{ 130.0, -175.0 } ,{ -3.7146299902760234, -175.0 } ,{ -3.714629990275995, 159.22841822037157 } ,{ -137.42925998055202, 159.22841822037157 } }, +points={{ 480.0, -125.0 } ,{ 440.0, -125.0 } ,{ 440.0, -25.0 } ,{ 400.0, -25.0 } }, color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_001.dataBus,boiler_control.dataBus) annotation (Line( -points={{ -137.42925998055202, 159.22841822037157 } ,{ -23.047559930492326, 159.22841822037157 } ,{ -23.04755993049234, -170.17087032246238 } ,{ 91.33414011956735, -170.17087032246238 } }, +points={{ 181.39128496522164, 106.7438790626681 } ,{ -2.7007239495117403, 106.7438790626681 } ,{ -2.7007239495117403, -67.99391324994959 } ,{ -186.79273286424512, -67.99391324994959 } }, +color={255,204,51}, +thickness=0.5, +smooth=Smooth.None)); connect(system_001.port_b,system_002.port_a) +annotation (Line( +points={{ 181.39128496522164, 106.7438790626681 } ,{ 162.99752351737712, 106.7438790626681 } ,{ 162.99752351737712, -142.56379068560165 } ,{ 144.6037620695326, -142.56379068560165 } }, +color={255,204,51}, +thickness=0.5, +smooth=Smooth.None)); connect(system_003.port_2,system_001.port_a) +annotation (Line( +points={{ 130.0, -175.0 } ,{ 155.69564248261082, -175.0 } ,{ 155.69564248261082, 106.7438790626681 } ,{ 181.39128496522164, 106.7438790626681 } }, +color={255,204,51}, +thickness=0.5, +smooth=Smooth.None)); connect(system_013.port_b,system_009.port_a) +annotation (Line( +points={{ 150.0, -25.0 } ,{ 200.0, -25.0 } ,{ 200.0, 75.0 } ,{ 250.0, 75.0 } }, +color={255,204,51}, +thickness=0.5, +smooth=Smooth.None)); connect(system_013.port_b,system_007.port_a) +annotation (Line( +points={{ 150.0, -25.0 } ,{ 75.0, -25.0 } ,{ 75.0, -75.0 } ,{ 0.0, -75.0 } }, color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_005.port_2,system_001.port_a) annotation (Line( -points={{ 630.0, -25.0 } ,{ 246.28537000972398, -25.0 } ,{ 246.285370009724, 159.22841822037157 } ,{ -137.42925998055202, 159.22841822037157 } }, +points={{ 630.0, -25.0 } ,{ 405.6956424826108, -25.0 } ,{ 405.6956424826108, 106.7438790626681 } ,{ 181.39128496522164, 106.7438790626681 } }, +color={255,204,51}, +thickness=0.5, +smooth=Smooth.None)); connect(system_014.port_b,system_011.port_a) +annotation (Line( +points={{ 400.0, -25.0 } ,{ 450.0, -25.0 } ,{ 450.0, 75.0 } ,{ 500.0, 75.0 } }, color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(emissioncontrol_8.dataBus,data_bus.dataBus) annotation (Line( -points={{ -161.2231611439812, -71.59807030394693 } ,{ -170.27235011594541, -71.59807030394693 } ,{ -170.27235011594541, 68.82481990289098 } ,{ -179.32153908790966, 68.82481990289098 } }, +points={{ -191.87336630414592, 28.514829986510875 } ,{ -182.91806399334496, 28.514829986510875 } ,{ -182.91806399334496, 53.96716762020198 } ,{ -173.962761682544, 53.96716762020198 } }, thickness=0.05, smooth=Smooth.None)); connect(occupancy_11.dataBus,data_bus.dataBus) annotation (Line( -points={{ -50.0, 0.0 } ,{ -114.66076954395483, 0.0 } ,{ -114.66076954395483, 68.82481990289098 } ,{ -179.32153908790966, 68.82481990289098 } }, +points={{ -50.0, 0.0 } ,{ -111.981380841272, 0.0 } ,{ -111.981380841272, 53.96716762020198 } ,{ -173.962761682544, 53.96716762020198 } }, thickness=0.05, smooth=Smooth.None)); connect(emissioncontrol_9.dataBus,data_bus.dataBus) annotation (Line( -points={{ 54.309853024963715, 178.5293303083724 } ,{ -62.50584303147296, 178.5293303083724 } ,{ -62.50584303147298, 68.82481990289098 } ,{ -179.32153908790966, 68.82481990289098 } }, +points={{ -112.16472713646796, 154.2722666969942 } ,{ -143.06374440950597, 154.2722666969942 } ,{ -143.06374440950597, 53.96716762020198 } ,{ -173.962761682544, 53.96716762020198 } }, thickness=0.05, smooth=Smooth.None)); connect(occupancy_12.dataBus,data_bus.dataBus) annotation (Line( -points={{ 200.0, 150.0 } ,{ 10.339230456045186, 150.0 } ,{ 10.339230456045158, 68.82481990289098 } ,{ -179.32153908790966, 68.82481990289098 } }, +points={{ 200.0, 150.0 } ,{ 13.018619158728, 150.0 } ,{ 13.018619158728, 53.96716762020198 } ,{ -173.962761682544, 53.96716762020198 } }, thickness=0.05, smooth=Smooth.None)); connect(emissioncontrol_10.dataBus,data_bus.dataBus) annotation (Line( -points={{ -159.79218631382386, -106.31025963768906 } ,{ -169.55686270086676, -106.31025963768906 } ,{ -169.55686270086676, 68.82481990289098 } ,{ -179.32153908790966, 68.82481990289098 } }, +points={{ 157.67183992469273, 77.1376029845984 } ,{ -8.145460878925633, 77.1376029845984 } ,{ -8.145460878925633, 53.96716762020198 } ,{ -173.962761682544, 53.96716762020198 } }, thickness=0.05, smooth=Smooth.None)); connect(occupancy_13.dataBus,data_bus.dataBus) annotation (Line( -points={{ 450.0, 150.0 } ,{ 135.3392304560452, 150.0 } ,{ 135.33923045604516, 68.82481990289098 } ,{ -179.32153908790966, 68.82481990289098 } }, +points={{ 450.0, 150.0 } ,{ 138.01861915872803, 150.0 } ,{ 138.01861915872797, 53.96716762020198 } ,{ -173.962761682544, 53.96716762020198 } }, thickness=0.05, smooth=Smooth.None)); connect(pump_control.dataBus,data_bus.dataBus) annotation (Line( -points={{ -188.3857796209051, -62.55926631818296 } ,{ -183.8536593544074, -62.55926631818296 } ,{ -183.8536593544074, 68.82481990289098 } ,{ -179.32153908790966, 68.82481990289098 } }, +points={{ -156.2885229098753, -94.20984165824021 } ,{ -165.12564229620966, -94.20984165824021 } ,{ -165.12564229620966, 53.96716762020198 } ,{ -173.962761682544, 53.96716762020198 } }, thickness=0.05, -smooth=Smooth.None)); connect(three_way_valve_1.dataBus,data_bus.dataBus) +smooth=Smooth.None)); connect(three_way_valve_control_1.dataBus,data_bus.dataBus) annotation (Line( -points={{ -150.0, -175.0 } ,{ -164.6607695439548, -175.0 } ,{ -164.6607695439548, 68.82481990289098 } ,{ -179.32153908790966, 68.82481990289098 } }, +points={{ -20.0, -275.0 } ,{ -96.981380841272, -275.0 } ,{ -96.981380841272, 53.96716762020198 } ,{ -173.962761682544, 53.96716762020198 } }, thickness=0.05, -smooth=Smooth.None)); connect(three_way_valve_2.dataBus,data_bus.dataBus) +smooth=Smooth.None)); connect(three_way_valve_control_2.dataBus,data_bus.dataBus) annotation (Line( -points={{ 350.0, -25.0 } ,{ 85.33923045604519, -25.0 } ,{ 85.33923045604516, 68.82481990289098 } ,{ -179.32153908790966, 68.82481990289098 } }, +points={{ 480.0, -125.0 } ,{ 153.01861915872803, -125.0 } ,{ 153.01861915872797, 53.96716762020198 } ,{ -173.962761682544, 53.96716762020198 } }, thickness=0.05, smooth=Smooth.None)); connect(boiler_control.dataBus,data_bus.dataBus) annotation (Line( -points={{ 91.33414011956735, -170.17087032246238 } ,{ -43.99369948417116, -170.17087032246238 } ,{ -43.993699484171145, 68.82481990289098 } ,{ -179.32153908790966, 68.82481990289098 } }, +points={{ -186.79273286424512, -67.99391324994959 } ,{ -180.37774727339456, -67.99391324994959 } ,{ -180.37774727339456, 53.96716762020198 } ,{ -173.962761682544, 53.96716762020198 } }, thickness=0.05, smooth=Smooth.None)); connect(schema_space_001.heaPorAir,data_bus.port[1]) annotation (Line( -points={{ 0.0, 0.0 } ,{ -89.66076954395483, 0.0 } ,{ -89.66076954395483, 68.82481990289098 } ,{ -179.32153908790966, 68.82481990289098 } }, +points={{ 0.0, 0.0 } ,{ -86.981380841272, 0.0 } ,{ -86.981380841272, 53.96716762020198 } ,{ -173.962761682544, 53.96716762020198 } }, thickness=0.05, smooth=Smooth.None)); connect(schema_space_001.ports[1],data_bus.port_a[1]) annotation (Line( -points={{ 0.0, 0.0 } ,{ -89.66076954395483, 0.0 } ,{ -89.66076954395483, 68.82481990289098 } ,{ -179.32153908790966, 68.82481990289098 } }, +points={{ 0.0, 0.0 } ,{ -86.981380841272, 0.0 } ,{ -86.981380841272, 53.96716762020198 } ,{ -173.962761682544, 53.96716762020198 } }, thickness=0.05, smooth=Smooth.None)); connect(schema_space_002.heaPorAir,data_bus.port[2]) annotation (Line( -points={{ 250.0, 150.0 } ,{ 35.339230456045186, 150.0 } ,{ 35.33923045604516, 68.82481990289098 } ,{ -179.32153908790966, 68.82481990289098 } }, +points={{ 250.0, 150.0 } ,{ 38.018619158728, 150.0 } ,{ 38.018619158728, 53.96716762020198 } ,{ -173.962761682544, 53.96716762020198 } }, thickness=0.05, smooth=Smooth.None)); connect(schema_space_002.ports[1],data_bus.port_a[2]) annotation (Line( -points={{ 250.0, 150.0 } ,{ 35.339230456045186, 150.0 } ,{ 35.33923045604516, 68.82481990289098 } ,{ -179.32153908790966, 68.82481990289098 } }, +points={{ 250.0, 150.0 } ,{ 38.018619158728, 150.0 } ,{ 38.018619158728, 53.96716762020198 } ,{ -173.962761682544, 53.96716762020198 } }, thickness=0.05, smooth=Smooth.None)); connect(schema_space_003.heaPorAir,data_bus.port[3]) annotation (Line( -points={{ 500.0, 150.0 } ,{ 160.3392304560452, 150.0 } ,{ 160.33923045604516, 68.82481990289098 } ,{ -179.32153908790966, 68.82481990289098 } }, +points={{ 500.0, 150.0 } ,{ 163.01861915872803, 150.0 } ,{ 163.01861915872797, 53.96716762020198 } ,{ -173.962761682544, 53.96716762020198 } }, thickness=0.05, smooth=Smooth.None)); connect(schema_space_003.ports[1],data_bus.port_a[3]) annotation (Line( -points={{ 500.0, 150.0 } ,{ 160.3392304560452, 150.0 } ,{ 160.33923045604516, 68.82481990289098 } ,{ -179.32153908790966, 68.82481990289098 } }, +points={{ 500.0, 150.0 } ,{ 163.01861915872803, 150.0 } ,{ 163.01861915872797, 53.96716762020198 } ,{ -173.962761682544, 53.96716762020198 } }, thickness=0.05, -smooth=Smooth.None));annotation (Diagram(coordinateSystem(extent={{-244.70359726827792,-225.0},{680.0,250.0}})), Icon( - coordinateSystem(extent={{-244.70359726827792,-225.0},{680.0,250.0}}))); +smooth=Smooth.None));annotation (Diagram(coordinateSystem(extent={{-241.87336630414592,-325.0},{680.0,250.0}})), Icon( + coordinateSystem(extent={{-241.87336630414592,-325.0},{680.0,250.0}}))); annotation ( Documentation(info="Spaces

Spaces

Introduction

Introduction

nameschema_space_001
parameters
mSenFac1.0
AFlo100.0
hRoo2.5
linearizeRadiationtrue
m_flow_nominal0.01
T_start294.15
volume250.0
occupancy
nameoccupancy_11
parameters
emissions
nameparameters
system_007
nEle1
fraRad0.3
Q_flow_nominal2000.0
T_a_nominal363.15
T_b_nominal353.15
TAir_nominal293.15
TRad_nominal293.15
n1.9
deltaM0.01
from_dpfalse
dp_nominal1000.0
linearizedfalse
VWat0.116
mDry52.6
system_008
R7.0
delta00.01
dpFixed_nominal6000.0
l0.0001
from_dptrue
linearizedfalse
deltaM0.02
m_flow_nominal0.01
dpValve_nominal6000.0
external_boundaries
namesurfaceazimuthtiltconstruction
externalwall_17100.0180.0wall
nameconstruction_001
externalwall_18100.0180.0wall
nameconstruction_001
externalwall_19200.0180.0wall
nameconstruction_001
internal_elements
namesurfaceazimuthtiltconstruction
internal_schema_space_001_schema_space_00210.010.0wall
nameinternal_wall
internal_schema_space_001_schema_space_00310.010.0wall
nameinternal_wall
nameschema_space_002
parameters
mSenFac1.0
AFlo100.0
hRoo2.5
linearizeRadiationtrue
m_flow_nominal0.01
T_start294.15
volume250.0
occupancy
nameoccupancy_12
parameters
emissions
nameparameters
system_009
nEle1
fraRad0.3
Q_flow_nominal2000.0
T_a_nominal363.15
T_b_nominal353.15
TAir_nominal293.15
TRad_nominal293.15
n1.9
deltaM0.01
from_dpfalse
dp_nominal1000.0
linearizedfalse
VWat0.116
mDry52.6
system_010
R7.0
delta00.01
dpFixed_nominal6000.0
l0.0001
from_dptrue
linearizedfalse
deltaM0.02
m_flow_nominal0.01
dpValve_nominal6000.0
external_boundaries
namesurfaceazimuthtiltconstruction
externalwall_20100.0180.0wall
nameconstruction_001
externalwall_21100.0180.0wall
nameconstruction_001
externalwall_22200.0180.0wall
nameconstruction_001
internal_elements
namesurfaceazimuthtiltconstruction
internal_schema_space_001_schema_space_00210.010.0wall
nameinternal_wall
internal_schema_space_002_schema_space_00310.010.0wall
nameinternal_wall
nameschema_space_003
parameters
mSenFac1.0
AFlo100.0
hRoo2.5
linearizeRadiationtrue
m_flow_nominal0.01
T_start294.15
volume250.0
occupancy
nameoccupancy_13
parameters
emissions
nameparameters
system_011
nEle1
fraRad0.3
Q_flow_nominal2000.0
T_a_nominal363.15
T_b_nominal353.15
TAir_nominal293.15
TRad_nominal293.15
n1.9
deltaM0.01
from_dpfalse
dp_nominal1000.0
linearizedfalse
VWat0.116
mDry52.6
system_012
R7.0
delta00.01
dpFixed_nominal6000.0
l0.0001
from_dptrue
linearizedfalse
deltaM0.02
m_flow_nominal0.01
dpValve_nominal6000.0
external_boundaries
namesurfaceazimuthtiltconstruction
externalwall_23100.0180.0wall
nameconstruction_001
externalwall_24100.0180.0wall
nameconstruction_001
externalwall_25200.0180.0wall
nameconstruction_001
internal_elements
namesurfaceazimuthtiltconstruction
internal_schema_space_001_schema_space_00310.010.0wall
nameinternal_wall
internal_schema_space_002_schema_space_00310.010.0wall
nameinternal_wall

Conclusions

Conclusions

Spaces

Introduction

Introduction

nameinternal_wall
layers
materialthickness
namebrick
k0.89
c790.0
rho1920.0
epsLw0.85
epsSw0.65
0.2
nameconstruction_001
layers
materialthickness
namematerial_001
k0.035
c1000.0
rho2000.0
epsLw0.85
epsSw0.85
0.1
namematerial_002
k0.035
c1000.0
rho2000.0
epsLw0.85
epsSw0.85
0.1
namematerial_003
k0.035
c1000.0
rho2000.0
epsLw0.85
epsSw0.85
0.1

Conclusions

Conclusions

Spaces

Introduction

Introduction

namesystem_001
parameters
scaFacRad1.5
dTBoi_nominal20
dTRad_nominal10
a{0.9}
effCurBuildings.Fluid.Types.EfficiencyCurves.Constant
T_nominal353.15
fueBuildings.Fluid.Data.Fuels.HeatingOilLowerHeatingValue()
Q_flow_nominal2000
dp_nominal5000
linearizeFlowResistancefalse
deltaM0.1
show_Tfalse
VTan0.2
hTan2
nSeg4
dIns0.002
dp(3000 + 2000)*{2,1}
nominal_mass_flow_rate_boiler0.03571428571428571
nominal_mass_flow_radiator_loop0.07142857142857142
V_flow0.03571428571428571/1000*{0.5,1}

Conclusions

Conclusions

")); end building; diff --git a/tests/data/house_yaml.mo b/tests/data/house_yaml.mo index ac7f05a..88cc237 100644 --- a/tests/data/house_yaml.mo +++ b/tests/data/house_yaml.mo @@ -410,7 +410,7 @@ constructed by the signals connected to this bus. parameter Modelica.Units.SI.Temperature THeaSet= 273.15+24; parameter Modelica.Units.SI.Temperature THeaSetBack= 273.15+16; Buildings.Controls.OBC.ASHRAE.G36.ThermalZones.ControlLoops -emissionControl( kCooCon=0.0, +emissionControl( kCooCon=1.0, TiCooCon=900, kHeaCon=0.1, TiHeaCon=900, @@ -474,7 +474,7 @@ connect(dataBus.OccupiedSchema_space_001, occSch2.occupied); parameter Modelica.Units.SI.Temperature THeaSet= 273.15+24; parameter Modelica.Units.SI.Temperature THeaSetBack= 273.15+16; Buildings.Controls.OBC.ASHRAE.G36.ThermalZones.ControlLoops -emissionControl( kCooCon=0.0, +emissionControl( kCooCon=1.0, TiCooCon=900, kHeaCon=0.1, TiHeaCon=900, @@ -538,7 +538,7 @@ connect(dataBus.OccupiedSchema_space_002, occSch2.occupied); parameter Modelica.Units.SI.Temperature THeaSet= 273.15+24; parameter Modelica.Units.SI.Temperature THeaSetBack= 273.15+16; Buildings.Controls.OBC.ASHRAE.G36.ThermalZones.ControlLoops -emissionControl( kCooCon=0.0, +emissionControl( kCooCon=1.0, TiCooCon=900, kHeaCon=0.1, TiHeaCon=900, @@ -635,7 +635,7 @@ connect(dataBus.yHeaSystem_008, mulMax.u[1]); connect(dataBus.yHeaSystem_010, mulMax.u[2]); connect(dataBus.yHeaSystem_012, mulMax.u[3]); end CollectorControlPump_control; - model ThreeWayValveControlThree_way_valve_1 + model ThreeWayValveControlThree_way_valve_control_1 Buildings.Controls.OBC.CDL.Reals.PIDWithReset conVal( controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PI, @@ -654,13 +654,13 @@ annotation (Placement(transformation(extent={{-138,-20},{-98,20}}))); Con annotation (Placement(transformation( extent={{-120,-18},{-80,22}}), iconTransformation(extent={{-120,62},{-78,98}}))); equation -connect(dataBus.TColSetThree_way_valve_1, conVal.u_s); -connect(dataBus.triggerThree_way_valve_1, conVal.trigger); +connect(dataBus.TColSetThree_way_valve_control_1, conVal.u_s); +connect(dataBus.triggerThree_way_valve_control_1, conVal.trigger); connect(conVal.y, y) annotation (Line(points={{10,0},{110,0}}, color={0,0,127})); connect(u, conVal.u_m) annotation (Line(points={{-118,0},{-22,0},{-22,-20},{0, -20},{0,-16},{-2,-16},{-2,-12}}, color={0,0,127}));annotation (Icon(coordinateSystem(preserveAspectRatio=false)), Diagram( - coordinateSystem(preserveAspectRatio=false)));end ThreeWayValveControlThree_way_valve_1; - model ThreeWayValveControlThree_way_valve_2 + coordinateSystem(preserveAspectRatio=false)));end ThreeWayValveControlThree_way_valve_control_1; + model ThreeWayValveControlThree_way_valve_control_2 Buildings.Controls.OBC.CDL.Reals.PIDWithReset conVal( controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PI, @@ -679,12 +679,12 @@ annotation (Placement(transformation(extent={{-138,-20},{-98,20}}))); Con annotation (Placement(transformation( extent={{-120,-18},{-80,22}}), iconTransformation(extent={{-120,62},{-78,98}}))); equation -connect(dataBus.TColSetThree_way_valve_2, conVal.u_s); -connect(dataBus.triggerThree_way_valve_2, conVal.trigger); +connect(dataBus.TColSetThree_way_valve_control_2, conVal.u_s); +connect(dataBus.triggerThree_way_valve_control_2, conVal.trigger); connect(conVal.y, y) annotation (Line(points={{10,0},{110,0}}, color={0,0,127})); connect(u, conVal.u_m) annotation (Line(points={{-118,0},{-22,0},{-22,-20},{0, -20},{0,-16},{-2,-16},{-2,-12}}, color={0,0,127}));annotation (Icon(coordinateSystem(preserveAspectRatio=false)), Diagram( - coordinateSystem(preserveAspectRatio=false)));end ThreeWayValveControlThree_way_valve_2; + coordinateSystem(preserveAspectRatio=false)));end ThreeWayValveControlThree_way_valve_control_2; model BoilerControlBoiler_control extends house_yaml.Common.Controls.ventilation.PartialBoilerControl; Controls.BaseClasses.DataBus dataBus @@ -716,14 +716,14 @@ iconTransformation(origin = {-2, -42}, extent = {{-110, -9}, {-90, 9}}))); Cont annotation (Placement(transformation( extent={{-120,-18},{-80,22}}), iconTransformation(extent={{-120,62},{-78,98}}))); Modelica.Blocks.Sources.RealExpression - TColSetThree_way_valve_1 - (y=363.15); + TCooSetEmissioncontrol_8 + (y=298.15); Modelica.Blocks.Sources.RealExpression - TColSetThree_way_valve_2 + TColSetThree_way_valve_control_2 (y=363.15); Modelica.Blocks.Sources.RealExpression - TCooSetEmissioncontrol_8 - (y=298.15); + TAirOutBoiler_control + (y=0.0); Modelica.Blocks.Sources.RealExpression TCooSetEmissioncontrol_10 (y=298.15); @@ -731,13 +731,13 @@ Modelica.Blocks.Sources.RealExpression TCooSetEmissioncontrol_9 (y=298.15); Modelica.Blocks.Sources.RealExpression - TAirOutBoiler_control - (y=0.0); + TColSetThree_way_valve_control_1 + (y=363.15); Modelica.Blocks.Sources.BooleanExpression - triggerThree_way_valve_2 + triggerThree_way_valve_control_2 (y=true); Modelica.Blocks.Sources.BooleanExpression - triggerThree_way_valve_1 + triggerThree_way_valve_control_1 (y=true); equation connect(port[1],TRoo[1]. port); @@ -752,22 +752,22 @@ connect(dataBus.TZonSchema_space_003, TRoo[3].T); connect(dataBus.ppmCO2Schema_space_001, TRoo1[1].ppm); connect(dataBus.ppmCO2Schema_space_002, TRoo1[2].ppm); connect(dataBus.ppmCO2Schema_space_003, TRoo1[3].ppm); -connect(dataBus.TColSetThree_way_valve_1, -TColSetThree_way_valve_1.y); -connect(dataBus.TColSetThree_way_valve_2, -TColSetThree_way_valve_2.y); connect(dataBus.TCooSetSchema_space_001, TCooSetEmissioncontrol_8.y); +connect(dataBus.TColSetThree_way_valve_control_2, +TColSetThree_way_valve_control_2.y); +connect(dataBus.TAirOutSystem_001, +TAirOutBoiler_control.y); connect(dataBus.TCooSetSchema_space_003, TCooSetEmissioncontrol_10.y); connect(dataBus.TCooSetSchema_space_002, TCooSetEmissioncontrol_9.y); -connect(dataBus.TAirOutSystem_001, -TAirOutBoiler_control.y); -connect(dataBus.triggerThree_way_valve_2, -triggerThree_way_valve_2.y); -connect(dataBus.triggerThree_way_valve_1, -triggerThree_way_valve_1.y); +connect(dataBus.TColSetThree_way_valve_control_1, +TColSetThree_way_valve_control_1.y); +connect(dataBus.triggerThree_way_valve_control_2, +triggerThree_way_valve_control_2.y); +connect(dataBus.triggerThree_way_valve_control_1, +triggerThree_way_valve_control_1.y); end DataServer; @@ -2627,7 +2627,7 @@ parameter Integer nRoo = 2 "Number of rooms"; ))); house_yaml.Common.Controls.ventilation.EmissionControlEmissioncontrol_8 emissioncontrol_8 annotation ( - Placement(transformation(origin = { 71.39084169804254, 194.35742875153028 }, + Placement(transformation(origin = { 189.00475557936556, 82.23729049329306 }, extent = {{-10, -10}, {10, 10}} ))); house_yaml.Common.Controls.ventilation.OccupancyOccupancy_11 @@ -2703,7 +2703,7 @@ parameter Integer nRoo = 2 "Number of rooms"; ))); house_yaml.Common.Controls.ventilation.EmissionControlEmissioncontrol_9 emissioncontrol_9 annotation ( - Placement(transformation(origin = { 181.91888644766794, 83.46287938471441 }, + Placement(transformation(origin = { -168.23918192749068, -86.95066185128486 }, extent = {{-10, -10}, {10, 10}} ))); house_yaml.Common.Controls.ventilation.OccupancyOccupancy_12 @@ -2779,7 +2779,7 @@ parameter Integer nRoo = 2 "Number of rooms"; ))); house_yaml.Common.Controls.ventilation.EmissionControlEmissioncontrol_10 emissioncontrol_10 annotation ( - Placement(transformation(origin = { 189.6094951506921, -69.8057000790667 }, + Placement(transformation(origin = { 160.7168178305994, 92.50703919780251 }, extent = {{-10, -10}, {10, 10}} ))); house_yaml.Common.Controls.ventilation.OccupancyOccupancy_13 @@ -2833,12 +2833,12 @@ parameter Integer nRoo = 2 "Number of rooms"; redeclare package Medium = MediumW ) annotation ( - Placement(transformation(origin = { 177.3535362800334, 49.36012094035274 }, + Placement(transformation(origin = { 70.37576393112987, -190.62444078998854 }, extent = {{-10, -10}, {10, 10}} ))); house_yaml.Common.Controls.ventilation.CollectorControlPump_control pump_control annotation ( - Placement(transformation(origin = { 9.746812125077104, -192.0345385542482 }, + Placement(transformation(origin = { -66.79594488750574, 183.3717972599085 }, extent = {{-10, -10}, {10, 10}} ))); Buildings.Fluid.Actuators.Valves.ThreeWayEqualPercentageLinear @@ -2856,13 +2856,13 @@ parameter Integer nRoo = 2 "Number of rooms"; dpValve_nominal=6000 , energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState) "Three-wayvalve" annotation ( - Placement(transformation(origin = { -100, -175 }, + Placement(transformation(origin = { 30, -275 }, extent = {{-10, -10}, {10, 10}} ))); house_yaml.Common.Controls.ventilation. - ThreeWayValveControlThree_way_valve_1 - three_way_valve_1 annotation ( - Placement(transformation(origin = { -150, -175 }, + ThreeWayValveControlThree_way_valve_control_1 + three_way_valve_control_1 annotation ( + Placement(transformation(origin = { -20, -275 }, extent = {{-10, -10}, {10, 10}} ))); Buildings.Fluid.Actuators.Valves.ThreeWayEqualPercentageLinear @@ -2880,25 +2880,13 @@ parameter Integer nRoo = 2 "Number of rooms"; dpValve_nominal=6000 , energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState) "Three-wayvalve" annotation ( - Placement(transformation(origin = { 400, -25 }, + Placement(transformation(origin = { 530, -125 }, extent = {{-10, -10}, {10, 10}} ))); house_yaml.Common.Controls.ventilation. - ThreeWayValveControlThree_way_valve_2 - three_way_valve_2 annotation ( - Placement(transformation(origin = { 350, -25 }, - extent = {{-10, -10}, {10, 10}} -))); - Buildings.Fluid.FixedResistances.Junction system_003 ( - m_flow_nominal=0.008*{1, -1, -1}, - dp_nominal={10000,-1,-1}, - deltaM=0.3, - linearized=false -, - redeclare package Medium = MediumW, - energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState) - "Flow splitter" annotation ( - Placement(transformation(origin = { 130, -175 }, + ThreeWayValveControlThree_way_valve_control_2 + three_way_valve_control_2 annotation ( + Placement(transformation(origin = { 480, -125 }, extent = {{-10, -10}, {10, 10}} ))); house_yaml.Common.Fluid.Boilers. @@ -2922,7 +2910,7 @@ BoilerWithStorageSystem_001 system_001( V_flow=0.03571428571428571/1000*{0.5,1} , redeclare package MediumW = MediumW) "Boiler" annotation ( - Placement(transformation(origin = { 134.32240807676123, 112.62266697610724 }, + Placement(transformation(origin = { -137.5727676397888, 101.48826133136996 }, extent = {{-10, -10}, {10, 10}} ))); house_yaml.Common.Controls.ventilation.BoilerControlBoiler_control @@ -2930,7 +2918,25 @@ redeclare package MediumW = MediumW) "Boiler" annotation ( threshold_outdoor_air_cutoff=288.15, threshold_to_switch_off_boiler=288.15 ) annotation ( - Placement(transformation(origin = { -187.14430303440434, -81.9856472933729 }, + Placement(transformation(origin = { -71.52943905199494, -173.4218534410854 }, + extent = {{-10, -10}, {10, 10}} +))); + Buildings.Fluid.FixedResistances.Junction system_003 ( + m_flow_nominal=0.008*{1, -1, -1}, + dp_nominal={10000,-1,-1}, + deltaM=0.3, + linearized=false +, + redeclare package Medium = MediumW, + energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState) + "Flow splitter" annotation ( + Placement(transformation(origin = { 130, -175 }, + extent = {{-10, -10}, {10, 10}} +))); + Buildings.Fluid.Sensors.TemperatureTwoPort system_013( + redeclare package Medium = MediumW, + m_flow_nominal=mRad_flow_nominal) "Radiator" annotation ( + Placement(transformation(origin = { 150, -25 }, extent = {{-10, -10}, {10, 10}} ))); Buildings.Fluid.FixedResistances.Junction system_005 ( @@ -2944,11 +2950,17 @@ redeclare package MediumW = MediumW) "Boiler" annotation ( "Flow splitter" annotation ( Placement(transformation(origin = { 630, -25 }, extent = {{-10, -10}, {10, 10}} +))); + Buildings.Fluid.Sensors.TemperatureTwoPort system_014( + redeclare package Medium = MediumW, + m_flow_nominal=mRad_flow_nominal) "Radiator" annotation ( + Placement(transformation(origin = { 400, -25 }, + extent = {{-10, -10}, {10, 10}} ))); house_yaml.Common.Controls.ventilation.DataServer data_bus (redeclare package Medium = Medium) annotation ( - Placement(transformation(origin = { -122.89327650346242, 122.40622127177545 }, + Placement(transformation(origin = { -152.7407123840926, 135.7318076382513 }, extent = {{-10, -10}, {10, 10}} ))); @@ -2989,7 +3001,7 @@ color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_008.y,emissioncontrol_8.y) annotation (Line( -points={{ 30.0, -75.0 } ,{ 50.69542084902127, -75.0 } ,{ 50.69542084902127, 194.35742875153028 } ,{ 71.39084169804254, 194.35742875153028 } }, +points={{ 30.0, -75.0 } ,{ 109.50237778968278, -75.0 } ,{ 109.50237778968278, 82.23729049329306 } ,{ 189.00475557936556, 82.23729049329306 } }, color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_008.port_b,system_003.port_1) @@ -3033,7 +3045,7 @@ color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_010.y,emissioncontrol_9.y) annotation (Line( -points={{ 280.0, 75.0 } ,{ 230.95944322383397, 75.0 } ,{ 230.95944322383397, 83.46287938471441 } ,{ 181.91888644766794, 83.46287938471441 } }, +points={{ 280.0, 75.0 } ,{ 55.88040903625466, 75.0 } ,{ 55.88040903625466, -86.95066185128486 } ,{ -168.23918192749068, -86.95066185128486 } }, color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_010.port_b,system_003.port_1) @@ -3077,7 +3089,7 @@ color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_012.y,emissioncontrol_10.y) annotation (Line( -points={{ 530.0, 75.0 } ,{ 359.804747575346, 75.0 } ,{ 359.804747575346, -69.8057000790667 } ,{ 189.6094951506921, -69.8057000790667 } }, +points={{ 530.0, 75.0 } ,{ 345.3584089152997, 75.0 } ,{ 345.3584089152997, 92.50703919780251 } ,{ 160.7168178305994, 92.50703919780251 } }, color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_012.port_b,system_005.port_1) @@ -3087,130 +3099,160 @@ color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_002.dataBus,pump_control.dataBus) annotation (Line( -points={{ 177.3535362800334, 49.36012094035274 } ,{ 93.55017420255525, 49.36012094035274 } ,{ 93.55017420255525, -192.0345385542482 } ,{ 9.746812125077104, -192.0345385542482 } }, +points={{ 70.37576393112987, -190.62444078998854 } ,{ 1.7899095218120635, -190.62444078998854 } ,{ 1.7899095218120635, 183.3717972599085 } ,{ -66.79594488750574, 183.3717972599085 } }, color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_002.port_b,system_004.port_1) annotation (Line( -points={{ 177.3535362800334, 49.36012094035274 } ,{ 38.67676814001672, 49.36012094035274 } ,{ 38.67676814001669, -175.0 } ,{ -100.0, -175.0 } }, +points={{ 70.37576393112987, -190.62444078998854 } ,{ 50.187881965564934, -190.62444078998854 } ,{ 50.187881965564934, -275.0 } ,{ 30.0, -275.0 } }, color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_002.port_b,system_006.port_1) annotation (Line( -points={{ 177.3535362800334, 49.36012094035274 } ,{ 288.6767681400167, 49.36012094035274 } ,{ 288.6767681400167, -25.0 } ,{ 400.0, -25.0 } }, +points={{ 70.37576393112987, -190.62444078998854 } ,{ 300.18788196556494, -190.62444078998854 } ,{ 300.18788196556494, -125.0 } ,{ 530.0, -125.0 } }, color={255,204,51}, thickness=0.5, -smooth=Smooth.None)); connect(system_004.y,three_way_valve_1.y) +smooth=Smooth.None)); connect(system_004.y,three_way_valve_control_1.y) annotation (Line( -points={{ -100.0, -175.0 } ,{ -125.0, -175.0 } ,{ -125.0, -175.0 } ,{ -150.0, -175.0 } }, +points={{ 30.0, -275.0 } ,{ 5.0, -275.0 } ,{ 5.0, -275.0 } ,{ -20.0, -275.0 } }, color={255,204,51}, thickness=0.5, -smooth=Smooth.None)); connect(system_004.port_2,system_007.port_a) +smooth=Smooth.None)); connect(system_004.port_2,system_013.port_a) annotation (Line( -points={{ -100.0, -175.0 } ,{ -50.0, -175.0 } ,{ -50.0, -75.0 } ,{ 0.0, -75.0 } }, +points={{ 30.0, -275.0 } ,{ 90.0, -275.0 } ,{ 90.0, -25.0 } ,{ 150.0, -25.0 } }, color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_004.port_3,system_003.port_3) annotation (Line( -points={{ -100.0, -175.0 } ,{ 15.0, -175.0 } ,{ 15.0, -175.0 } ,{ 130.0, -175.0 } }, +points={{ 30.0, -275.0 } ,{ 80.0, -275.0 } ,{ 80.0, -175.0 } ,{ 130.0, -175.0 } }, color={255,204,51}, thickness=0.5, -smooth=Smooth.None)); connect(system_006.y,three_way_valve_2.y) +smooth=Smooth.None)); connect(three_way_valve_control_1.u,system_013.T) annotation (Line( -points={{ 400.0, -25.0 } ,{ 375.0, -25.0 } ,{ 375.0, -25.0 } ,{ 350.0, -25.0 } }, +points={{ -20.0, -275.0 } ,{ 65.0, -275.0 } ,{ 65.0, -25.0 } ,{ 150.0, -25.0 } }, color={255,204,51}, thickness=0.5, -smooth=Smooth.None)); connect(system_006.port_2,system_011.port_a) +smooth=Smooth.None)); connect(system_006.y,three_way_valve_control_2.y) annotation (Line( -points={{ 400.0, -25.0 } ,{ 450.0, -25.0 } ,{ 450.0, 75.0 } ,{ 500.0, 75.0 } }, +points={{ 530.0, -125.0 } ,{ 505.0, -125.0 } ,{ 505.0, -125.0 } ,{ 480.0, -125.0 } }, +color={255,204,51}, +thickness=0.5, +smooth=Smooth.None)); connect(system_006.port_2,system_014.port_a) +annotation (Line( +points={{ 530.0, -125.0 } ,{ 465.0, -125.0 } ,{ 465.0, -25.0 } ,{ 400.0, -25.0 } }, color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_006.port_3,system_005.port_3) annotation (Line( -points={{ 400.0, -25.0 } ,{ 515.0, -25.0 } ,{ 515.0, -25.0 } ,{ 630.0, -25.0 } }, +points={{ 530.0, -125.0 } ,{ 580.0, -125.0 } ,{ 580.0, -25.0 } ,{ 630.0, -25.0 } }, color={255,204,51}, thickness=0.5, -smooth=Smooth.None)); connect(system_003.port_2,system_001.port_a) +smooth=Smooth.None)); connect(three_way_valve_control_2.u,system_014.T) annotation (Line( -points={{ 130.0, -175.0 } ,{ 132.16120403838062, -175.0 } ,{ 132.16120403838062, 112.62266697610724 } ,{ 134.32240807676123, 112.62266697610724 } }, +points={{ 480.0, -125.0 } ,{ 440.0, -125.0 } ,{ 440.0, -25.0 } ,{ 400.0, -25.0 } }, color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_001.dataBus,boiler_control.dataBus) annotation (Line( -points={{ 134.32240807676123, 112.62266697610724 } ,{ -26.410947478821555, 112.62266697610724 } ,{ -26.410947478821555, -81.9856472933729 } ,{ -187.14430303440434, -81.9856472933729 } }, +points={{ -137.5727676397888, 101.48826133136996 } ,{ -104.55110334589187, 101.48826133136996 } ,{ -104.55110334589187, -173.4218534410854 } ,{ -71.52943905199494, -173.4218534410854 } }, +color={255,204,51}, +thickness=0.5, +smooth=Smooth.None)); connect(system_001.port_b,system_002.port_a) +annotation (Line( +points={{ -137.5727676397888, 101.48826133136996 } ,{ -33.59850185432947, 101.48826133136996 } ,{ -33.598501854329456, -190.62444078998854 } ,{ 70.37576393112987, -190.62444078998854 } }, +color={255,204,51}, +thickness=0.5, +smooth=Smooth.None)); connect(system_003.port_2,system_001.port_a) +annotation (Line( +points={{ 130.0, -175.0 } ,{ -3.786383819894411, -175.0 } ,{ -3.7863838198943824, 101.48826133136996 } ,{ -137.5727676397888, 101.48826133136996 } }, +color={255,204,51}, +thickness=0.5, +smooth=Smooth.None)); connect(system_013.port_b,system_009.port_a) +annotation (Line( +points={{ 150.0, -25.0 } ,{ 200.0, -25.0 } ,{ 200.0, 75.0 } ,{ 250.0, 75.0 } }, +color={255,204,51}, +thickness=0.5, +smooth=Smooth.None)); connect(system_013.port_b,system_007.port_a) +annotation (Line( +points={{ 150.0, -25.0 } ,{ 75.0, -25.0 } ,{ 75.0, -75.0 } ,{ 0.0, -75.0 } }, color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_005.port_2,system_001.port_a) annotation (Line( -points={{ 630.0, -25.0 } ,{ 382.1612040383806, -25.0 } ,{ 382.1612040383806, 112.62266697610724 } ,{ 134.32240807676123, 112.62266697610724 } }, +points={{ 630.0, -25.0 } ,{ 246.2136161801056, -25.0 } ,{ 246.21361618010562, 101.48826133136996 } ,{ -137.5727676397888, 101.48826133136996 } }, +color={255,204,51}, +thickness=0.5, +smooth=Smooth.None)); connect(system_014.port_b,system_011.port_a) +annotation (Line( +points={{ 400.0, -25.0 } ,{ 450.0, -25.0 } ,{ 450.0, 75.0 } ,{ 500.0, 75.0 } }, color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(emissioncontrol_8.dataBus,data_bus.dataBus) annotation (Line( -points={{ 71.39084169804254, 194.35742875153028 } ,{ -25.75121740270994, 194.35742875153028 } ,{ -25.75121740270994, 122.40622127177545 } ,{ -122.89327650346242, 122.40622127177545 } }, +points={{ 189.00475557936556, 82.23729049329306 } ,{ 18.13202159763648, 82.23729049329306 } ,{ 18.13202159763648, 135.7318076382513 } ,{ -152.7407123840926, 135.7318076382513 } }, thickness=0.05, smooth=Smooth.None)); connect(occupancy_11.dataBus,data_bus.dataBus) annotation (Line( -points={{ -50.0, 0.0 } ,{ -86.4466382517312, 0.0 } ,{ -86.4466382517312, 122.40622127177545 } ,{ -122.89327650346242, 122.40622127177545 } }, +points={{ -50.0, 0.0 } ,{ -101.3703561920463, 0.0 } ,{ -101.3703561920463, 135.7318076382513 } ,{ -152.7407123840926, 135.7318076382513 } }, thickness=0.05, smooth=Smooth.None)); connect(emissioncontrol_9.dataBus,data_bus.dataBus) annotation (Line( -points={{ 181.91888644766794, 83.46287938471441 } ,{ 29.51280497210277, 83.46287938471441 } ,{ 29.512804972102757, 122.40622127177545 } ,{ -122.89327650346242, 122.40622127177545 } }, +points={{ -168.23918192749068, -86.95066185128486 } ,{ -160.48994715579164, -86.95066185128486 } ,{ -160.48994715579164, 135.7318076382513 } ,{ -152.7407123840926, 135.7318076382513 } }, thickness=0.05, smooth=Smooth.None)); connect(occupancy_12.dataBus,data_bus.dataBus) annotation (Line( -points={{ 200.0, 150.0 } ,{ 38.5533617482688, 150.0 } ,{ 38.553361748268784, 122.40622127177545 } ,{ -122.89327650346242, 122.40622127177545 } }, +points={{ 200.0, 150.0 } ,{ 23.6296438079537, 150.0 } ,{ 23.6296438079537, 135.7318076382513 } ,{ -152.7407123840926, 135.7318076382513 } }, thickness=0.05, smooth=Smooth.None)); connect(emissioncontrol_10.dataBus,data_bus.dataBus) annotation (Line( -points={{ 189.6094951506921, -69.8057000790667 } ,{ 33.358109323614855, -69.8057000790667 } ,{ 33.35810932361484, 122.40622127177545 } ,{ -122.89327650346242, 122.40622127177545 } }, +points={{ 160.7168178305994, 92.50703919780251 } ,{ 3.9880527232533893, 92.50703919780251 } ,{ 3.9880527232534178, 135.7318076382513 } ,{ -152.7407123840926, 135.7318076382513 } }, thickness=0.05, smooth=Smooth.None)); connect(occupancy_13.dataBus,data_bus.dataBus) annotation (Line( -points={{ 450.0, 150.0 } ,{ 163.5533617482688, 150.0 } ,{ 163.5533617482688, 122.40622127177545 } ,{ -122.89327650346242, 122.40622127177545 } }, +points={{ 450.0, 150.0 } ,{ 148.6296438079537, 150.0 } ,{ 148.6296438079537, 135.7318076382513 } ,{ -152.7407123840926, 135.7318076382513 } }, thickness=0.05, smooth=Smooth.None)); connect(pump_control.dataBus,data_bus.dataBus) annotation (Line( -points={{ 9.746812125077104, -192.0345385542482 } ,{ -56.57323218919266, -192.0345385542482 } ,{ -56.57323218919265, 122.40622127177545 } ,{ -122.89327650346242, 122.40622127177545 } }, +points={{ -66.79594488750574, 183.3717972599085 } ,{ -109.76832863579918, 183.3717972599085 } ,{ -109.76832863579918, 135.7318076382513 } ,{ -152.7407123840926, 135.7318076382513 } }, thickness=0.05, -smooth=Smooth.None)); connect(three_way_valve_1.dataBus,data_bus.dataBus) +smooth=Smooth.None)); connect(three_way_valve_control_1.dataBus,data_bus.dataBus) annotation (Line( -points={{ -150.0, -175.0 } ,{ -136.4466382517312, -175.0 } ,{ -136.4466382517312, 122.40622127177545 } ,{ -122.89327650346242, 122.40622127177545 } }, +points={{ -20.0, -275.0 } ,{ -86.3703561920463, -275.0 } ,{ -86.3703561920463, 135.7318076382513 } ,{ -152.7407123840926, 135.7318076382513 } }, thickness=0.05, -smooth=Smooth.None)); connect(three_way_valve_2.dataBus,data_bus.dataBus) +smooth=Smooth.None)); connect(three_way_valve_control_2.dataBus,data_bus.dataBus) annotation (Line( -points={{ 350.0, -25.0 } ,{ 113.5533617482688, -25.0 } ,{ 113.55336174826878, 122.40622127177545 } ,{ -122.89327650346242, 122.40622127177545 } }, +points={{ 480.0, -125.0 } ,{ 163.6296438079537, -125.0 } ,{ 163.6296438079537, 135.7318076382513 } ,{ -152.7407123840926, 135.7318076382513 } }, thickness=0.05, smooth=Smooth.None)); connect(boiler_control.dataBus,data_bus.dataBus) annotation (Line( -points={{ -187.14430303440434, -81.9856472933729 } ,{ -155.01878976893337, -81.9856472933729 } ,{ -155.01878976893337, 122.40622127177545 } ,{ -122.89327650346242, 122.40622127177545 } }, +points={{ -71.52943905199494, -173.4218534410854 } ,{ -112.13507571804377, -173.4218534410854 } ,{ -112.13507571804377, 135.7318076382513 } ,{ -152.7407123840926, 135.7318076382513 } }, thickness=0.05, smooth=Smooth.None)); connect(schema_space_001.heaPorAir,data_bus.port[1]) annotation (Line( -points={{ 0.0, 0.0 } ,{ -61.44663825173121, 0.0 } ,{ -61.44663825173121, 122.40622127177545 } ,{ -122.89327650346242, 122.40622127177545 } }, +points={{ 0.0, 0.0 } ,{ -76.3703561920463, 0.0 } ,{ -76.3703561920463, 135.7318076382513 } ,{ -152.7407123840926, 135.7318076382513 } }, thickness=0.05, smooth=Smooth.None)); connect(schema_space_001.ports[1],data_bus.port_a[1]) annotation (Line( -points={{ 0.0, 0.0 } ,{ -61.44663825173121, 0.0 } ,{ -61.44663825173121, 122.40622127177545 } ,{ -122.89327650346242, 122.40622127177545 } }, +points={{ 0.0, 0.0 } ,{ -76.3703561920463, 0.0 } ,{ -76.3703561920463, 135.7318076382513 } ,{ -152.7407123840926, 135.7318076382513 } }, thickness=0.05, smooth=Smooth.None)); connect(schema_space_002.heaPorAir,data_bus.port[2]) annotation (Line( -points={{ 250.0, 150.0 } ,{ 63.5533617482688, 150.0 } ,{ 63.553361748268784, 122.40622127177545 } ,{ -122.89327650346242, 122.40622127177545 } }, +points={{ 250.0, 150.0 } ,{ 48.6296438079537, 150.0 } ,{ 48.6296438079537, 135.7318076382513 } ,{ -152.7407123840926, 135.7318076382513 } }, thickness=0.05, smooth=Smooth.None)); connect(schema_space_002.ports[1],data_bus.port_a[2]) annotation (Line( -points={{ 250.0, 150.0 } ,{ 63.5533617482688, 150.0 } ,{ 63.553361748268784, 122.40622127177545 } ,{ -122.89327650346242, 122.40622127177545 } }, +points={{ 250.0, 150.0 } ,{ 48.6296438079537, 150.0 } ,{ 48.6296438079537, 135.7318076382513 } ,{ -152.7407123840926, 135.7318076382513 } }, thickness=0.05, smooth=Smooth.None)); connect(schema_space_003.heaPorAir,data_bus.port[3]) annotation (Line( -points={{ 500.0, 150.0 } ,{ 188.5533617482688, 150.0 } ,{ 188.5533617482688, 122.40622127177545 } ,{ -122.89327650346242, 122.40622127177545 } }, +points={{ 500.0, 150.0 } ,{ 173.6296438079537, 150.0 } ,{ 173.6296438079537, 135.7318076382513 } ,{ -152.7407123840926, 135.7318076382513 } }, thickness=0.05, smooth=Smooth.None)); connect(schema_space_003.ports[1],data_bus.port_a[3]) annotation (Line( -points={{ 500.0, 150.0 } ,{ 188.5533617482688, 150.0 } ,{ 188.5533617482688, 122.40622127177545 } ,{ -122.89327650346242, 122.40622127177545 } }, +points={{ 500.0, 150.0 } ,{ 173.6296438079537, 150.0 } ,{ 173.6296438079537, 135.7318076382513 } ,{ -152.7407123840926, 135.7318076382513 } }, thickness=0.05, -smooth=Smooth.None));annotation (Diagram(coordinateSystem(extent={{-237.95032328355612,-242.0345385542482},{680.0,250.0}})), Icon( - coordinateSystem(extent={{-237.95032328355612,-242.0345385542482},{680.0,250.0}}))); +smooth=Smooth.None));annotation (Diagram(coordinateSystem(extent={{-218.23918192749068,-325.0},{680.0,250.0}})), Icon( + coordinateSystem(extent={{-218.23918192749068,-325.0},{680.0,250.0}}))); annotation ( Documentation(info="Spaces

Spaces

Introduction

Introduction

nameschema_space_001
parameters
mSenFac1.0
AFlo100.0
hRoo2.5
linearizeRadiationtrue
m_flow_nominal0.01
T_start294.15
volume250.0
occupancy
nameoccupancy_11
parameters
emissions
nameparameters
system_007
nEle1
fraRad0.3
Q_flow_nominal2000.0
T_a_nominal363.15
T_b_nominal353.15
TAir_nominal293.15
TRad_nominal293.15
n1.9
deltaM0.01
from_dpfalse
dp_nominal0.0
linearizedfalse
VWat0.116
mDry52.6
system_008
R7.0
delta00.01
dpFixed_nominal6000.0
l0.0001
from_dptrue
linearizedfalse
deltaM0.02
m_flow_nominal0.01
dpValve_nominal6000.0
external_boundaries
namesurfaceazimuthtiltconstruction
externalwall_17100.0180.0wall
nameconstruction_001
externalwall_18100.0180.0wall
nameconstruction_001
externalwall_19200.0180.0wall
nameconstruction_001
internal_elements
namesurfaceazimuthtiltconstruction
internal_schema_space_001_schema_space_00210.010.0wall
nameinternal_wall
internal_schema_space_001_schema_space_00310.010.0wall
nameinternal_wall
nameschema_space_002
parameters
mSenFac1.0
AFlo100.0
hRoo2.5
linearizeRadiationtrue
m_flow_nominal0.01
T_start294.15
volume250.0
occupancy
nameoccupancy_12
parameters
emissions
nameparameters
system_009
nEle1
fraRad0.3
Q_flow_nominal2000.0
T_a_nominal363.15
T_b_nominal353.15
TAir_nominal293.15
TRad_nominal293.15
n1.9
deltaM0.01
from_dpfalse
dp_nominal0.0
linearizedfalse
VWat0.116
mDry52.6
system_010
R7.0
delta00.01
dpFixed_nominal6000.0
l0.0001
from_dptrue
linearizedfalse
deltaM0.02
m_flow_nominal0.01
dpValve_nominal6000.0
external_boundaries
namesurfaceazimuthtiltconstruction
externalwall_20100.0180.0wall
nameconstruction_001
externalwall_21100.0180.0wall
nameconstruction_001
externalwall_22200.0180.0wall
nameconstruction_001
internal_elements
namesurfaceazimuthtiltconstruction
internal_schema_space_001_schema_space_00210.010.0wall
nameinternal_wall
internal_schema_space_002_schema_space_00310.010.0wall
nameinternal_wall
nameschema_space_003
parameters
mSenFac1.0
AFlo100.0
hRoo2.5
linearizeRadiationtrue
m_flow_nominal0.01
T_start294.15
volume250.0
occupancy
nameoccupancy_13
parameters
emissions
nameparameters
system_011
nEle1
fraRad0.3
Q_flow_nominal2000.0
T_a_nominal363.15
T_b_nominal353.15
TAir_nominal293.15
TRad_nominal293.15
n1.9
deltaM0.01
from_dpfalse
dp_nominal0.0
linearizedfalse
VWat0.116
mDry52.6
system_012
R7.0
delta00.01
dpFixed_nominal6000.0
l0.0001
from_dptrue
linearizedfalse
deltaM0.02
m_flow_nominal0.01
dpValve_nominal6000.0
external_boundaries
namesurfaceazimuthtiltconstruction
externalwall_23100.0180.0wall
nameconstruction_001
externalwall_24100.0180.0wall
nameconstruction_001
externalwall_25200.0180.0wall
nameconstruction_001
internal_elements
namesurfaceazimuthtiltconstruction
internal_schema_space_001_schema_space_00310.010.0wall
nameinternal_wall
internal_schema_space_002_schema_space_00310.010.0wall
nameinternal_wall

Conclusions

Conclusions

Spaces

Introduction

Introduction

nameconstruction_001
layers
materialthickness
namematerial_001
k0.035
c1000.0
rho2000.0
epsLw0.85
epsSw0.65
0.1
namematerial_002
k0.035
c1000.0
rho2000.0
epsLw0.85
epsSw0.65
0.1
namematerial_003
k0.035
c1000.0
rho2000.0
epsLw0.85
epsSw0.65
0.1
nameinternal_wall
layers
materialthickness
namebrick
k0.89
c790.0
rho1920.0
epsLw0.85
epsSw0.65
0.2

Conclusions

Conclusions

Spaces

Introduction

Introduction

namesystem_001
parameters
scaFacRad1.5
dTBoi_nominal20
dTRad_nominal10
a{0.9}
effCurBuildings.Fluid.Types.EfficiencyCurves.Constant
T_nominal353.15
fueBuildings.Fluid.Data.Fuels.HeatingOilLowerHeatingValue()
Q_flow_nominal2000
dp_nominal5000
linearizeFlowResistancefalse
deltaM0.1
show_Tfalse
VTan0.2
hTan2
nSeg4
dIns0.002
dp(3000 + 2000)*{2,1}
nominal_mass_flow_rate_boiler0.03571428571428571
nominal_mass_flow_radiator_loop0.07142857142857142
V_flow0.03571428571428571/1000*{0.5,1}

Conclusions

Conclusions

")); end building; diff --git a/tests/house.json b/tests/house.json deleted file mode 100644 index 58f8ea5..0000000 --- a/tests/house.json +++ /dev/null @@ -1,363 +0,0 @@ -{ - "materials": [ - { - "id": "MATERIAL:001", - "thermal_conductivity": 0.035, - "specific_heat_capacity": 1000.0, - "density": 2000.0, - "longwave_emissivity": 0.85, - "shortwave_emissivity": 0.85 - }, - { - "id": "MATERIAL:002", - "thermal_conductivity": 0.035, - "specific_heat_capacity": 1000.0, - "density": 2000.0, - "longwave_emissivity": 0.85, - "shortwave_emissivity": 0.85 - }, - { - "id": "MATERIAL:003", - "thermal_conductivity": 0.035, - "specific_heat_capacity": 1000.0, - "density": 2000.0, - "longwave_emissivity": 0.85, - "shortwave_emissivity": 0.85 - } - ], - "constructions": [ - { - "id": "CONSTRUCTION:001", - "layers": [ - { - "material": "MATERIAL:001", - "thickness": 0.1 - }, - { - "material": "MATERIAL:002", - "thickness": 0.1 - }, - { - "material": "MATERIAL:003", - "thickness": 0.1 - } - ] - } - ], - "spaces": [ - { - "id": "schema:Space:001", - "external_boundaries": { - "external_walls": [ - { - "surface": 100.0, - "azimuth": 180.0, - "tilt": "wall", - "construction": "CONSTRUCTION:001" - }, - { - "surface": 100.0, - "azimuth": 180.0, - "tilt": "wall", - "construction": "CONSTRUCTION:001" - }, - { - "surface": 200.0, - "azimuth": 180.0, - "tilt": "wall", - "construction": "CONSTRUCTION:001" - } - ] - }, - "parameters": { - "sensible_thermal_mass_scaling_factor": 1.0, - "floor_area": 100.0, - "average_room_height": 2.5, - "nominal_mass_flow_rate": 0.01, - "temperature_initial": 294.15 - }, - "occupancy": { - "parameters": { - "occupancy": "3600*{7, 19}", - "gain": "[35; 70; 30]", - "heat_gain_if_occupied": "1/6/4" - } - }, - "emissions": [ - { - "radiator": { - "id": "SYSTEM:007", - "parameters": { - "number_of_elements_used_in_the_discretization": 1.0, - "fraction_radiant_heat_transfer": 0.3, - "nominal_heating_power_positive_for_heating": 2000.0, - "water_inlet_temperature_at_nominal_condition": 363.15, - "water_outlet_temperature_at_nominal_condition": 353.15, - "air_temperature_at_nominal_condition": 293.15, - "radiative_temperature_at_nominal_condition": 293.15, - "exponent_for_heat_transfer": 1.9, - "fraction_of_nominal_mass_flow_rate_where_transition_to_turbulent_occurs": 0.01, - "dp_nominal": 1000.0 - } - } - }, - { - "valve": { - "id": "SYSTEM:008", - "parameters": { - "rangeability": 7.0, - "range_of_significant_deviation_from_equal_percentage_law": 0.01, - "dp_fixed_nominal": 6000.0, - "valve_leakage": 0.0001, - "fraction_of_nominal_flow_rate_where_linearization_starts_if_y_1": 0.02, - "m_flow_nominal": 0.01, - "dp_valve_nominal": 6000.0 - }, - "control": { - "emission_control": { - "parameters": { - "k_coo_con": 0.0, - "ti_coo_con": 900.0, - "k_hea_con": 0.1, - "ti_hea_con": 900.0, - "tim_che": 30.0, - "dt_hys": 0.25, - "loo_hys": 0.01 - } - } - } - } - } - ] - }, - { - "id": "schema:Space:002", - "external_boundaries": { - "external_walls": [ - { - "surface": 100.0, - "azimuth": 180.0, - "tilt": "wall", - "construction": "CONSTRUCTION:001" - }, - { - "surface": 100.0, - "azimuth": 180.0, - "tilt": "wall", - "construction": "CONSTRUCTION:001" - }, - { - "surface": 200.0, - "azimuth": 180.0, - "tilt": "wall", - "construction": "CONSTRUCTION:001" - } - ] - }, - "parameters": { - "sensible_thermal_mass_scaling_factor": 1.0, - "floor_area": 100.0, - "average_room_height": 2.5, - "nominal_mass_flow_rate": 0.01, - "temperature_initial": 294.15 - }, - "occupancy": { - "parameters": { - "occupancy": "3600*{7, 19}", - "gain": "[35; 70; 30]", - "heat_gain_if_occupied": "1/6/4" - } - }, - "emissions": [ - { - "radiator": { - "id": "SYSTEM:009", - "parameters": { - "number_of_elements_used_in_the_discretization": 1.0, - "fraction_radiant_heat_transfer": 0.3, - "nominal_heating_power_positive_for_heating": 2000.0, - "water_inlet_temperature_at_nominal_condition": 363.15, - "water_outlet_temperature_at_nominal_condition": 353.15, - "air_temperature_at_nominal_condition": 293.15, - "radiative_temperature_at_nominal_condition": 293.15, - "exponent_for_heat_transfer": 1.9, - "fraction_of_nominal_mass_flow_rate_where_transition_to_turbulent_occurs": 0.01, - "dp_nominal": 1000.0 - } - } - }, - { - "valve": { - "id": "SYSTEM:010", - "parameters": { - "rangeability": 7.0, - "range_of_significant_deviation_from_equal_percentage_law": 0.01, - "dp_fixed_nominal": 6000.0, - "valve_leakage": 0.0001, - "fraction_of_nominal_flow_rate_where_linearization_starts_if_y_1": 0.02, - "m_flow_nominal": 0.01, - "dp_valve_nominal": 6000.0 - }, - "control": { - "emission_control": { - "parameters": { - "k_coo_con": 0.0, - "ti_coo_con": 900.0, - "k_hea_con": 0.1, - "ti_hea_con": 900.0, - "tim_che": 30.0, - "dt_hys": 0.25, - "loo_hys": 0.01 - } - } - } - } - } - ] - }, - { - "id": "schema:Space:003", - "external_boundaries": { - "external_walls": [ - { - "surface": 100.0, - "azimuth": 180.0, - "tilt": "wall", - "construction": "CONSTRUCTION:001" - }, - { - "surface": 100.0, - "azimuth": 180.0, - "tilt": "wall", - "construction": "CONSTRUCTION:001" - }, - { - "surface": 200.0, - "azimuth": 180.0, - "tilt": "wall", - "construction": "CONSTRUCTION:001" - } - ] - }, - "parameters": { - "sensible_thermal_mass_scaling_factor": 1.0, - "floor_area": 100.0, - "average_room_height": 2.5, - "nominal_mass_flow_rate": 0.01, - "temperature_initial": 294.15 - }, - "occupancy": { - "parameters": { - "occupancy": "3600*{7, 19}", - "gain": "[35; 70; 30]", - "heat_gain_if_occupied": "1/6/4" - } - }, - "emissions": [ - { - "radiator": { - "id": "SYSTEM:011", - "parameters": { - "number_of_elements_used_in_the_discretization": 1.0, - "fraction_radiant_heat_transfer": 0.3, - "nominal_heating_power_positive_for_heating": 2000.0, - "water_inlet_temperature_at_nominal_condition": 363.15, - "water_outlet_temperature_at_nominal_condition": 353.15, - "air_temperature_at_nominal_condition": 293.15, - "radiative_temperature_at_nominal_condition": 293.15, - "exponent_for_heat_transfer": 1.9, - "fraction_of_nominal_mass_flow_rate_where_transition_to_turbulent_occurs": 0.01, - "dp_nominal": 1000.0 - } - } - }, - { - "valve": { - "id": "SYSTEM:012", - "parameters": { - "rangeability": 7.0, - "range_of_significant_deviation_from_equal_percentage_law": 0.01, - "dp_fixed_nominal": 6000.0, - "valve_leakage": 0.0001, - "fraction_of_nominal_flow_rate_where_linearization_starts_if_y_1": 0.02, - "m_flow_nominal": 0.01, - "dp_valve_nominal": 6000.0 - }, - "control": { - "emission_control": { - "parameters": { - "k_coo_con": 0.0, - "ti_coo_con": 900.0, - "k_hea_con": 0.1, - "ti_hea_con": 900.0, - "tim_che": 30.0, - "dt_hys": 0.25, - "loo_hys": 0.01 - } - } - } - } - } - ] - } - ], - "systems": [ - { - "boiler": { - "id": "SYSTEM:001" - } - }, - { - "pump": { - "id": "SYSTEM:002", - "outlets": [ - "SYSTEM:004", - "SYSTEM:006" - ] - } - }, - { - "split_valve": { - "id": "SYSTEM:003", - "inlets": [ - "SYSTEM:008", - "SYSTEM:010" - ], - "outlets": [ - "SYSTEM:001" - ] - } - }, - { - "three_way_valve": { - "id": "SYSTEM:004", - "outlets": [ - "SYSTEM:007", - "SYSTEM:009", - "SYSTEM:003" - ] - } - }, - { - "split_valve": { - "id": "SYSTEM:005", - "inlets": [ - "SYSTEM:012" - ], - "outlets": [ - "SYSTEM:001" - ] - } - }, - { - "three_way_valve": { - "id": "SYSTEM:006", - "outlets": [ - "SYSTEM:011", - "SYSTEM:005" - ] - } - } - ], - "@type": "Building" -} diff --git a/tests/house.yaml b/tests/house.yaml index 36d3fa4..3b671e8 100644 --- a/tests/house.yaml +++ b/tests/house.yaml @@ -56,7 +56,7 @@ spaces: control: emission_control: parameters: - k_coo_con: 0.0 + k_coo_con: 1.0 - id: schema:Space:002 occupancy: parameters: @@ -91,7 +91,7 @@ spaces: control: emission_control: parameters: - k_coo_con: 0.0 + k_coo_con: 1.0 - id: schema:Space:003 occupancy: @@ -126,7 +126,7 @@ spaces: control: emission_control: parameters: - k_coo_con: 0.0 + k_coo_con: 1.0 systems: @@ -137,6 +137,8 @@ systems: outlets: - SYSTEM:004 - SYSTEM:006 + inlets: + - SYSTEM:001 - split_valve: id: SYSTEM:003 inlets: @@ -147,9 +149,13 @@ systems: - three_way_valve: id: SYSTEM:004 outlets: - - SYSTEM:007 - - SYSTEM:009 + - SYSTEM:013 - SYSTEM:003 + - temperature_sensor: + id: SYSTEM:013 + outlets: + - SYSTEM:009 + - SYSTEM:007 - split_valve: id: SYSTEM:005 inlets: @@ -159,5 +165,11 @@ systems: - three_way_valve: id: SYSTEM:006 outlets: - - SYSTEM:011 + - SYSTEM:014 - SYSTEM:005 + - temperature_sensor: + id: SYSTEM:014 + inlets: + - SYSTEM:006 + outlets: + - SYSTEM:011 diff --git a/tests/test_schema.py b/tests/test_schema.py index cf67f51..d6dbdde 100644 --- a/tests/test_schema.py +++ b/tests/test_schema.py @@ -7,8 +7,9 @@ import pytest from linkml.validator import validate_file -from tests.conftest import _read, clean_model -from trano.data_models.conversion import convert_model +from tests.conftest import _read, clean_model, is_success +from trano.data_models.conversion import convert_model, convert_network +from trano.simulate.simulate import SimulationOptions, simulate def convert( @@ -66,11 +67,12 @@ def test_convert_to_json_(schema: Path) -> None: assert convert(schema, "house.yaml", target) -def test_create_model() -> None: +def test_create_model(schema: Path) -> None: model_name = "house" - model_path = Path(__file__).parents[1].joinpath("tests", "house.json") - model_ = convert_model(model_name, model_path) - assert clean_model(model_, model_name) == set(_read(model_name)) + with tempfile.NamedTemporaryFile(suffix=".json") as temp: + assert convert(schema, "house.yaml", "json", Path(temp.name)) + model_ = convert_model(model_name, Path(temp.name)) + assert clean_model(model_, model_name) == set(_read(model_name)) def test_create_model_yaml() -> None: @@ -78,3 +80,16 @@ def test_create_model_yaml() -> None: model_path = Path(__file__).parents[1].joinpath("tests", "house.yaml") model_ = convert_model(model_name, model_path) assert clean_model(model_, model_name) == set(_read(model_name)) + + +def test_simulate_model_yaml() -> None: + model_name = "house_yaml" + model_path = Path(__file__).parents[1].joinpath("tests", "house.yaml") + network = convert_network(model_name, model_path) + with tempfile.TemporaryDirectory(ignore_cleanup_errors=True) as project_path: + results = simulate( + Path(project_path), + network, + options=SimulationOptions(end_time=3600), + ) + assert is_success(results) diff --git a/trano/data_models/conversion.py b/trano/data_models/conversion.py index e1410fa..97ff5b0 100644 --- a/trano/data_models/conversion.py +++ b/trano/data_models/conversion.py @@ -18,6 +18,7 @@ from trano.models.elements.radiator import Radiator from trano.models.elements.space import Space, SpaceParameter from trano.models.elements.split_valve import SplitValve +from trano.models.elements.temperature_sensor import TemperatureSensor from trano.models.elements.three_way_valve import ThreeWayValve from trano.models.elements.valve import Valve from trano.models.elements.weather import Weather @@ -25,7 +26,9 @@ # TODO: reduce complexity -def convert_model(name: str, model_path: Path) -> str: # noqa: PLR0912, PLR0915, C901 +def convert_network( # noqa: C901, PLR0912, PLR0915 + name: str, model_path: Path +) -> Network: network = Network(name=name) occupancy = None data = None @@ -105,11 +108,12 @@ def convert_model(name: str, model_path: Path) -> str: # noqa: PLR0912, PLR0915 systems[value["id"]] = boiler if system_type == "three_way_valve": system_counter.update([system_type]) + three_way_valve_control = ThreeWayValveControl( + name=f"{system_type}_control_{system_counter[system_type]}" + ) three_way_valve = ThreeWayValve( name=value["id"], - control=ThreeWayValveControl( - name=f"{system_type}_{system_counter[system_type]}" - ), + control=three_way_valve_control, ) systems[value["id"]] = three_way_valve if system_type == "pump": @@ -120,6 +124,9 @@ def convert_model(name: str, model_path: Path) -> str: # noqa: PLR0912, PLR0915 if system_type == "split_valve": split_valve = SplitValve(name=value["id"]) systems[value["id"]] = split_valve + if system_type == "temperature_sensor": + temperature_sensor = TemperatureSensor(name=value["id"]) + systems[value["id"]] = temperature_sensor for system in data["systems"]: for value in system.values(): edges += [ @@ -133,5 +140,9 @@ def convert_model(name: str, model_path: Path) -> str: # noqa: PLR0912, PLR0915 for edge in edges: network.connect_systems(*edge) - model = network.model() - return model + return network + + +def convert_model(name: str, model_path: Path) -> str: + network = convert_network(name, model_path) + return network.model() diff --git a/trano/data_models/trano.yaml b/trano/data_models/trano.yaml index abdd199..1563067 100644 --- a/trano/data_models/trano.yaml +++ b/trano/data_models/trano.yaml @@ -127,6 +127,7 @@ classes: - three_way_valve - boiler - pump + - temperature_sensor class_uri: schema:Systems Emission: @@ -175,6 +176,9 @@ classes: parameters: range: PumpParameters + TemperatureSensor: + is_a: System + EmissionControl: attributes: @@ -700,6 +704,10 @@ slots: range: ThreeWayValve multivalued: false inlined: true + temperature_sensor: + range: TemperatureSensor + multivalued: false + inlined: true split_valve: range: SplitValve diff --git a/trano/topology.py b/trano/topology.py index 2802487..c5ad37d 100644 --- a/trano/topology.py +++ b/trano/topology.py @@ -36,6 +36,8 @@ from trano.models.elements.pump import Pump from trano.models.elements.space import Space, _get_controllable_element from trano.models.elements.system import System, Ventilation +from trano.models.elements.temperature_sensor import TemperatureSensor +from trano.models.elements.three_way_valve import ThreeWayValve from trano.models.elements.valve import Valve from trano.models.elements.weather import Weather @@ -284,6 +286,17 @@ def connect_systems(self, system_1: System, system_2: System) -> None: self.add_node(system_2.control) self._system_controls.append(system_2.control) self.graph.add_edge(system_2, system_2.control) + if ( + isinstance(system_2, ThreeWayValve) + and isinstance(system_1, TemperatureSensor) + ) or ( + isinstance(system_1, ThreeWayValve) + and isinstance(system_2, TemperatureSensor) + ): + if system_2.control: + self.graph.add_edge(system_2.control, system_1) + if system_1.control: + self.graph.add_edge(system_1.control, system_2) self.graph.add_edge(system_1, system_2) self._assign_position(system_1, system_2) From efad3198be38593e7afce8155f678433c1703c73 Mon Sep 17 00:00:00 2001 From: aan Date: Thu, 8 Aug 2024 17:42:44 +0200 Subject: [PATCH 07/11] feat: Reduce complexity and add control from configuration. --- tests/data/house.mo | 182 ++++++++++++++++---------------- tests/data/house_yaml.mo | 176 +++++++++++++++--------------- tests/house.yaml | 12 +++ trano/data_models/conversion.py | 119 ++++++++++----------- trano/data_models/trano.yaml | 37 +++++++ 5 files changed, 285 insertions(+), 241 deletions(-) diff --git a/tests/data/house.mo b/tests/data/house.mo index bc3e9a0..f2b741a 100644 --- a/tests/data/house.mo +++ b/tests/data/house.mo @@ -596,7 +596,7 @@ equation connect(dataBus.OccupiedSchema_space_003, occSch2.occupied); end OccupancyOccupancy_13; - model CollectorControlPump_control + model CollectorControlControl_002 Buildings.Controls.OBC.CDL.Reals.PIDWithReset conPum( controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PI, k=1, @@ -634,8 +634,8 @@ connect(dataBus.yPumBoiSystem_002, mulMax.y); connect(dataBus.yHeaSystem_008, mulMax.u[1]); connect(dataBus.yHeaSystem_010, mulMax.u[2]); connect(dataBus.yHeaSystem_012, mulMax.u[3]); -end CollectorControlPump_control; - model ThreeWayValveControlThree_way_valve_control_1 +end CollectorControlControl_002; + model ThreeWayValveControlControl_003 Buildings.Controls.OBC.CDL.Reals.PIDWithReset conVal( controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PI, @@ -654,13 +654,13 @@ annotation (Placement(transformation(extent={{-138,-20},{-98,20}}))); Con annotation (Placement(transformation( extent={{-120,-18},{-80,22}}), iconTransformation(extent={{-120,62},{-78,98}}))); equation -connect(dataBus.TColSetThree_way_valve_control_1, conVal.u_s); -connect(dataBus.triggerThree_way_valve_control_1, conVal.trigger); +connect(dataBus.TColSetControl_003, conVal.u_s); +connect(dataBus.triggerControl_003, conVal.trigger); connect(conVal.y, y) annotation (Line(points={{10,0},{110,0}}, color={0,0,127})); connect(u, conVal.u_m) annotation (Line(points={{-118,0},{-22,0},{-22,-20},{0, -20},{0,-16},{-2,-16},{-2,-12}}, color={0,0,127}));annotation (Icon(coordinateSystem(preserveAspectRatio=false)), Diagram( - coordinateSystem(preserveAspectRatio=false)));end ThreeWayValveControlThree_way_valve_control_1; - model ThreeWayValveControlThree_way_valve_control_2 + coordinateSystem(preserveAspectRatio=false)));end ThreeWayValveControlControl_003; + model ThreeWayValveControlControl_004 Buildings.Controls.OBC.CDL.Reals.PIDWithReset conVal( controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PI, @@ -679,13 +679,13 @@ annotation (Placement(transformation(extent={{-138,-20},{-98,20}}))); Con annotation (Placement(transformation( extent={{-120,-18},{-80,22}}), iconTransformation(extent={{-120,62},{-78,98}}))); equation -connect(dataBus.TColSetThree_way_valve_control_2, conVal.u_s); -connect(dataBus.triggerThree_way_valve_control_2, conVal.trigger); +connect(dataBus.TColSetControl_004, conVal.u_s); +connect(dataBus.triggerControl_004, conVal.trigger); connect(conVal.y, y) annotation (Line(points={{10,0},{110,0}}, color={0,0,127})); connect(u, conVal.u_m) annotation (Line(points={{-118,0},{-22,0},{-22,-20},{0, -20},{0,-16},{-2,-16},{-2,-12}}, color={0,0,127}));annotation (Icon(coordinateSystem(preserveAspectRatio=false)), Diagram( - coordinateSystem(preserveAspectRatio=false)));end ThreeWayValveControlThree_way_valve_control_2; - model BoilerControlBoiler_control + coordinateSystem(preserveAspectRatio=false)));end ThreeWayValveControlControl_004; + model BoilerControlControl_001 extends house.Common.Controls.ventilation.PartialBoilerControl; Controls.BaseClasses.DataBus dataBus annotation (Placement(transformation( @@ -696,7 +696,7 @@ connect(dataBus.TStoBotSystem_001, greThr.u); connect(dataBus.TAirOutSystem_001, lesThrTOut.u); connect(dataBus.yBoiConSystem_001, booToReaBoi.y); connect(dataBus.yPumBoiSystem_001, booToReaPum.y); - end BoilerControlBoiler_control; + end BoilerControlControl_001; model DataServer replaceable package Medium = Modelica.Media.Interfaces.PartialMedium; @@ -716,28 +716,28 @@ iconTransformation(origin = {-2, -42}, extent = {{-110, -9}, {-90, 9}}))); Cont annotation (Placement(transformation( extent={{-120,-18},{-80,22}}), iconTransformation(extent={{-120,62},{-78,98}}))); Modelica.Blocks.Sources.RealExpression - TCooSetEmissioncontrol_8 + TCooSetEmissioncontrol_10 (y=298.15); Modelica.Blocks.Sources.RealExpression - TAirOutBoiler_control + TColSetControl_003 + (y=363.15); +Modelica.Blocks.Sources.RealExpression + TAirOutControl_001 (y=0.0); Modelica.Blocks.Sources.RealExpression TCooSetEmissioncontrol_9 (y=298.15); Modelica.Blocks.Sources.RealExpression - TColSetThree_way_valve_control_1 - (y=363.15); + TCooSetEmissioncontrol_8 + (y=298.15); Modelica.Blocks.Sources.RealExpression - TColSetThree_way_valve_control_2 + TColSetControl_004 (y=363.15); -Modelica.Blocks.Sources.RealExpression - TCooSetEmissioncontrol_10 - (y=298.15); Modelica.Blocks.Sources.BooleanExpression - triggerThree_way_valve_control_2 + triggerControl_004 (y=true); Modelica.Blocks.Sources.BooleanExpression - triggerThree_way_valve_control_1 + triggerControl_003 (y=true); equation connect(port[1],TRoo[1]. port); @@ -752,22 +752,22 @@ connect(dataBus.TZonSchema_space_003, TRoo[3].T); connect(dataBus.ppmCO2Schema_space_001, TRoo1[1].ppm); connect(dataBus.ppmCO2Schema_space_002, TRoo1[2].ppm); connect(dataBus.ppmCO2Schema_space_003, TRoo1[3].ppm); -connect(dataBus.TCooSetSchema_space_001, -TCooSetEmissioncontrol_8.y); +connect(dataBus.TCooSetSchema_space_003, +TCooSetEmissioncontrol_10.y); +connect(dataBus.TColSetControl_003, +TColSetControl_003.y); connect(dataBus.TAirOutSystem_001, -TAirOutBoiler_control.y); +TAirOutControl_001.y); connect(dataBus.TCooSetSchema_space_002, TCooSetEmissioncontrol_9.y); -connect(dataBus.TColSetThree_way_valve_control_1, -TColSetThree_way_valve_control_1.y); -connect(dataBus.TColSetThree_way_valve_control_2, -TColSetThree_way_valve_control_2.y); -connect(dataBus.TCooSetSchema_space_003, -TCooSetEmissioncontrol_10.y); -connect(dataBus.triggerThree_way_valve_control_2, -triggerThree_way_valve_control_2.y); -connect(dataBus.triggerThree_way_valve_control_1, -triggerThree_way_valve_control_1.y); +connect(dataBus.TCooSetSchema_space_001, +TCooSetEmissioncontrol_8.y); +connect(dataBus.TColSetControl_004, +TColSetControl_004.y); +connect(dataBus.triggerControl_004, +triggerControl_004.y); +connect(dataBus.triggerControl_003, +triggerControl_003.y); end DataServer; @@ -2395,7 +2395,7 @@ Controls.BaseClasses.DataBus dataBus equation connect(dataBus.ySystem_002, pumRad.y); connect(dataBus.y_gainSystem_002, gain.y); -connect(dataBus.TPump_control, temSup.T); +connect(dataBus.TControl_002, temSup.T); end PumpSystem_002; @@ -2627,7 +2627,7 @@ parameter Integer nRoo = 2 "Number of rooms"; ))); house.Common.Controls.ventilation.EmissionControlEmissioncontrol_8 emissioncontrol_8 annotation ( - Placement(transformation(origin = { -191.87336630414592, 28.514829986510875 }, + Placement(transformation(origin = { 119.46323115268068, 151.41102925541978 }, extent = {{-10, -10}, {10, 10}} ))); house.Common.Controls.ventilation.OccupancyOccupancy_11 @@ -2703,7 +2703,7 @@ parameter Integer nRoo = 2 "Number of rooms"; ))); house.Common.Controls.ventilation.EmissionControlEmissioncontrol_9 emissioncontrol_9 annotation ( - Placement(transformation(origin = { -112.16472713646796, 154.2722666969942 }, + Placement(transformation(origin = { 195.74270524451885, 29.62828612681646 }, extent = {{-10, -10}, {10, 10}} ))); house.Common.Controls.ventilation.OccupancyOccupancy_12 @@ -2779,7 +2779,7 @@ parameter Integer nRoo = 2 "Number of rooms"; ))); house.Common.Controls.ventilation.EmissionControlEmissioncontrol_10 emissioncontrol_10 annotation ( - Placement(transformation(origin = { 157.67183992469273, 77.1376029845984 }, + Placement(transformation(origin = { -194.59850168709363, 48.72497338678082 }, extent = {{-10, -10}, {10, 10}} ))); house.Common.Controls.ventilation.OccupancyOccupancy_13 @@ -2833,12 +2833,12 @@ parameter Integer nRoo = 2 "Number of rooms"; redeclare package Medium = MediumW ) annotation ( - Placement(transformation(origin = { 144.6037620695326, -142.56379068560165 }, + Placement(transformation(origin = { -158.6637903794453, -94.80867344416055 }, extent = {{-10, -10}, {10, 10}} ))); - house.Common.Controls.ventilation.CollectorControlPump_control - pump_control annotation ( - Placement(transformation(origin = { -156.2885229098753, -94.20984165824021 }, + house.Common.Controls.ventilation.CollectorControlControl_002 + control_002 annotation ( + Placement(transformation(origin = { -180.9436326393925, -44.17414569234961 }, extent = {{-10, -10}, {10, 10}} ))); Buildings.Fluid.Actuators.Valves.ThreeWayEqualPercentageLinear @@ -2860,8 +2860,8 @@ parameter Integer nRoo = 2 "Number of rooms"; extent = {{-10, -10}, {10, 10}} ))); house.Common.Controls.ventilation. - ThreeWayValveControlThree_way_valve_control_1 - three_way_valve_control_1 annotation ( + ThreeWayValveControlControl_003 + control_003 annotation ( Placement(transformation(origin = { -20, -275 }, extent = {{-10, -10}, {10, 10}} ))); @@ -2884,8 +2884,8 @@ parameter Integer nRoo = 2 "Number of rooms"; extent = {{-10, -10}, {10, 10}} ))); house.Common.Controls.ventilation. - ThreeWayValveControlThree_way_valve_control_2 - three_way_valve_control_2 annotation ( + ThreeWayValveControlControl_004 + control_004 annotation ( Placement(transformation(origin = { 480, -125 }, extent = {{-10, -10}, {10, 10}} ))); @@ -2910,15 +2910,15 @@ BoilerWithStorageSystem_001 system_001( V_flow=0.03571428571428571/1000*{0.5,1} , redeclare package MediumW = MediumW) "Boiler" annotation ( - Placement(transformation(origin = { 181.39128496522164, 106.7438790626681 }, + Placement(transformation(origin = { 188.39201522753748, -0.335905389162841 }, extent = {{-10, -10}, {10, 10}} ))); - house.Common.Controls.ventilation.BoilerControlBoiler_control - boiler_control( TSup_nominal=353.15, + house.Common.Controls.ventilation.BoilerControlControl_001 + control_001( TSup_nominal=353.15, threshold_outdoor_air_cutoff=288.15, threshold_to_switch_off_boiler=288.15 ) annotation ( - Placement(transformation(origin = { -186.79273286424512, -67.99391324994959 }, + Placement(transformation(origin = { 98.08666480556177, 188.9191245938689 }, extent = {{-10, -10}, {10, 10}} ))); Buildings.Fluid.FixedResistances.Junction system_003 ( @@ -2960,7 +2960,7 @@ redeclare package MediumW = MediumW) "Boiler" annotation ( house.Common.Controls.ventilation.DataServer data_bus (redeclare package Medium = Medium) annotation ( - Placement(transformation(origin = { -173.962761682544, 53.96716762020198 }, + Placement(transformation(origin = { 112.28634122403349, -141.22941384514843 }, extent = {{-10, -10}, {10, 10}} ))); @@ -3001,7 +3001,7 @@ color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_008.y,emissioncontrol_8.y) annotation (Line( -points={{ 30.0, -75.0 } ,{ -80.93668315207296, -75.0 } ,{ -80.93668315207296, 28.514829986510875 } ,{ -191.87336630414592, 28.514829986510875 } }, +points={{ 30.0, -75.0 } ,{ 74.73161557634035, -75.0 } ,{ 74.73161557634035, 151.41102925541978 } ,{ 119.46323115268068, 151.41102925541978 } }, color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_008.port_b,system_003.port_1) @@ -3045,7 +3045,7 @@ color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_010.y,emissioncontrol_9.y) annotation (Line( -points={{ 280.0, 75.0 } ,{ 83.91763643176603, 75.0 } ,{ 83.91763643176601, 154.2722666969942 } ,{ -112.16472713646796, 154.2722666969942 } }, +points={{ 280.0, 75.0 } ,{ 237.87135262225942, 75.0 } ,{ 237.87135262225942, 29.62828612681646 } ,{ 195.74270524451885, 29.62828612681646 } }, color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_010.port_b,system_003.port_1) @@ -3089,7 +3089,7 @@ color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_012.y,emissioncontrol_10.y) annotation (Line( -points={{ 530.0, 75.0 } ,{ 343.83591996234634, 75.0 } ,{ 343.83591996234634, 77.1376029845984 } ,{ 157.67183992469273, 77.1376029845984 } }, +points={{ 530.0, 75.0 } ,{ 167.70074915645318, 75.0 } ,{ 167.70074915645318, 48.72497338678082 } ,{ -194.59850168709363, 48.72497338678082 } }, color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_012.port_b,system_005.port_1) @@ -3097,22 +3097,22 @@ annotation (Line( points={{ 530.0, 75.0 } ,{ 580.0, 75.0 } ,{ 580.0, -25.0 } ,{ 630.0, -25.0 } }, color={255,204,51}, thickness=0.5, -smooth=Smooth.None)); connect(system_002.dataBus,pump_control.dataBus) +smooth=Smooth.None)); connect(system_002.dataBus,control_002.dataBus) annotation (Line( -points={{ 144.6037620695326, -142.56379068560165 } ,{ -5.8423804201713665, -142.56379068560165 } ,{ -5.842380420171338, -94.20984165824021 } ,{ -156.2885229098753, -94.20984165824021 } }, +points={{ -158.6637903794453, -94.80867344416055 } ,{ -169.8037115094189, -94.80867344416055 } ,{ -169.8037115094189, -44.17414569234961 } ,{ -180.9436326393925, -44.17414569234961 } }, color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_002.port_b,system_004.port_1) annotation (Line( -points={{ 144.6037620695326, -142.56379068560165 } ,{ 87.3018810347663, -142.56379068560165 } ,{ 87.3018810347663, -275.0 } ,{ 30.0, -275.0 } }, +points={{ -158.6637903794453, -94.80867344416055 } ,{ -64.33189518972264, -94.80867344416055 } ,{ -64.33189518972264, -275.0 } ,{ 30.0, -275.0 } }, color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_002.port_b,system_006.port_1) annotation (Line( -points={{ 144.6037620695326, -142.56379068560165 } ,{ 337.3018810347663, -142.56379068560165 } ,{ 337.3018810347663, -125.0 } ,{ 530.0, -125.0 } }, +points={{ -158.6637903794453, -94.80867344416055 } ,{ 185.66810481027738, -94.80867344416055 } ,{ 185.66810481027733, -125.0 } ,{ 530.0, -125.0 } }, color={255,204,51}, thickness=0.5, -smooth=Smooth.None)); connect(system_004.y,three_way_valve_control_1.y) +smooth=Smooth.None)); connect(system_004.y,control_003.y) annotation (Line( points={{ 30.0, -275.0 } ,{ 5.0, -275.0 } ,{ 5.0, -275.0 } ,{ -20.0, -275.0 } }, color={255,204,51}, @@ -3127,12 +3127,12 @@ annotation (Line( points={{ 30.0, -275.0 } ,{ 80.0, -275.0 } ,{ 80.0, -175.0 } ,{ 130.0, -175.0 } }, color={255,204,51}, thickness=0.5, -smooth=Smooth.None)); connect(three_way_valve_control_1.u,system_013.T) +smooth=Smooth.None)); connect(control_003.u,system_013.T) annotation (Line( points={{ -20.0, -275.0 } ,{ 65.0, -275.0 } ,{ 65.0, -25.0 } ,{ 150.0, -25.0 } }, color={255,204,51}, thickness=0.5, -smooth=Smooth.None)); connect(system_006.y,three_way_valve_control_2.y) +smooth=Smooth.None)); connect(system_006.y,control_004.y) annotation (Line( points={{ 530.0, -125.0 } ,{ 505.0, -125.0 } ,{ 505.0, -125.0 } ,{ 480.0, -125.0 } }, color={255,204,51}, @@ -3147,24 +3147,24 @@ annotation (Line( points={{ 530.0, -125.0 } ,{ 580.0, -125.0 } ,{ 580.0, -25.0 } ,{ 630.0, -25.0 } }, color={255,204,51}, thickness=0.5, -smooth=Smooth.None)); connect(three_way_valve_control_2.u,system_014.T) +smooth=Smooth.None)); connect(control_004.u,system_014.T) annotation (Line( points={{ 480.0, -125.0 } ,{ 440.0, -125.0 } ,{ 440.0, -25.0 } ,{ 400.0, -25.0 } }, color={255,204,51}, thickness=0.5, -smooth=Smooth.None)); connect(system_001.dataBus,boiler_control.dataBus) +smooth=Smooth.None)); connect(system_001.dataBus,control_001.dataBus) annotation (Line( -points={{ 181.39128496522164, 106.7438790626681 } ,{ -2.7007239495117403, 106.7438790626681 } ,{ -2.7007239495117403, -67.99391324994959 } ,{ -186.79273286424512, -67.99391324994959 } }, +points={{ 188.39201522753748, -0.335905389162841 } ,{ 143.23934001654962, -0.335905389162841 } ,{ 143.23934001654962, 188.9191245938689 } ,{ 98.08666480556177, 188.9191245938689 } }, color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_001.port_b,system_002.port_a) annotation (Line( -points={{ 181.39128496522164, 106.7438790626681 } ,{ 162.99752351737712, 106.7438790626681 } ,{ 162.99752351737712, -142.56379068560165 } ,{ 144.6037620695326, -142.56379068560165 } }, +points={{ 188.39201522753748, -0.335905389162841 } ,{ 14.864112424046112, -0.335905389162841 } ,{ 14.864112424046084, -94.80867344416055 } ,{ -158.6637903794453, -94.80867344416055 } }, color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_003.port_2,system_001.port_a) annotation (Line( -points={{ 130.0, -175.0 } ,{ 155.69564248261082, -175.0 } ,{ 155.69564248261082, 106.7438790626681 } ,{ 181.39128496522164, 106.7438790626681 } }, +points={{ 130.0, -175.0 } ,{ 159.19600761376876, -175.0 } ,{ 159.19600761376876, -0.335905389162841 } ,{ 188.39201522753748, -0.335905389162841 } }, color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_013.port_b,system_009.port_a) @@ -3179,7 +3179,7 @@ color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_005.port_2,system_001.port_a) annotation (Line( -points={{ 630.0, -25.0 } ,{ 405.6956424826108, -25.0 } ,{ 405.6956424826108, 106.7438790626681 } ,{ 181.39128496522164, 106.7438790626681 } }, +points={{ 630.0, -25.0 } ,{ 409.19600761376876, -25.0 } ,{ 409.19600761376876, -0.335905389162841 } ,{ 188.39201522753748, -0.335905389162841 } }, color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_014.port_b,system_011.port_a) @@ -3189,72 +3189,72 @@ color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(emissioncontrol_8.dataBus,data_bus.dataBus) annotation (Line( -points={{ -191.87336630414592, 28.514829986510875 } ,{ -182.91806399334496, 28.514829986510875 } ,{ -182.91806399334496, 53.96716762020198 } ,{ -173.962761682544, 53.96716762020198 } }, +points={{ 119.46323115268068, 151.41102925541978 } ,{ 115.87478618835709, 151.41102925541978 } ,{ 115.87478618835709, -141.22941384514843 } ,{ 112.28634122403349, -141.22941384514843 } }, thickness=0.05, smooth=Smooth.None)); connect(occupancy_11.dataBus,data_bus.dataBus) annotation (Line( -points={{ -50.0, 0.0 } ,{ -111.981380841272, 0.0 } ,{ -111.981380841272, 53.96716762020198 } ,{ -173.962761682544, 53.96716762020198 } }, +points={{ -50.0, 0.0 } ,{ 31.143170612016746, 0.0 } ,{ 31.143170612016746, -141.22941384514843 } ,{ 112.28634122403349, -141.22941384514843 } }, thickness=0.05, smooth=Smooth.None)); connect(emissioncontrol_9.dataBus,data_bus.dataBus) annotation (Line( -points={{ -112.16472713646796, 154.2722666969942 } ,{ -143.06374440950597, 154.2722666969942 } ,{ -143.06374440950597, 53.96716762020198 } ,{ -173.962761682544, 53.96716762020198 } }, +points={{ 195.74270524451885, 29.62828612681646 } ,{ 154.01452323427617, 29.62828612681646 } ,{ 154.01452323427617, -141.22941384514843 } ,{ 112.28634122403349, -141.22941384514843 } }, thickness=0.05, smooth=Smooth.None)); connect(occupancy_12.dataBus,data_bus.dataBus) annotation (Line( -points={{ 200.0, 150.0 } ,{ 13.018619158728, 150.0 } ,{ 13.018619158728, 53.96716762020198 } ,{ -173.962761682544, 53.96716762020198 } }, +points={{ 200.0, 150.0 } ,{ 156.14317061201675, 150.0 } ,{ 156.14317061201675, -141.22941384514843 } ,{ 112.28634122403349, -141.22941384514843 } }, thickness=0.05, smooth=Smooth.None)); connect(emissioncontrol_10.dataBus,data_bus.dataBus) annotation (Line( -points={{ 157.67183992469273, 77.1376029845984 } ,{ -8.145460878925633, 77.1376029845984 } ,{ -8.145460878925633, 53.96716762020198 } ,{ -173.962761682544, 53.96716762020198 } }, +points={{ -194.59850168709363, 48.72497338678082 } ,{ -41.15608023153007, 48.72497338678082 } ,{ -41.15608023153007, -141.22941384514843 } ,{ 112.28634122403349, -141.22941384514843 } }, thickness=0.05, smooth=Smooth.None)); connect(occupancy_13.dataBus,data_bus.dataBus) annotation (Line( -points={{ 450.0, 150.0 } ,{ 138.01861915872803, 150.0 } ,{ 138.01861915872797, 53.96716762020198 } ,{ -173.962761682544, 53.96716762020198 } }, +points={{ 450.0, 150.0 } ,{ 281.1431706120168, 150.0 } ,{ 281.1431706120168, -141.22941384514843 } ,{ 112.28634122403349, -141.22941384514843 } }, thickness=0.05, -smooth=Smooth.None)); connect(pump_control.dataBus,data_bus.dataBus) +smooth=Smooth.None)); connect(control_002.dataBus,data_bus.dataBus) annotation (Line( -points={{ -156.2885229098753, -94.20984165824021 } ,{ -165.12564229620966, -94.20984165824021 } ,{ -165.12564229620966, 53.96716762020198 } ,{ -173.962761682544, 53.96716762020198 } }, +points={{ -180.9436326393925, -44.17414569234961 } ,{ -34.3286457076795, -44.17414569234961 } ,{ -34.3286457076795, -141.22941384514843 } ,{ 112.28634122403349, -141.22941384514843 } }, thickness=0.05, -smooth=Smooth.None)); connect(three_way_valve_control_1.dataBus,data_bus.dataBus) +smooth=Smooth.None)); connect(control_003.dataBus,data_bus.dataBus) annotation (Line( -points={{ -20.0, -275.0 } ,{ -96.981380841272, -275.0 } ,{ -96.981380841272, 53.96716762020198 } ,{ -173.962761682544, 53.96716762020198 } }, +points={{ -20.0, -275.0 } ,{ 46.143170612016746, -275.0 } ,{ 46.143170612016746, -141.22941384514843 } ,{ 112.28634122403349, -141.22941384514843 } }, thickness=0.05, -smooth=Smooth.None)); connect(three_way_valve_control_2.dataBus,data_bus.dataBus) +smooth=Smooth.None)); connect(control_004.dataBus,data_bus.dataBus) annotation (Line( -points={{ 480.0, -125.0 } ,{ 153.01861915872803, -125.0 } ,{ 153.01861915872797, 53.96716762020198 } ,{ -173.962761682544, 53.96716762020198 } }, +points={{ 480.0, -125.0 } ,{ 296.1431706120168, -125.0 } ,{ 296.1431706120168, -141.22941384514843 } ,{ 112.28634122403349, -141.22941384514843 } }, thickness=0.05, -smooth=Smooth.None)); connect(boiler_control.dataBus,data_bus.dataBus) +smooth=Smooth.None)); connect(control_001.dataBus,data_bus.dataBus) annotation (Line( -points={{ -186.79273286424512, -67.99391324994959 } ,{ -180.37774727339456, -67.99391324994959 } ,{ -180.37774727339456, 53.96716762020198 } ,{ -173.962761682544, 53.96716762020198 } }, +points={{ 98.08666480556177, 188.9191245938689 } ,{ 105.18650301479764, 188.9191245938689 } ,{ 105.18650301479764, -141.22941384514843 } ,{ 112.28634122403349, -141.22941384514843 } }, thickness=0.05, smooth=Smooth.None)); connect(schema_space_001.heaPorAir,data_bus.port[1]) annotation (Line( -points={{ 0.0, 0.0 } ,{ -86.981380841272, 0.0 } ,{ -86.981380841272, 53.96716762020198 } ,{ -173.962761682544, 53.96716762020198 } }, +points={{ 0.0, 0.0 } ,{ 56.143170612016746, 0.0 } ,{ 56.143170612016746, -141.22941384514843 } ,{ 112.28634122403349, -141.22941384514843 } }, thickness=0.05, smooth=Smooth.None)); connect(schema_space_001.ports[1],data_bus.port_a[1]) annotation (Line( -points={{ 0.0, 0.0 } ,{ -86.981380841272, 0.0 } ,{ -86.981380841272, 53.96716762020198 } ,{ -173.962761682544, 53.96716762020198 } }, +points={{ 0.0, 0.0 } ,{ 56.143170612016746, 0.0 } ,{ 56.143170612016746, -141.22941384514843 } ,{ 112.28634122403349, -141.22941384514843 } }, thickness=0.05, smooth=Smooth.None)); connect(schema_space_002.heaPorAir,data_bus.port[2]) annotation (Line( -points={{ 250.0, 150.0 } ,{ 38.018619158728, 150.0 } ,{ 38.018619158728, 53.96716762020198 } ,{ -173.962761682544, 53.96716762020198 } }, +points={{ 250.0, 150.0 } ,{ 181.14317061201675, 150.0 } ,{ 181.14317061201675, -141.22941384514843 } ,{ 112.28634122403349, -141.22941384514843 } }, thickness=0.05, smooth=Smooth.None)); connect(schema_space_002.ports[1],data_bus.port_a[2]) annotation (Line( -points={{ 250.0, 150.0 } ,{ 38.018619158728, 150.0 } ,{ 38.018619158728, 53.96716762020198 } ,{ -173.962761682544, 53.96716762020198 } }, +points={{ 250.0, 150.0 } ,{ 181.14317061201675, 150.0 } ,{ 181.14317061201675, -141.22941384514843 } ,{ 112.28634122403349, -141.22941384514843 } }, thickness=0.05, smooth=Smooth.None)); connect(schema_space_003.heaPorAir,data_bus.port[3]) annotation (Line( -points={{ 500.0, 150.0 } ,{ 163.01861915872803, 150.0 } ,{ 163.01861915872797, 53.96716762020198 } ,{ -173.962761682544, 53.96716762020198 } }, +points={{ 500.0, 150.0 } ,{ 306.1431706120168, 150.0 } ,{ 306.1431706120168, -141.22941384514843 } ,{ 112.28634122403349, -141.22941384514843 } }, thickness=0.05, smooth=Smooth.None)); connect(schema_space_003.ports[1],data_bus.port_a[3]) annotation (Line( -points={{ 500.0, 150.0 } ,{ 163.01861915872803, 150.0 } ,{ 163.01861915872797, 53.96716762020198 } ,{ -173.962761682544, 53.96716762020198 } }, +points={{ 500.0, 150.0 } ,{ 306.1431706120168, 150.0 } ,{ 306.1431706120168, -141.22941384514843 } ,{ 112.28634122403349, -141.22941384514843 } }, thickness=0.05, -smooth=Smooth.None));annotation (Diagram(coordinateSystem(extent={{-241.87336630414592,-325.0},{680.0,250.0}})), Icon( - coordinateSystem(extent={{-241.87336630414592,-325.0},{680.0,250.0}}))); +smooth=Smooth.None));annotation (Diagram(coordinateSystem(extent={{-250.0,-325.0},{680.0,250.0}})), Icon( + coordinateSystem(extent={{-250.0,-325.0},{680.0,250.0}}))); annotation ( - Documentation(info="Spaces

Spaces

Introduction

Introduction

nameschema_space_001
parameters
mSenFac1.0
AFlo100.0
hRoo2.5
linearizeRadiationtrue
m_flow_nominal0.01
T_start294.15
volume250.0
occupancy
nameoccupancy_11
parameters
emissions
nameparameters
system_007
nEle1
fraRad0.3
Q_flow_nominal2000.0
T_a_nominal363.15
T_b_nominal353.15
TAir_nominal293.15
TRad_nominal293.15
n1.9
deltaM0.01
from_dpfalse
dp_nominal1000.0
linearizedfalse
VWat0.116
mDry52.6
system_008
R7.0
delta00.01
dpFixed_nominal6000.0
l0.0001
from_dptrue
linearizedfalse
deltaM0.02
m_flow_nominal0.01
dpValve_nominal6000.0
external_boundaries
namesurfaceazimuthtiltconstruction
externalwall_17100.0180.0wall
nameconstruction_001
externalwall_18100.0180.0wall
nameconstruction_001
externalwall_19200.0180.0wall
nameconstruction_001
internal_elements
namesurfaceazimuthtiltconstruction
internal_schema_space_001_schema_space_00210.010.0wall
nameinternal_wall
internal_schema_space_001_schema_space_00310.010.0wall
nameinternal_wall
nameschema_space_002
parameters
mSenFac1.0
AFlo100.0
hRoo2.5
linearizeRadiationtrue
m_flow_nominal0.01
T_start294.15
volume250.0
occupancy
nameoccupancy_12
parameters
emissions
nameparameters
system_009
nEle1
fraRad0.3
Q_flow_nominal2000.0
T_a_nominal363.15
T_b_nominal353.15
TAir_nominal293.15
TRad_nominal293.15
n1.9
deltaM0.01
from_dpfalse
dp_nominal1000.0
linearizedfalse
VWat0.116
mDry52.6
system_010
R7.0
delta00.01
dpFixed_nominal6000.0
l0.0001
from_dptrue
linearizedfalse
deltaM0.02
m_flow_nominal0.01
dpValve_nominal6000.0
external_boundaries
namesurfaceazimuthtiltconstruction
externalwall_20100.0180.0wall
nameconstruction_001
externalwall_21100.0180.0wall
nameconstruction_001
externalwall_22200.0180.0wall
nameconstruction_001
internal_elements
namesurfaceazimuthtiltconstruction
internal_schema_space_001_schema_space_00210.010.0wall
nameinternal_wall
internal_schema_space_002_schema_space_00310.010.0wall
nameinternal_wall
nameschema_space_003
parameters
mSenFac1.0
AFlo100.0
hRoo2.5
linearizeRadiationtrue
m_flow_nominal0.01
T_start294.15
volume250.0
occupancy
nameoccupancy_13
parameters
emissions
nameparameters
system_011
nEle1
fraRad0.3
Q_flow_nominal2000.0
T_a_nominal363.15
T_b_nominal353.15
TAir_nominal293.15
TRad_nominal293.15
n1.9
deltaM0.01
from_dpfalse
dp_nominal1000.0
linearizedfalse
VWat0.116
mDry52.6
system_012
R7.0
delta00.01
dpFixed_nominal6000.0
l0.0001
from_dptrue
linearizedfalse
deltaM0.02
m_flow_nominal0.01
dpValve_nominal6000.0
external_boundaries
namesurfaceazimuthtiltconstruction
externalwall_23100.0180.0wall
nameconstruction_001
externalwall_24100.0180.0wall
nameconstruction_001
externalwall_25200.0180.0wall
nameconstruction_001
internal_elements
namesurfaceazimuthtiltconstruction
internal_schema_space_001_schema_space_00310.010.0wall
nameinternal_wall
internal_schema_space_002_schema_space_00310.010.0wall
nameinternal_wall

Conclusions

Conclusions

Spaces

Introduction

Introduction

nameinternal_wall
layers
materialthickness
namebrick
k0.89
c790.0
rho1920.0
epsLw0.85
epsSw0.65
0.2
nameconstruction_001
layers
materialthickness
namematerial_001
k0.035
c1000.0
rho2000.0
epsLw0.85
epsSw0.85
0.1
namematerial_002
k0.035
c1000.0
rho2000.0
epsLw0.85
epsSw0.85
0.1
namematerial_003
k0.035
c1000.0
rho2000.0
epsLw0.85
epsSw0.85
0.1

Conclusions

Conclusions

Spaces

Introduction

Introduction

namesystem_001
parameters
scaFacRad1.5
dTBoi_nominal20
dTRad_nominal10
a{0.9}
effCurBuildings.Fluid.Types.EfficiencyCurves.Constant
T_nominal353.15
fueBuildings.Fluid.Data.Fuels.HeatingOilLowerHeatingValue()
Q_flow_nominal2000
dp_nominal5000
linearizeFlowResistancefalse
deltaM0.1
show_Tfalse
VTan0.2
hTan2
nSeg4
dIns0.002
dp(3000 + 2000)*{2,1}
nominal_mass_flow_rate_boiler0.03571428571428571
nominal_mass_flow_radiator_loop0.07142857142857142
V_flow0.03571428571428571/1000*{0.5,1}

Conclusions

Conclusions

")); + Documentation(info="Spaces

Spaces

Introduction

Introduction

nameschema_space_001
parameters
mSenFac1.0
AFlo100.0
hRoo2.5
linearizeRadiationtrue
m_flow_nominal0.01
T_start294.15
volume250.0
occupancy
nameoccupancy_11
parameters
emissions
nameparameters
system_007
nEle1
fraRad0.3
Q_flow_nominal2000.0
T_a_nominal363.15
T_b_nominal353.15
TAir_nominal293.15
TRad_nominal293.15
n1.9
deltaM0.01
from_dpfalse
dp_nominal1000.0
linearizedfalse
VWat0.116
mDry52.6
system_008
R7.0
delta00.01
dpFixed_nominal6000.0
l0.0001
from_dptrue
linearizedfalse
deltaM0.02
m_flow_nominal0.01
dpValve_nominal6000.0
external_boundaries
namesurfaceazimuthtiltconstruction
externalwall_17100.0180.0wall
nameconstruction_001
externalwall_18100.0180.0wall
nameconstruction_001
externalwall_19200.0180.0wall
nameconstruction_001
internal_elements
namesurfaceazimuthtiltconstruction
internal_schema_space_001_schema_space_00210.010.0wall
nameinternal_wall
internal_schema_space_001_schema_space_00310.010.0wall
nameinternal_wall
nameschema_space_002
parameters
mSenFac1.0
AFlo100.0
hRoo2.5
linearizeRadiationtrue
m_flow_nominal0.01
T_start294.15
volume250.0
occupancy
nameoccupancy_12
parameters
emissions
nameparameters
system_009
nEle1
fraRad0.3
Q_flow_nominal2000.0
T_a_nominal363.15
T_b_nominal353.15
TAir_nominal293.15
TRad_nominal293.15
n1.9
deltaM0.01
from_dpfalse
dp_nominal1000.0
linearizedfalse
VWat0.116
mDry52.6
system_010
R7.0
delta00.01
dpFixed_nominal6000.0
l0.0001
from_dptrue
linearizedfalse
deltaM0.02
m_flow_nominal0.01
dpValve_nominal6000.0
external_boundaries
namesurfaceazimuthtiltconstruction
externalwall_20100.0180.0wall
nameconstruction_001
externalwall_21100.0180.0wall
nameconstruction_001
externalwall_22200.0180.0wall
nameconstruction_001
internal_elements
namesurfaceazimuthtiltconstruction
internal_schema_space_001_schema_space_00210.010.0wall
nameinternal_wall
internal_schema_space_002_schema_space_00310.010.0wall
nameinternal_wall
nameschema_space_003
parameters
mSenFac1.0
AFlo100.0
hRoo2.5
linearizeRadiationtrue
m_flow_nominal0.01
T_start294.15
volume250.0
occupancy
nameoccupancy_13
parameters
emissions
nameparameters
system_011
nEle1
fraRad0.3
Q_flow_nominal2000.0
T_a_nominal363.15
T_b_nominal353.15
TAir_nominal293.15
TRad_nominal293.15
n1.9
deltaM0.01
from_dpfalse
dp_nominal1000.0
linearizedfalse
VWat0.116
mDry52.6
system_012
R7.0
delta00.01
dpFixed_nominal6000.0
l0.0001
from_dptrue
linearizedfalse
deltaM0.02
m_flow_nominal0.01
dpValve_nominal6000.0
external_boundaries
namesurfaceazimuthtiltconstruction
externalwall_23100.0180.0wall
nameconstruction_001
externalwall_24100.0180.0wall
nameconstruction_001
externalwall_25200.0180.0wall
nameconstruction_001
internal_elements
namesurfaceazimuthtiltconstruction
internal_schema_space_001_schema_space_00310.010.0wall
nameinternal_wall
internal_schema_space_002_schema_space_00310.010.0wall
nameinternal_wall

Conclusions

Conclusions

Spaces

Introduction

Introduction

nameconstruction_001
layers
materialthickness
namematerial_001
k0.035
c1000.0
rho2000.0
epsLw0.85
epsSw0.85
0.1
namematerial_002
k0.035
c1000.0
rho2000.0
epsLw0.85
epsSw0.85
0.1
namematerial_003
k0.035
c1000.0
rho2000.0
epsLw0.85
epsSw0.85
0.1
nameinternal_wall
layers
materialthickness
namebrick
k0.89
c790.0
rho1920.0
epsLw0.85
epsSw0.65
0.2

Conclusions

Conclusions

Spaces

Introduction

Introduction

namesystem_001
parameters
scaFacRad1.5
dTBoi_nominal20
dTRad_nominal10
a{0.9}
effCurBuildings.Fluid.Types.EfficiencyCurves.Constant
T_nominal353.15
fueBuildings.Fluid.Data.Fuels.HeatingOilLowerHeatingValue()
Q_flow_nominal2000
dp_nominal5000
linearizeFlowResistancefalse
deltaM0.1
show_Tfalse
VTan0.2
hTan2
nSeg4
dIns0.002
dp(3000 + 2000)*{2,1}
nominal_mass_flow_rate_boiler0.03571428571428571
nominal_mass_flow_radiator_loop0.07142857142857142
V_flow0.03571428571428571/1000*{0.5,1}

Conclusions

Conclusions

")); end building; diff --git a/tests/data/house_yaml.mo b/tests/data/house_yaml.mo index 88cc237..44511d6 100644 --- a/tests/data/house_yaml.mo +++ b/tests/data/house_yaml.mo @@ -596,7 +596,7 @@ equation connect(dataBus.OccupiedSchema_space_003, occSch2.occupied); end OccupancyOccupancy_13; - model CollectorControlPump_control + model CollectorControlControl_002 Buildings.Controls.OBC.CDL.Reals.PIDWithReset conPum( controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PI, k=1, @@ -634,8 +634,8 @@ connect(dataBus.yPumBoiSystem_002, mulMax.y); connect(dataBus.yHeaSystem_008, mulMax.u[1]); connect(dataBus.yHeaSystem_010, mulMax.u[2]); connect(dataBus.yHeaSystem_012, mulMax.u[3]); -end CollectorControlPump_control; - model ThreeWayValveControlThree_way_valve_control_1 +end CollectorControlControl_002; + model ThreeWayValveControlControl_003 Buildings.Controls.OBC.CDL.Reals.PIDWithReset conVal( controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PI, @@ -654,13 +654,13 @@ annotation (Placement(transformation(extent={{-138,-20},{-98,20}}))); Con annotation (Placement(transformation( extent={{-120,-18},{-80,22}}), iconTransformation(extent={{-120,62},{-78,98}}))); equation -connect(dataBus.TColSetThree_way_valve_control_1, conVal.u_s); -connect(dataBus.triggerThree_way_valve_control_1, conVal.trigger); +connect(dataBus.TColSetControl_003, conVal.u_s); +connect(dataBus.triggerControl_003, conVal.trigger); connect(conVal.y, y) annotation (Line(points={{10,0},{110,0}}, color={0,0,127})); connect(u, conVal.u_m) annotation (Line(points={{-118,0},{-22,0},{-22,-20},{0, -20},{0,-16},{-2,-16},{-2,-12}}, color={0,0,127}));annotation (Icon(coordinateSystem(preserveAspectRatio=false)), Diagram( - coordinateSystem(preserveAspectRatio=false)));end ThreeWayValveControlThree_way_valve_control_1; - model ThreeWayValveControlThree_way_valve_control_2 + coordinateSystem(preserveAspectRatio=false)));end ThreeWayValveControlControl_003; + model ThreeWayValveControlControl_004 Buildings.Controls.OBC.CDL.Reals.PIDWithReset conVal( controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PI, @@ -679,13 +679,13 @@ annotation (Placement(transformation(extent={{-138,-20},{-98,20}}))); Con annotation (Placement(transformation( extent={{-120,-18},{-80,22}}), iconTransformation(extent={{-120,62},{-78,98}}))); equation -connect(dataBus.TColSetThree_way_valve_control_2, conVal.u_s); -connect(dataBus.triggerThree_way_valve_control_2, conVal.trigger); +connect(dataBus.TColSetControl_004, conVal.u_s); +connect(dataBus.triggerControl_004, conVal.trigger); connect(conVal.y, y) annotation (Line(points={{10,0},{110,0}}, color={0,0,127})); connect(u, conVal.u_m) annotation (Line(points={{-118,0},{-22,0},{-22,-20},{0, -20},{0,-16},{-2,-16},{-2,-12}}, color={0,0,127}));annotation (Icon(coordinateSystem(preserveAspectRatio=false)), Diagram( - coordinateSystem(preserveAspectRatio=false)));end ThreeWayValveControlThree_way_valve_control_2; - model BoilerControlBoiler_control + coordinateSystem(preserveAspectRatio=false)));end ThreeWayValveControlControl_004; + model BoilerControlControl_001 extends house_yaml.Common.Controls.ventilation.PartialBoilerControl; Controls.BaseClasses.DataBus dataBus annotation (Placement(transformation( @@ -696,7 +696,7 @@ connect(dataBus.TStoBotSystem_001, greThr.u); connect(dataBus.TAirOutSystem_001, lesThrTOut.u); connect(dataBus.yBoiConSystem_001, booToReaBoi.y); connect(dataBus.yPumBoiSystem_001, booToReaPum.y); - end BoilerControlBoiler_control; + end BoilerControlControl_001; model DataServer replaceable package Medium = Modelica.Media.Interfaces.PartialMedium; @@ -719,25 +719,25 @@ Modelica.Blocks.Sources.RealExpression TCooSetEmissioncontrol_8 (y=298.15); Modelica.Blocks.Sources.RealExpression - TColSetThree_way_valve_control_2 + TColSetControl_003 (y=363.15); Modelica.Blocks.Sources.RealExpression - TAirOutBoiler_control - (y=0.0); + TColSetControl_004 + (y=363.15); Modelica.Blocks.Sources.RealExpression - TCooSetEmissioncontrol_10 - (y=298.15); + TAirOutControl_001 + (y=0.0); Modelica.Blocks.Sources.RealExpression TCooSetEmissioncontrol_9 (y=298.15); Modelica.Blocks.Sources.RealExpression - TColSetThree_way_valve_control_1 - (y=363.15); + TCooSetEmissioncontrol_10 + (y=298.15); Modelica.Blocks.Sources.BooleanExpression - triggerThree_way_valve_control_2 + triggerControl_003 (y=true); Modelica.Blocks.Sources.BooleanExpression - triggerThree_way_valve_control_1 + triggerControl_004 (y=true); equation connect(port[1],TRoo[1]. port); @@ -754,20 +754,20 @@ connect(dataBus.ppmCO2Schema_space_002, TRoo1[2].ppm); connect(dataBus.ppmCO2Schema_space_003, TRoo1[3].ppm); connect(dataBus.TCooSetSchema_space_001, TCooSetEmissioncontrol_8.y); -connect(dataBus.TColSetThree_way_valve_control_2, -TColSetThree_way_valve_control_2.y); +connect(dataBus.TColSetControl_003, +TColSetControl_003.y); +connect(dataBus.TColSetControl_004, +TColSetControl_004.y); connect(dataBus.TAirOutSystem_001, -TAirOutBoiler_control.y); -connect(dataBus.TCooSetSchema_space_003, -TCooSetEmissioncontrol_10.y); +TAirOutControl_001.y); connect(dataBus.TCooSetSchema_space_002, TCooSetEmissioncontrol_9.y); -connect(dataBus.TColSetThree_way_valve_control_1, -TColSetThree_way_valve_control_1.y); -connect(dataBus.triggerThree_way_valve_control_2, -triggerThree_way_valve_control_2.y); -connect(dataBus.triggerThree_way_valve_control_1, -triggerThree_way_valve_control_1.y); +connect(dataBus.TCooSetSchema_space_003, +TCooSetEmissioncontrol_10.y); +connect(dataBus.triggerControl_003, +triggerControl_003.y); +connect(dataBus.triggerControl_004, +triggerControl_004.y); end DataServer; @@ -2395,7 +2395,7 @@ Controls.BaseClasses.DataBus dataBus equation connect(dataBus.ySystem_002, pumRad.y); connect(dataBus.y_gainSystem_002, gain.y); -connect(dataBus.TPump_control, temSup.T); +connect(dataBus.TControl_002, temSup.T); end PumpSystem_002; @@ -2627,7 +2627,7 @@ parameter Integer nRoo = 2 "Number of rooms"; ))); house_yaml.Common.Controls.ventilation.EmissionControlEmissioncontrol_8 emissioncontrol_8 annotation ( - Placement(transformation(origin = { 189.00475557936556, 82.23729049329306 }, + Placement(transformation(origin = { -134.96463397443023, -137.31262375475157 }, extent = {{-10, -10}, {10, 10}} ))); house_yaml.Common.Controls.ventilation.OccupancyOccupancy_11 @@ -2703,7 +2703,7 @@ parameter Integer nRoo = 2 "Number of rooms"; ))); house_yaml.Common.Controls.ventilation.EmissionControlEmissioncontrol_9 emissioncontrol_9 annotation ( - Placement(transformation(origin = { -168.23918192749068, -86.95066185128486 }, + Placement(transformation(origin = { -160.01033010621606, 143.41114185600884 }, extent = {{-10, -10}, {10, 10}} ))); house_yaml.Common.Controls.ventilation.OccupancyOccupancy_12 @@ -2779,7 +2779,7 @@ parameter Integer nRoo = 2 "Number of rooms"; ))); house_yaml.Common.Controls.ventilation.EmissionControlEmissioncontrol_10 emissioncontrol_10 annotation ( - Placement(transformation(origin = { 160.7168178305994, 92.50703919780251 }, + Placement(transformation(origin = { 108.87800459012674, -153.81824435482702 }, extent = {{-10, -10}, {10, 10}} ))); house_yaml.Common.Controls.ventilation.OccupancyOccupancy_13 @@ -2833,12 +2833,12 @@ parameter Integer nRoo = 2 "Number of rooms"; redeclare package Medium = MediumW ) annotation ( - Placement(transformation(origin = { 70.37576393112987, -190.62444078998854 }, + Placement(transformation(origin = { 141.23642390973012, 131.87014322807966 }, extent = {{-10, -10}, {10, 10}} ))); - house_yaml.Common.Controls.ventilation.CollectorControlPump_control - pump_control annotation ( - Placement(transformation(origin = { -66.79594488750574, 183.3717972599085 }, + house_yaml.Common.Controls.ventilation.CollectorControlControl_002 + control_002 annotation ( + Placement(transformation(origin = { 81.00574365488094, 149.95115646382456 }, extent = {{-10, -10}, {10, 10}} ))); Buildings.Fluid.Actuators.Valves.ThreeWayEqualPercentageLinear @@ -2860,8 +2860,8 @@ parameter Integer nRoo = 2 "Number of rooms"; extent = {{-10, -10}, {10, 10}} ))); house_yaml.Common.Controls.ventilation. - ThreeWayValveControlThree_way_valve_control_1 - three_way_valve_control_1 annotation ( + ThreeWayValveControlControl_003 + control_003 annotation ( Placement(transformation(origin = { -20, -275 }, extent = {{-10, -10}, {10, 10}} ))); @@ -2884,8 +2884,8 @@ parameter Integer nRoo = 2 "Number of rooms"; extent = {{-10, -10}, {10, 10}} ))); house_yaml.Common.Controls.ventilation. - ThreeWayValveControlThree_way_valve_control_2 - three_way_valve_control_2 annotation ( + ThreeWayValveControlControl_004 + control_004 annotation ( Placement(transformation(origin = { 480, -125 }, extent = {{-10, -10}, {10, 10}} ))); @@ -2910,15 +2910,15 @@ BoilerWithStorageSystem_001 system_001( V_flow=0.03571428571428571/1000*{0.5,1} , redeclare package MediumW = MediumW) "Boiler" annotation ( - Placement(transformation(origin = { -137.5727676397888, 101.48826133136996 }, + Placement(transformation(origin = { -85.29863140635692, -175.51824615474916 }, extent = {{-10, -10}, {10, 10}} ))); - house_yaml.Common.Controls.ventilation.BoilerControlBoiler_control - boiler_control( TSup_nominal=353.15, + house_yaml.Common.Controls.ventilation.BoilerControlControl_001 + control_001( TSup_nominal=353.15, threshold_outdoor_air_cutoff=288.15, threshold_to_switch_off_boiler=288.15 ) annotation ( - Placement(transformation(origin = { -71.52943905199494, -173.4218534410854 }, + Placement(transformation(origin = { -53.400662219084595, -183.1214735095933 }, extent = {{-10, -10}, {10, 10}} ))); Buildings.Fluid.FixedResistances.Junction system_003 ( @@ -2960,7 +2960,7 @@ redeclare package MediumW = MediumW) "Boiler" annotation ( house_yaml.Common.Controls.ventilation.DataServer data_bus (redeclare package Medium = Medium) annotation ( - Placement(transformation(origin = { -152.7407123840926, 135.7318076382513 }, + Placement(transformation(origin = { -21.86754463394467, 181.10974344373776 }, extent = {{-10, -10}, {10, 10}} ))); @@ -3001,7 +3001,7 @@ color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_008.y,emissioncontrol_8.y) annotation (Line( -points={{ 30.0, -75.0 } ,{ 109.50237778968278, -75.0 } ,{ 109.50237778968278, 82.23729049329306 } ,{ 189.00475557936556, 82.23729049329306 } }, +points={{ 30.0, -75.0 } ,{ -52.482316987215114, -75.0 } ,{ -52.482316987215114, -137.31262375475157 } ,{ -134.96463397443023, -137.31262375475157 } }, color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_008.port_b,system_003.port_1) @@ -3045,7 +3045,7 @@ color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_010.y,emissioncontrol_9.y) annotation (Line( -points={{ 280.0, 75.0 } ,{ 55.88040903625466, 75.0 } ,{ 55.88040903625466, -86.95066185128486 } ,{ -168.23918192749068, -86.95066185128486 } }, +points={{ 280.0, 75.0 } ,{ 59.994834946891956, 75.0 } ,{ 59.994834946891984, 143.41114185600884 } ,{ -160.01033010621606, 143.41114185600884 } }, color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_010.port_b,system_003.port_1) @@ -3089,7 +3089,7 @@ color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_012.y,emissioncontrol_10.y) annotation (Line( -points={{ 530.0, 75.0 } ,{ 345.3584089152997, 75.0 } ,{ 345.3584089152997, 92.50703919780251 } ,{ 160.7168178305994, 92.50703919780251 } }, +points={{ 530.0, 75.0 } ,{ 319.43900229506335, 75.0 } ,{ 319.43900229506335, -153.81824435482702 } ,{ 108.87800459012674, -153.81824435482702 } }, color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_012.port_b,system_005.port_1) @@ -3097,22 +3097,22 @@ annotation (Line( points={{ 530.0, 75.0 } ,{ 580.0, 75.0 } ,{ 580.0, -25.0 } ,{ 630.0, -25.0 } }, color={255,204,51}, thickness=0.5, -smooth=Smooth.None)); connect(system_002.dataBus,pump_control.dataBus) +smooth=Smooth.None)); connect(system_002.dataBus,control_002.dataBus) annotation (Line( -points={{ 70.37576393112987, -190.62444078998854 } ,{ 1.7899095218120635, -190.62444078998854 } ,{ 1.7899095218120635, 183.3717972599085 } ,{ -66.79594488750574, 183.3717972599085 } }, +points={{ 141.23642390973012, 131.87014322807966 } ,{ 111.12108378230553, 131.87014322807966 } ,{ 111.12108378230553, 149.95115646382456 } ,{ 81.00574365488094, 149.95115646382456 } }, color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_002.port_b,system_004.port_1) annotation (Line( -points={{ 70.37576393112987, -190.62444078998854 } ,{ 50.187881965564934, -190.62444078998854 } ,{ 50.187881965564934, -275.0 } ,{ 30.0, -275.0 } }, +points={{ 141.23642390973012, 131.87014322807966 } ,{ 85.61821195486506, 131.87014322807966 } ,{ 85.61821195486506, -275.0 } ,{ 30.0, -275.0 } }, color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_002.port_b,system_006.port_1) annotation (Line( -points={{ 70.37576393112987, -190.62444078998854 } ,{ 300.18788196556494, -190.62444078998854 } ,{ 300.18788196556494, -125.0 } ,{ 530.0, -125.0 } }, +points={{ 141.23642390973012, 131.87014322807966 } ,{ 335.61821195486505, 131.87014322807966 } ,{ 335.61821195486505, -125.0 } ,{ 530.0, -125.0 } }, color={255,204,51}, thickness=0.5, -smooth=Smooth.None)); connect(system_004.y,three_way_valve_control_1.y) +smooth=Smooth.None)); connect(system_004.y,control_003.y) annotation (Line( points={{ 30.0, -275.0 } ,{ 5.0, -275.0 } ,{ 5.0, -275.0 } ,{ -20.0, -275.0 } }, color={255,204,51}, @@ -3127,12 +3127,12 @@ annotation (Line( points={{ 30.0, -275.0 } ,{ 80.0, -275.0 } ,{ 80.0, -175.0 } ,{ 130.0, -175.0 } }, color={255,204,51}, thickness=0.5, -smooth=Smooth.None)); connect(three_way_valve_control_1.u,system_013.T) +smooth=Smooth.None)); connect(control_003.u,system_013.T) annotation (Line( points={{ -20.0, -275.0 } ,{ 65.0, -275.0 } ,{ 65.0, -25.0 } ,{ 150.0, -25.0 } }, color={255,204,51}, thickness=0.5, -smooth=Smooth.None)); connect(system_006.y,three_way_valve_control_2.y) +smooth=Smooth.None)); connect(system_006.y,control_004.y) annotation (Line( points={{ 530.0, -125.0 } ,{ 505.0, -125.0 } ,{ 505.0, -125.0 } ,{ 480.0, -125.0 } }, color={255,204,51}, @@ -3147,24 +3147,24 @@ annotation (Line( points={{ 530.0, -125.0 } ,{ 580.0, -125.0 } ,{ 580.0, -25.0 } ,{ 630.0, -25.0 } }, color={255,204,51}, thickness=0.5, -smooth=Smooth.None)); connect(three_way_valve_control_2.u,system_014.T) +smooth=Smooth.None)); connect(control_004.u,system_014.T) annotation (Line( points={{ 480.0, -125.0 } ,{ 440.0, -125.0 } ,{ 440.0, -25.0 } ,{ 400.0, -25.0 } }, color={255,204,51}, thickness=0.5, -smooth=Smooth.None)); connect(system_001.dataBus,boiler_control.dataBus) +smooth=Smooth.None)); connect(system_001.dataBus,control_001.dataBus) annotation (Line( -points={{ -137.5727676397888, 101.48826133136996 } ,{ -104.55110334589187, 101.48826133136996 } ,{ -104.55110334589187, -173.4218534410854 } ,{ -71.52943905199494, -173.4218534410854 } }, +points={{ -85.29863140635692, -175.51824615474916 } ,{ -69.34964681272075, -175.51824615474916 } ,{ -69.34964681272075, -183.1214735095933 } ,{ -53.400662219084595, -183.1214735095933 } }, color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_001.port_b,system_002.port_a) annotation (Line( -points={{ -137.5727676397888, 101.48826133136996 } ,{ -33.59850185432947, 101.48826133136996 } ,{ -33.598501854329456, -190.62444078998854 } ,{ 70.37576393112987, -190.62444078998854 } }, +points={{ -85.29863140635692, -175.51824615474916 } ,{ 27.9688962516866, -175.51824615474916 } ,{ 27.9688962516866, 131.87014322807966 } ,{ 141.23642390973012, 131.87014322807966 } }, color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_003.port_2,system_001.port_a) annotation (Line( -points={{ 130.0, -175.0 } ,{ -3.786383819894411, -175.0 } ,{ -3.7863838198943824, 101.48826133136996 } ,{ -137.5727676397888, 101.48826133136996 } }, +points={{ 130.0, -175.0 } ,{ 22.35068429682154, -175.0 } ,{ 22.35068429682154, -175.51824615474916 } ,{ -85.29863140635692, -175.51824615474916 } }, color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_013.port_b,system_009.port_a) @@ -3179,7 +3179,7 @@ color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_005.port_2,system_001.port_a) annotation (Line( -points={{ 630.0, -25.0 } ,{ 246.2136161801056, -25.0 } ,{ 246.21361618010562, 101.48826133136996 } ,{ -137.5727676397888, 101.48826133136996 } }, +points={{ 630.0, -25.0 } ,{ 272.35068429682156, -25.0 } ,{ 272.35068429682156, -175.51824615474916 } ,{ -85.29863140635692, -175.51824615474916 } }, color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_014.port_b,system_011.port_a) @@ -3189,72 +3189,72 @@ color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(emissioncontrol_8.dataBus,data_bus.dataBus) annotation (Line( -points={{ 189.00475557936556, 82.23729049329306 } ,{ 18.13202159763648, 82.23729049329306 } ,{ 18.13202159763648, 135.7318076382513 } ,{ -152.7407123840926, 135.7318076382513 } }, +points={{ -134.96463397443023, -137.31262375475157 } ,{ -78.41608930418745, -137.31262375475157 } ,{ -78.41608930418745, 181.10974344373776 } ,{ -21.86754463394467, 181.10974344373776 } }, thickness=0.05, smooth=Smooth.None)); connect(occupancy_11.dataBus,data_bus.dataBus) annotation (Line( -points={{ -50.0, 0.0 } ,{ -101.3703561920463, 0.0 } ,{ -101.3703561920463, 135.7318076382513 } ,{ -152.7407123840926, 135.7318076382513 } }, +points={{ -50.0, 0.0 } ,{ -35.93377231697234, 0.0 } ,{ -35.93377231697234, 181.10974344373776 } ,{ -21.86754463394467, 181.10974344373776 } }, thickness=0.05, smooth=Smooth.None)); connect(emissioncontrol_9.dataBus,data_bus.dataBus) annotation (Line( -points={{ -168.23918192749068, -86.95066185128486 } ,{ -160.48994715579164, -86.95066185128486 } ,{ -160.48994715579164, 135.7318076382513 } ,{ -152.7407123840926, 135.7318076382513 } }, +points={{ -160.01033010621606, 143.41114185600884 } ,{ -90.93893737008037, 143.41114185600884 } ,{ -90.93893737008037, 181.10974344373776 } ,{ -21.86754463394467, 181.10974344373776 } }, thickness=0.05, smooth=Smooth.None)); connect(occupancy_12.dataBus,data_bus.dataBus) annotation (Line( -points={{ 200.0, 150.0 } ,{ 23.6296438079537, 150.0 } ,{ 23.6296438079537, 135.7318076382513 } ,{ -152.7407123840926, 135.7318076382513 } }, +points={{ 200.0, 150.0 } ,{ 89.06622768302766, 150.0 } ,{ 89.06622768302766, 181.10974344373776 } ,{ -21.86754463394467, 181.10974344373776 } }, thickness=0.05, smooth=Smooth.None)); connect(emissioncontrol_10.dataBus,data_bus.dataBus) annotation (Line( -points={{ 160.7168178305994, 92.50703919780251 } ,{ 3.9880527232533893, 92.50703919780251 } ,{ 3.9880527232534178, 135.7318076382513 } ,{ -152.7407123840926, 135.7318076382513 } }, +points={{ 108.87800459012674, -153.81824435482702 } ,{ 43.50522997809104, -153.81824435482702 } ,{ 43.50522997809102, 181.10974344373776 } ,{ -21.86754463394467, 181.10974344373776 } }, thickness=0.05, smooth=Smooth.None)); connect(occupancy_13.dataBus,data_bus.dataBus) annotation (Line( -points={{ 450.0, 150.0 } ,{ 148.6296438079537, 150.0 } ,{ 148.6296438079537, 135.7318076382513 } ,{ -152.7407123840926, 135.7318076382513 } }, +points={{ 450.0, 150.0 } ,{ 214.06622768302768, 150.0 } ,{ 214.06622768302765, 181.10974344373776 } ,{ -21.86754463394467, 181.10974344373776 } }, thickness=0.05, -smooth=Smooth.None)); connect(pump_control.dataBus,data_bus.dataBus) +smooth=Smooth.None)); connect(control_002.dataBus,data_bus.dataBus) annotation (Line( -points={{ -66.79594488750574, 183.3717972599085 } ,{ -109.76832863579918, 183.3717972599085 } ,{ -109.76832863579918, 135.7318076382513 } ,{ -152.7407123840926, 135.7318076382513 } }, +points={{ 81.00574365488094, 149.95115646382456 } ,{ 29.569099510468135, 149.95115646382456 } ,{ 29.56909951046814, 181.10974344373776 } ,{ -21.86754463394467, 181.10974344373776 } }, thickness=0.05, -smooth=Smooth.None)); connect(three_way_valve_control_1.dataBus,data_bus.dataBus) +smooth=Smooth.None)); connect(control_003.dataBus,data_bus.dataBus) annotation (Line( -points={{ -20.0, -275.0 } ,{ -86.3703561920463, -275.0 } ,{ -86.3703561920463, 135.7318076382513 } ,{ -152.7407123840926, 135.7318076382513 } }, +points={{ -20.0, -275.0 } ,{ -20.933772316972338, -275.0 } ,{ -20.933772316972338, 181.10974344373776 } ,{ -21.86754463394467, 181.10974344373776 } }, thickness=0.05, -smooth=Smooth.None)); connect(three_way_valve_control_2.dataBus,data_bus.dataBus) +smooth=Smooth.None)); connect(control_004.dataBus,data_bus.dataBus) annotation (Line( -points={{ 480.0, -125.0 } ,{ 163.6296438079537, -125.0 } ,{ 163.6296438079537, 135.7318076382513 } ,{ -152.7407123840926, 135.7318076382513 } }, +points={{ 480.0, -125.0 } ,{ 229.06622768302768, -125.0 } ,{ 229.06622768302765, 181.10974344373776 } ,{ -21.86754463394467, 181.10974344373776 } }, thickness=0.05, -smooth=Smooth.None)); connect(boiler_control.dataBus,data_bus.dataBus) +smooth=Smooth.None)); connect(control_001.dataBus,data_bus.dataBus) annotation (Line( -points={{ -71.52943905199494, -173.4218534410854 } ,{ -112.13507571804377, -173.4218534410854 } ,{ -112.13507571804377, 135.7318076382513 } ,{ -152.7407123840926, 135.7318076382513 } }, +points={{ -53.400662219084595, -183.1214735095933 } ,{ -37.634103426514635, -183.1214735095933 } ,{ -37.634103426514635, 181.10974344373776 } ,{ -21.86754463394467, 181.10974344373776 } }, thickness=0.05, smooth=Smooth.None)); connect(schema_space_001.heaPorAir,data_bus.port[1]) annotation (Line( -points={{ 0.0, 0.0 } ,{ -76.3703561920463, 0.0 } ,{ -76.3703561920463, 135.7318076382513 } ,{ -152.7407123840926, 135.7318076382513 } }, +points={{ 0.0, 0.0 } ,{ -10.933772316972336, 0.0 } ,{ -10.933772316972336, 181.10974344373776 } ,{ -21.86754463394467, 181.10974344373776 } }, thickness=0.05, smooth=Smooth.None)); connect(schema_space_001.ports[1],data_bus.port_a[1]) annotation (Line( -points={{ 0.0, 0.0 } ,{ -76.3703561920463, 0.0 } ,{ -76.3703561920463, 135.7318076382513 } ,{ -152.7407123840926, 135.7318076382513 } }, +points={{ 0.0, 0.0 } ,{ -10.933772316972336, 0.0 } ,{ -10.933772316972336, 181.10974344373776 } ,{ -21.86754463394467, 181.10974344373776 } }, thickness=0.05, smooth=Smooth.None)); connect(schema_space_002.heaPorAir,data_bus.port[2]) annotation (Line( -points={{ 250.0, 150.0 } ,{ 48.6296438079537, 150.0 } ,{ 48.6296438079537, 135.7318076382513 } ,{ -152.7407123840926, 135.7318076382513 } }, +points={{ 250.0, 150.0 } ,{ 114.06622768302768, 150.0 } ,{ 114.06622768302765, 181.10974344373776 } ,{ -21.86754463394467, 181.10974344373776 } }, thickness=0.05, smooth=Smooth.None)); connect(schema_space_002.ports[1],data_bus.port_a[2]) annotation (Line( -points={{ 250.0, 150.0 } ,{ 48.6296438079537, 150.0 } ,{ 48.6296438079537, 135.7318076382513 } ,{ -152.7407123840926, 135.7318076382513 } }, +points={{ 250.0, 150.0 } ,{ 114.06622768302768, 150.0 } ,{ 114.06622768302765, 181.10974344373776 } ,{ -21.86754463394467, 181.10974344373776 } }, thickness=0.05, smooth=Smooth.None)); connect(schema_space_003.heaPorAir,data_bus.port[3]) annotation (Line( -points={{ 500.0, 150.0 } ,{ 173.6296438079537, 150.0 } ,{ 173.6296438079537, 135.7318076382513 } ,{ -152.7407123840926, 135.7318076382513 } }, +points={{ 500.0, 150.0 } ,{ 239.06622768302765, 150.0 } ,{ 239.06622768302768, 181.10974344373776 } ,{ -21.86754463394467, 181.10974344373776 } }, thickness=0.05, smooth=Smooth.None)); connect(schema_space_003.ports[1],data_bus.port_a[3]) annotation (Line( -points={{ 500.0, 150.0 } ,{ 173.6296438079537, 150.0 } ,{ 173.6296438079537, 135.7318076382513 } ,{ -152.7407123840926, 135.7318076382513 } }, +points={{ 500.0, 150.0 } ,{ 239.06622768302765, 150.0 } ,{ 239.06622768302768, 181.10974344373776 } ,{ -21.86754463394467, 181.10974344373776 } }, thickness=0.05, -smooth=Smooth.None));annotation (Diagram(coordinateSystem(extent={{-218.23918192749068,-325.0},{680.0,250.0}})), Icon( - coordinateSystem(extent={{-218.23918192749068,-325.0},{680.0,250.0}}))); +smooth=Smooth.None));annotation (Diagram(coordinateSystem(extent={{-243.20614892926338,-325.0},{680.0,250.0}})), Icon( + coordinateSystem(extent={{-243.20614892926338,-325.0},{680.0,250.0}}))); annotation ( - Documentation(info="Spaces

Spaces

Introduction

Introduction

nameschema_space_001
parameters
mSenFac1.0
AFlo100.0
hRoo2.5
linearizeRadiationtrue
m_flow_nominal0.01
T_start294.15
volume250.0
occupancy
nameoccupancy_11
parameters
emissions
nameparameters
system_007
nEle1
fraRad0.3
Q_flow_nominal2000.0
T_a_nominal363.15
T_b_nominal353.15
TAir_nominal293.15
TRad_nominal293.15
n1.9
deltaM0.01
from_dpfalse
dp_nominal0.0
linearizedfalse
VWat0.116
mDry52.6
system_008
R7.0
delta00.01
dpFixed_nominal6000.0
l0.0001
from_dptrue
linearizedfalse
deltaM0.02
m_flow_nominal0.01
dpValve_nominal6000.0
external_boundaries
namesurfaceazimuthtiltconstruction
externalwall_17100.0180.0wall
nameconstruction_001
externalwall_18100.0180.0wall
nameconstruction_001
externalwall_19200.0180.0wall
nameconstruction_001
internal_elements
namesurfaceazimuthtiltconstruction
internal_schema_space_001_schema_space_00210.010.0wall
nameinternal_wall
internal_schema_space_001_schema_space_00310.010.0wall
nameinternal_wall
nameschema_space_002
parameters
mSenFac1.0
AFlo100.0
hRoo2.5
linearizeRadiationtrue
m_flow_nominal0.01
T_start294.15
volume250.0
occupancy
nameoccupancy_12
parameters
emissions
nameparameters
system_009
nEle1
fraRad0.3
Q_flow_nominal2000.0
T_a_nominal363.15
T_b_nominal353.15
TAir_nominal293.15
TRad_nominal293.15
n1.9
deltaM0.01
from_dpfalse
dp_nominal0.0
linearizedfalse
VWat0.116
mDry52.6
system_010
R7.0
delta00.01
dpFixed_nominal6000.0
l0.0001
from_dptrue
linearizedfalse
deltaM0.02
m_flow_nominal0.01
dpValve_nominal6000.0
external_boundaries
namesurfaceazimuthtiltconstruction
externalwall_20100.0180.0wall
nameconstruction_001
externalwall_21100.0180.0wall
nameconstruction_001
externalwall_22200.0180.0wall
nameconstruction_001
internal_elements
namesurfaceazimuthtiltconstruction
internal_schema_space_001_schema_space_00210.010.0wall
nameinternal_wall
internal_schema_space_002_schema_space_00310.010.0wall
nameinternal_wall
nameschema_space_003
parameters
mSenFac1.0
AFlo100.0
hRoo2.5
linearizeRadiationtrue
m_flow_nominal0.01
T_start294.15
volume250.0
occupancy
nameoccupancy_13
parameters
emissions
nameparameters
system_011
nEle1
fraRad0.3
Q_flow_nominal2000.0
T_a_nominal363.15
T_b_nominal353.15
TAir_nominal293.15
TRad_nominal293.15
n1.9
deltaM0.01
from_dpfalse
dp_nominal0.0
linearizedfalse
VWat0.116
mDry52.6
system_012
R7.0
delta00.01
dpFixed_nominal6000.0
l0.0001
from_dptrue
linearizedfalse
deltaM0.02
m_flow_nominal0.01
dpValve_nominal6000.0
external_boundaries
namesurfaceazimuthtiltconstruction
externalwall_23100.0180.0wall
nameconstruction_001
externalwall_24100.0180.0wall
nameconstruction_001
externalwall_25200.0180.0wall
nameconstruction_001
internal_elements
namesurfaceazimuthtiltconstruction
internal_schema_space_001_schema_space_00310.010.0wall
nameinternal_wall
internal_schema_space_002_schema_space_00310.010.0wall
nameinternal_wall

Conclusions

Conclusions

Spaces

Introduction

Introduction

nameconstruction_001
layers
materialthickness
namematerial_001
k0.035
c1000.0
rho2000.0
epsLw0.85
epsSw0.65
0.1
namematerial_002
k0.035
c1000.0
rho2000.0
epsLw0.85
epsSw0.65
0.1
namematerial_003
k0.035
c1000.0
rho2000.0
epsLw0.85
epsSw0.65
0.1
nameinternal_wall
layers
materialthickness
namebrick
k0.89
c790.0
rho1920.0
epsLw0.85
epsSw0.65
0.2

Conclusions

Conclusions

Spaces

Introduction

Introduction

namesystem_001
parameters
scaFacRad1.5
dTBoi_nominal20
dTRad_nominal10
a{0.9}
effCurBuildings.Fluid.Types.EfficiencyCurves.Constant
T_nominal353.15
fueBuildings.Fluid.Data.Fuels.HeatingOilLowerHeatingValue()
Q_flow_nominal2000
dp_nominal5000
linearizeFlowResistancefalse
deltaM0.1
show_Tfalse
VTan0.2
hTan2
nSeg4
dIns0.002
dp(3000 + 2000)*{2,1}
nominal_mass_flow_rate_boiler0.03571428571428571
nominal_mass_flow_radiator_loop0.07142857142857142
V_flow0.03571428571428571/1000*{0.5,1}

Conclusions

Conclusions

")); + Documentation(info="Spaces

Spaces

Introduction

Introduction

nameschema_space_001
parameters
mSenFac1.0
AFlo100.0
hRoo2.5
linearizeRadiationtrue
m_flow_nominal0.01
T_start294.15
volume250.0
occupancy
nameoccupancy_11
parameters
emissions
nameparameters
system_007
nEle1
fraRad0.3
Q_flow_nominal2000.0
T_a_nominal363.15
T_b_nominal353.15
TAir_nominal293.15
TRad_nominal293.15
n1.9
deltaM0.01
from_dpfalse
dp_nominal0.0
linearizedfalse
VWat0.116
mDry52.6
system_008
R7.0
delta00.01
dpFixed_nominal6000.0
l0.0001
from_dptrue
linearizedfalse
deltaM0.02
m_flow_nominal0.01
dpValve_nominal6000.0
external_boundaries
namesurfaceazimuthtiltconstruction
externalwall_17100.0180.0wall
nameconstruction_001
externalwall_18100.0180.0wall
nameconstruction_001
externalwall_19200.0180.0wall
nameconstruction_001
internal_elements
namesurfaceazimuthtiltconstruction
internal_schema_space_001_schema_space_00210.010.0wall
nameinternal_wall
internal_schema_space_001_schema_space_00310.010.0wall
nameinternal_wall
nameschema_space_002
parameters
mSenFac1.0
AFlo100.0
hRoo2.5
linearizeRadiationtrue
m_flow_nominal0.01
T_start294.15
volume250.0
occupancy
nameoccupancy_12
parameters
emissions
nameparameters
system_009
nEle1
fraRad0.3
Q_flow_nominal2000.0
T_a_nominal363.15
T_b_nominal353.15
TAir_nominal293.15
TRad_nominal293.15
n1.9
deltaM0.01
from_dpfalse
dp_nominal0.0
linearizedfalse
VWat0.116
mDry52.6
system_010
R7.0
delta00.01
dpFixed_nominal6000.0
l0.0001
from_dptrue
linearizedfalse
deltaM0.02
m_flow_nominal0.01
dpValve_nominal6000.0
external_boundaries
namesurfaceazimuthtiltconstruction
externalwall_20100.0180.0wall
nameconstruction_001
externalwall_21100.0180.0wall
nameconstruction_001
externalwall_22200.0180.0wall
nameconstruction_001
internal_elements
namesurfaceazimuthtiltconstruction
internal_schema_space_001_schema_space_00210.010.0wall
nameinternal_wall
internal_schema_space_002_schema_space_00310.010.0wall
nameinternal_wall
nameschema_space_003
parameters
mSenFac1.0
AFlo100.0
hRoo2.5
linearizeRadiationtrue
m_flow_nominal0.01
T_start294.15
volume250.0
occupancy
nameoccupancy_13
parameters
emissions
nameparameters
system_011
nEle1
fraRad0.3
Q_flow_nominal2000.0
T_a_nominal363.15
T_b_nominal353.15
TAir_nominal293.15
TRad_nominal293.15
n1.9
deltaM0.01
from_dpfalse
dp_nominal0.0
linearizedfalse
VWat0.116
mDry52.6
system_012
R7.0
delta00.01
dpFixed_nominal6000.0
l0.0001
from_dptrue
linearizedfalse
deltaM0.02
m_flow_nominal0.01
dpValve_nominal6000.0
external_boundaries
namesurfaceazimuthtiltconstruction
externalwall_23100.0180.0wall
nameconstruction_001
externalwall_24100.0180.0wall
nameconstruction_001
externalwall_25200.0180.0wall
nameconstruction_001
internal_elements
namesurfaceazimuthtiltconstruction
internal_schema_space_001_schema_space_00310.010.0wall
nameinternal_wall
internal_schema_space_002_schema_space_00310.010.0wall
nameinternal_wall

Conclusions

Conclusions

Spaces

Introduction

Introduction

nameinternal_wall
layers
materialthickness
namebrick
k0.89
c790.0
rho1920.0
epsLw0.85
epsSw0.65
0.2
nameconstruction_001
layers
materialthickness
namematerial_001
k0.035
c1000.0
rho2000.0
epsLw0.85
epsSw0.65
0.1
namematerial_002
k0.035
c1000.0
rho2000.0
epsLw0.85
epsSw0.65
0.1
namematerial_003
k0.035
c1000.0
rho2000.0
epsLw0.85
epsSw0.65
0.1

Conclusions

Conclusions

Spaces

Introduction

Introduction

namesystem_001
parameters
scaFacRad1.5
dTBoi_nominal20
dTRad_nominal10
a{0.9}
effCurBuildings.Fluid.Types.EfficiencyCurves.Constant
T_nominal353.15
fueBuildings.Fluid.Data.Fuels.HeatingOilLowerHeatingValue()
Q_flow_nominal2000
dp_nominal5000
linearizeFlowResistancefalse
deltaM0.1
show_Tfalse
VTan0.2
hTan2
nSeg4
dIns0.002
dp(3000 + 2000)*{2,1}
nominal_mass_flow_rate_boiler0.03571428571428571
nominal_mass_flow_radiator_loop0.07142857142857142
V_flow0.03571428571428571/1000*{0.5,1}

Conclusions

Conclusions

")); end building; diff --git a/tests/house.yaml b/tests/house.yaml index 3b671e8..7f5b32e 100644 --- a/tests/house.yaml +++ b/tests/house.yaml @@ -132,8 +132,14 @@ spaces: systems: - boiler: id: SYSTEM:001 + control: + boiler_control: + id: CONTROL:001 - pump: id: SYSTEM:002 + control: + collector_control: + id: CONTROL:002 outlets: - SYSTEM:004 - SYSTEM:006 @@ -148,6 +154,9 @@ systems: - SYSTEM:001 - three_way_valve: id: SYSTEM:004 + control: + three_way_valve_control: + id: CONTROL:003 outlets: - SYSTEM:013 - SYSTEM:003 @@ -164,6 +173,9 @@ systems: - SYSTEM:001 - three_way_valve: id: SYSTEM:006 + control: + three_way_valve_control: + id: CONTROL:004 outlets: - SYSTEM:014 - SYSTEM:005 diff --git a/trano/data_models/conversion.py b/trano/data_models/conversion.py index 97ff5b0..8c4c579 100644 --- a/trano/data_models/conversion.py +++ b/trano/data_models/conversion.py @@ -1,34 +1,71 @@ +import copy import json -from collections import Counter from pathlib import Path from typing import Any, Dict import yaml # type: ignore +from pydantic import BaseModel from trano.construction import Construction, Layer from trano.material import Material -from trano.models.elements.boiler import Boiler -from trano.models.elements.controls.boiler import BoilerControl -from trano.models.elements.controls.collector import CollectorControl -from trano.models.elements.controls.emission import EmissionControl -from trano.models.elements.controls.three_way_valve import ThreeWayValveControl +from trano.models.elements.boiler import Boiler # noqa: F401 +from trano.models.elements.controls.boiler import BoilerControl # noqa: F401 +from trano.models.elements.controls.collector import CollectorControl # noqa: F401 +from trano.models.elements.controls.emission import EmissionControl # noqa: F401 +from trano.models.elements.controls.three_way_valve import ( # noqa: F401 + ThreeWayValveControl, +) from trano.models.elements.envelope.external_wall import ExternalWall from trano.models.elements.occupancy import Occupancy -from trano.models.elements.pump import Pump -from trano.models.elements.radiator import Radiator +from trano.models.elements.pump import Pump # noqa: F401 +from trano.models.elements.radiator import Radiator # noqa: F401 from trano.models.elements.space import Space, SpaceParameter -from trano.models.elements.split_valve import SplitValve -from trano.models.elements.temperature_sensor import TemperatureSensor -from trano.models.elements.three_way_valve import ThreeWayValve -from trano.models.elements.valve import Valve +from trano.models.elements.split_valve import SplitValve # noqa: F401 +from trano.models.elements.temperature_sensor import TemperatureSensor # noqa: F401 +from trano.models.elements.three_way_valve import ThreeWayValve # noqa: F401 +from trano.models.elements.valve import Valve # noqa: F401 from trano.models.elements.weather import Weather from trano.topology import Network +def to_camel_case(snake_str: str) -> str: + return "".join(x.capitalize() for x in snake_str.lower().split("_")) + + +class Component(BaseModel): + name: str + component_instance: Any + + +def _instantiate_component(component_: Dict[str, Any]) -> Component: + component = copy.deepcopy(component_) + components = component.items() + if len(components) != 1: + raise NotImplementedError("Only one component type is allowed") + component_type, component_parameters = next(iter(components)) + component_parameters.pop("inlets", None) + component_parameters.pop("outlets", None) + component_type = to_camel_case(component_type) + component_class = globals()[component_type] + name = component_parameters.pop("id") + component_parameters.update({"name": name}) + if component_parameters.get("control"): + controls = component_parameters["control"].items() + if len(controls) != 1: + raise NotImplementedError("Only one component type is allowed") + control_type, control_parameter = next(iter(controls)) + control_class = globals()[to_camel_case(control_type)] + control_name = control_parameter.pop("id", None) + if control_name: + control_parameter.update({"name": control_name}) + control = control_class(**control_parameter) + component_parameters.update({"control": control}) + component = component_class(**component_parameters) + return Component(name=name, component_instance=component) + + # TODO: reduce complexity -def convert_network( # noqa: C901, PLR0912, PLR0915 - name: str, model_path: Path -) -> Network: +def convert_network(name: str, model_path: Path) -> Network: # noqa: C901 network = Network(name=name) occupancy = None data = None @@ -69,23 +106,9 @@ def convert_network( # noqa: C901, PLR0912, PLR0915 occupancy = Occupancy(**space["occupancy"]) emissions = [] for emission in space["emissions"]: - if emission.get("radiator"): - radiator = emission["radiator"] - name = radiator.pop("id") - radiator = Radiator(**(radiator | {"name": name})) - emissions.append(radiator) - systems[name] = radiator - if emission.get("valve"): - valve = emission["valve"] - name = valve.pop("id") - control = None - if valve.get("control"): - control = valve["control"] - if control.get("emission_control"): - control = EmissionControl(**control["emission_control"]) - valve = Valve(**(valve | {"control": control, "name": name})) - systems[name] = valve - emissions.append(valve) + emission_ = _instantiate_component(emission) + systems[emission_.name] = emission_.component_instance + emissions.append(emission_.component_instance) space_ = Space( name=space["id"], external_boundaries=external_walls, @@ -97,36 +120,9 @@ def convert_network( # noqa: C901, PLR0912, PLR0915 spaces.append(space_) network.add_boiler_plate_spaces(spaces, weather=Weather(name="weather")) edges = [] - system_counter: Dict[str, Any] = Counter() for system in data["systems"]: - for system_type, value in system.items(): - if system_type == "boiler": - - boiler = Boiler( - name=value["id"], control=BoilerControl(name="boiler_control") - ) - systems[value["id"]] = boiler - if system_type == "three_way_valve": - system_counter.update([system_type]) - three_way_valve_control = ThreeWayValveControl( - name=f"{system_type}_control_{system_counter[system_type]}" - ) - three_way_valve = ThreeWayValve( - name=value["id"], - control=three_way_valve_control, - ) - systems[value["id"]] = three_way_valve - if system_type == "pump": - pump = Pump( - name=value["id"], control=CollectorControl(name="pump_control") - ) - systems[value["id"]] = pump - if system_type == "split_valve": - split_valve = SplitValve(name=value["id"]) - systems[value["id"]] = split_valve - if system_type == "temperature_sensor": - temperature_sensor = TemperatureSensor(name=value["id"]) - systems[value["id"]] = temperature_sensor + system_ = _instantiate_component(system) + systems[system_.name] = system_.component_instance for system in data["systems"]: for value in system.values(): edges += [ @@ -137,7 +133,6 @@ def convert_network( # noqa: C901, PLR0912, PLR0915 (systems[inlet], systems[value["id"]]) for inlet in value.get("inlets", []) ] - for edge in edges: network.connect_systems(*edge) return network diff --git a/trano/data_models/trano.yaml b/trano/data_models/trano.yaml index 1563067..46fd2c9 100644 --- a/trano/data_models/trano.yaml +++ b/trano/data_models/trano.yaml @@ -20,6 +20,7 @@ prefixes: SYSTEM: http://example.org/SYSTEM/ MATERIAL: http://example.org/MATERIAL/ CONSTRUCTION: http://example.org/CONSTRUCTION/ + CONTROL: http://example.org/CONTROL/ default_prefix: trano default_range: string @@ -164,17 +165,23 @@ classes: attributes: parameters: range: ThreeWayValveParameters + control: + range: Control Boiler: is_a: System attributes: parameters: range: BoilerParameters + control: + range: Control Pump: is_a: System attributes: parameters: range: PumpParameters + control: + range: Control TemperatureSensor: is_a: System @@ -186,10 +193,25 @@ classes: range: ControlLoopsParameters multivalued: false class_uri: schema:EmissionControl + BoilerControl: + slots: + - id + class_uri: schema:BoilerControl + CollectorControl: + slots: + - id + class_uri: schema:CollectorControl + ThreeWayValveControl: + slots: + - id + class_uri: schema:CollectorControl Control: slots: - emission_control + - boiler_control + - collector_control + - three_way_valve_control class_uri: schema:Control OccupancyParameter: @@ -733,6 +755,21 @@ slots: slot_uri: schema:emission_control range: EmissionControl multivalued: false + three_way_valve_control: + slot_uri: schema:three_way_valve_control + range: ThreeWayValveControl + multivalued: false + inlined: true + collector_control: + slot_uri: schema:collector_control + range: CollectorControl + multivalued: false + inlined: true + boiler_control: + slot_uri: schema:boiler_control + range: BoilerControl + multivalued: false + inlined: true external_boundaries: slot_uri: schema:external_boundaries range: ExternalBoundaries From 8a257f22facacd5b2610b1c75ba5291e69d6f15b Mon Sep 17 00:00:00 2001 From: aan Date: Thu, 8 Aug 2024 18:04:35 +0200 Subject: [PATCH 08/11] feat: Reduce complexity and add control from configuration. --- tests/data/house.mo | 184 +++++++------- tests/data/house_yaml.mo | 178 +++++++------- tests/house.json | 408 ++++++++++++++++++++++++++++++++ tests/house.yaml | 3 + trano/data_models/conversion.py | 10 +- trano/data_models/trano.yaml | 3 + 6 files changed, 604 insertions(+), 182 deletions(-) create mode 100644 tests/house.json diff --git a/tests/data/house.mo b/tests/data/house.mo index f2b741a..254f2cf 100644 --- a/tests/data/house.mo +++ b/tests/data/house.mo @@ -404,7 +404,7 @@ constructed by the signals connected to this bus. fillPattern=FillPattern.Solid)}), Diagram(coordinateSystem( preserveAspectRatio=false))); end AHU_G36; - model EmissionControlEmissioncontrol_8 + model EmissionControlControl_007 parameter Real schedule[:]=3600*{7,19}; parameter Modelica.Units.SI.Temperature THeaSet= 273.15+24; @@ -458,17 +458,17 @@ connect(dataBus.TCooSetSchema_space_001, emissionControl.TCooSet); connect(dataBus.TZonSchema_space_001, emissionControl.TZon); connect(dataBus.yCooSystem_008, emissionControl.yCoo); connect(dataBus.yHeaSystem_008, emissionControl.yHea); -end EmissionControlEmissioncontrol_8; - model OccupancyOccupancy_11 +end EmissionControlControl_007; + model OccupancyOccupancy_1 extends house.Common.Occupancy.SimpleOccupancy ; Controls.BaseClasses.DataBus dataBus annotation (Placement(transformation( extent={{-120,-18},{-80,22}}), iconTransformation(extent={{-120,62},{-78,98}}))); equation connect(dataBus.OccupiedSchema_space_001, occSch2.occupied); - end OccupancyOccupancy_11; + end OccupancyOccupancy_1; - model EmissionControlEmissioncontrol_9 + model EmissionControlControl_006 parameter Real schedule[:]=3600*{7,19}; parameter Modelica.Units.SI.Temperature THeaSet= 273.15+24; @@ -522,17 +522,17 @@ connect(dataBus.TCooSetSchema_space_002, emissionControl.TCooSet); connect(dataBus.TZonSchema_space_002, emissionControl.TZon); connect(dataBus.yCooSystem_010, emissionControl.yCoo); connect(dataBus.yHeaSystem_010, emissionControl.yHea); -end EmissionControlEmissioncontrol_9; - model OccupancyOccupancy_12 +end EmissionControlControl_006; + model OccupancyOccupancy_2 extends house.Common.Occupancy.SimpleOccupancy ; Controls.BaseClasses.DataBus dataBus annotation (Placement(transformation( extent={{-120,-18},{-80,22}}), iconTransformation(extent={{-120,62},{-78,98}}))); equation connect(dataBus.OccupiedSchema_space_002, occSch2.occupied); - end OccupancyOccupancy_12; + end OccupancyOccupancy_2; - model EmissionControlEmissioncontrol_10 + model EmissionControlControl_005 parameter Real schedule[:]=3600*{7,19}; parameter Modelica.Units.SI.Temperature THeaSet= 273.15+24; @@ -586,15 +586,15 @@ connect(dataBus.TCooSetSchema_space_003, emissionControl.TCooSet); connect(dataBus.TZonSchema_space_003, emissionControl.TZon); connect(dataBus.yCooSystem_012, emissionControl.yCoo); connect(dataBus.yHeaSystem_012, emissionControl.yHea); -end EmissionControlEmissioncontrol_10; - model OccupancyOccupancy_13 +end EmissionControlControl_005; + model OccupancyOccupancy_3 extends house.Common.Occupancy.SimpleOccupancy ; Controls.BaseClasses.DataBus dataBus annotation (Placement(transformation( extent={{-120,-18},{-80,22}}), iconTransformation(extent={{-120,62},{-78,98}}))); equation connect(dataBus.OccupiedSchema_space_003, occSch2.occupied); - end OccupancyOccupancy_13; + end OccupancyOccupancy_3; model CollectorControlControl_002 Buildings.Controls.OBC.CDL.Reals.PIDWithReset @@ -716,28 +716,28 @@ iconTransformation(origin = {-2, -42}, extent = {{-110, -9}, {-90, 9}}))); Cont annotation (Placement(transformation( extent={{-120,-18},{-80,22}}), iconTransformation(extent={{-120,62},{-78,98}}))); Modelica.Blocks.Sources.RealExpression - TCooSetEmissioncontrol_10 + TCooSetControl_007 (y=298.15); Modelica.Blocks.Sources.RealExpression - TColSetControl_003 + TCooSetControl_005 + (y=298.15); +Modelica.Blocks.Sources.RealExpression + TColSetControl_004 (y=363.15); Modelica.Blocks.Sources.RealExpression TAirOutControl_001 (y=0.0); Modelica.Blocks.Sources.RealExpression - TCooSetEmissioncontrol_9 + TCooSetControl_006 (y=298.15); Modelica.Blocks.Sources.RealExpression - TCooSetEmissioncontrol_8 - (y=298.15); -Modelica.Blocks.Sources.RealExpression - TColSetControl_004 + TColSetControl_003 (y=363.15); Modelica.Blocks.Sources.BooleanExpression - triggerControl_004 + triggerControl_003 (y=true); Modelica.Blocks.Sources.BooleanExpression - triggerControl_003 + triggerControl_004 (y=true); equation connect(port[1],TRoo[1]. port); @@ -752,22 +752,22 @@ connect(dataBus.TZonSchema_space_003, TRoo[3].T); connect(dataBus.ppmCO2Schema_space_001, TRoo1[1].ppm); connect(dataBus.ppmCO2Schema_space_002, TRoo1[2].ppm); connect(dataBus.ppmCO2Schema_space_003, TRoo1[3].ppm); +connect(dataBus.TCooSetSchema_space_001, +TCooSetControl_007.y); connect(dataBus.TCooSetSchema_space_003, -TCooSetEmissioncontrol_10.y); -connect(dataBus.TColSetControl_003, -TColSetControl_003.y); +TCooSetControl_005.y); +connect(dataBus.TColSetControl_004, +TColSetControl_004.y); connect(dataBus.TAirOutSystem_001, TAirOutControl_001.y); connect(dataBus.TCooSetSchema_space_002, -TCooSetEmissioncontrol_9.y); -connect(dataBus.TCooSetSchema_space_001, -TCooSetEmissioncontrol_8.y); -connect(dataBus.TColSetControl_004, -TColSetControl_004.y); -connect(dataBus.triggerControl_004, -triggerControl_004.y); +TCooSetControl_006.y); +connect(dataBus.TColSetControl_003, +TColSetControl_003.y); connect(dataBus.triggerControl_003, triggerControl_003.y); +connect(dataBus.triggerControl_004, +triggerControl_004.y); end DataServer; @@ -2625,13 +2625,13 @@ parameter Integer nRoo = 2 "Number of rooms"; Placement(transformation(origin = { 30, -75 }, extent = {{-10, -10}, {10, 10}} ))); - house.Common.Controls.ventilation.EmissionControlEmissioncontrol_8 - emissioncontrol_8 annotation ( - Placement(transformation(origin = { 119.46323115268068, 151.41102925541978 }, + house.Common.Controls.ventilation.EmissionControlControl_007 + control_007 annotation ( + Placement(transformation(origin = { -130.08494456909304, 150.83031054600136 }, extent = {{-10, -10}, {10, 10}} ))); - house.Common.Controls.ventilation.OccupancyOccupancy_11 - occupancy_11( occupancy=3600*{7, 19}, + house.Common.Controls.ventilation.OccupancyOccupancy_1 + occupancy_1( occupancy=3600*{7, 19}, gain=[35; 70; 30], k=1/6/4 ) annotation ( @@ -2701,13 +2701,13 @@ parameter Integer nRoo = 2 "Number of rooms"; Placement(transformation(origin = { 280, 75 }, extent = {{-10, -10}, {10, 10}} ))); - house.Common.Controls.ventilation.EmissionControlEmissioncontrol_9 - emissioncontrol_9 annotation ( - Placement(transformation(origin = { 195.74270524451885, 29.62828612681646 }, + house.Common.Controls.ventilation.EmissionControlControl_006 + control_006 annotation ( + Placement(transformation(origin = { -134.63999810877056, -164.33829653907998 }, extent = {{-10, -10}, {10, 10}} ))); - house.Common.Controls.ventilation.OccupancyOccupancy_12 - occupancy_12( occupancy=3600*{7, 19}, + house.Common.Controls.ventilation.OccupancyOccupancy_2 + occupancy_2( occupancy=3600*{7, 19}, gain=[35; 70; 30], k=1/6/4 ) annotation ( @@ -2777,13 +2777,13 @@ parameter Integer nRoo = 2 "Number of rooms"; Placement(transformation(origin = { 530, 75 }, extent = {{-10, -10}, {10, 10}} ))); - house.Common.Controls.ventilation.EmissionControlEmissioncontrol_10 - emissioncontrol_10 annotation ( - Placement(transformation(origin = { -194.59850168709363, 48.72497338678082 }, + house.Common.Controls.ventilation.EmissionControlControl_005 + control_005 annotation ( + Placement(transformation(origin = { -42.750026404921165, 194.84621898353717 }, extent = {{-10, -10}, {10, 10}} ))); - house.Common.Controls.ventilation.OccupancyOccupancy_13 - occupancy_13( occupancy=3600*{7, 19}, + house.Common.Controls.ventilation.OccupancyOccupancy_3 + occupancy_3( occupancy=3600*{7, 19}, gain=[35; 70; 30], k=1/6/4 ) annotation ( @@ -2833,12 +2833,12 @@ parameter Integer nRoo = 2 "Number of rooms"; redeclare package Medium = MediumW ) annotation ( - Placement(transformation(origin = { -158.6637903794453, -94.80867344416055 }, + Placement(transformation(origin = { 167.1383707962454, 91.02861458634007 }, extent = {{-10, -10}, {10, 10}} ))); house.Common.Controls.ventilation.CollectorControlControl_002 control_002 annotation ( - Placement(transformation(origin = { -180.9436326393925, -44.17414569234961 }, + Placement(transformation(origin = { -15.812183618647536, 185.91320571738788 }, extent = {{-10, -10}, {10, 10}} ))); Buildings.Fluid.Actuators.Valves.ThreeWayEqualPercentageLinear @@ -2910,7 +2910,7 @@ BoilerWithStorageSystem_001 system_001( V_flow=0.03571428571428571/1000*{0.5,1} , redeclare package MediumW = MediumW) "Boiler" annotation ( - Placement(transformation(origin = { 188.39201522753748, -0.335905389162841 }, + Placement(transformation(origin = { 92.94640039258113, -173.30602085609948 }, extent = {{-10, -10}, {10, 10}} ))); house.Common.Controls.ventilation.BoilerControlControl_001 @@ -2918,7 +2918,7 @@ redeclare package MediumW = MediumW) "Boiler" annotation ( threshold_outdoor_air_cutoff=288.15, threshold_to_switch_off_boiler=288.15 ) annotation ( - Placement(transformation(origin = { 98.08666480556177, 188.9191245938689 }, + Placement(transformation(origin = { -166.96898396404484, 100.73141965467681 }, extent = {{-10, -10}, {10, 10}} ))); Buildings.Fluid.FixedResistances.Junction system_003 ( @@ -2960,7 +2960,7 @@ redeclare package MediumW = MediumW) "Boiler" annotation ( house.Common.Controls.ventilation.DataServer data_bus (redeclare package Medium = Medium) annotation ( - Placement(transformation(origin = { 112.28634122403349, -141.22941384514843 }, + Placement(transformation(origin = { -185.5401120886591, -43.80755598134578 }, extent = {{-10, -10}, {10, 10}} ))); @@ -2975,7 +2975,7 @@ annotation (Line( points={{ 0.0, 0.0 } ,{ 0.0, 0.0 } ,{ 0.0, -75.0 } ,{ 0.0, -75.0 } }, color={255,204,51}, thickness=0.5, -smooth=Smooth.None)); connect(schema_space_001.qGai_flow,occupancy_11.y) +smooth=Smooth.None)); connect(schema_space_001.qGai_flow,occupancy_1.y) annotation (Line( points={{ 0.0, 0.0 } ,{ -25.0, 0.0 } ,{ -25.0, 0.0 } ,{ -50.0, 0.0 } }, color={255,204,51}, @@ -2999,9 +2999,9 @@ annotation (Line( points={{ 0.0, -75.0 } ,{ 15.0, -75.0 } ,{ 15.0, -75.0 } ,{ 30.0, -75.0 } }, color={255,204,51}, thickness=0.5, -smooth=Smooth.None)); connect(system_008.y,emissioncontrol_8.y) +smooth=Smooth.None)); connect(system_008.y,control_007.y) annotation (Line( -points={{ 30.0, -75.0 } ,{ 74.73161557634035, -75.0 } ,{ 74.73161557634035, 151.41102925541978 } ,{ 119.46323115268068, 151.41102925541978 } }, +points={{ 30.0, -75.0 } ,{ -50.04247228454652, -75.0 } ,{ -50.04247228454652, 150.83031054600136 } ,{ -130.08494456909304, 150.83031054600136 } }, color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_008.port_b,system_003.port_1) @@ -3019,7 +3019,7 @@ annotation (Line( points={{ 250.0, 150.0 } ,{ 250.0, 150.0 } ,{ 250.0, 75.0 } ,{ 250.0, 75.0 } }, color={255,204,51}, thickness=0.5, -smooth=Smooth.None)); connect(schema_space_002.qGai_flow,occupancy_12.y) +smooth=Smooth.None)); connect(schema_space_002.qGai_flow,occupancy_2.y) annotation (Line( points={{ 250.0, 150.0 } ,{ 225.0, 150.0 } ,{ 225.0, 150.0 } ,{ 200.0, 150.0 } }, color={255,204,51}, @@ -3043,9 +3043,9 @@ annotation (Line( points={{ 250.0, 75.0 } ,{ 265.0, 75.0 } ,{ 265.0, 75.0 } ,{ 280.0, 75.0 } }, color={255,204,51}, thickness=0.5, -smooth=Smooth.None)); connect(system_010.y,emissioncontrol_9.y) +smooth=Smooth.None)); connect(system_010.y,control_006.y) annotation (Line( -points={{ 280.0, 75.0 } ,{ 237.87135262225942, 75.0 } ,{ 237.87135262225942, 29.62828612681646 } ,{ 195.74270524451885, 29.62828612681646 } }, +points={{ 280.0, 75.0 } ,{ 72.68000094561472, 75.0 } ,{ 72.68000094561472, -164.33829653907998 } ,{ -134.63999810877056, -164.33829653907998 } }, color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_010.port_b,system_003.port_1) @@ -3063,7 +3063,7 @@ annotation (Line( points={{ 500.0, 150.0 } ,{ 500.0, 150.0 } ,{ 500.0, 75.0 } ,{ 500.0, 75.0 } }, color={255,204,51}, thickness=0.5, -smooth=Smooth.None)); connect(schema_space_003.qGai_flow,occupancy_13.y) +smooth=Smooth.None)); connect(schema_space_003.qGai_flow,occupancy_3.y) annotation (Line( points={{ 500.0, 150.0 } ,{ 475.0, 150.0 } ,{ 475.0, 150.0 } ,{ 450.0, 150.0 } }, color={255,204,51}, @@ -3087,9 +3087,9 @@ annotation (Line( points={{ 500.0, 75.0 } ,{ 515.0, 75.0 } ,{ 515.0, 75.0 } ,{ 530.0, 75.0 } }, color={255,204,51}, thickness=0.5, -smooth=Smooth.None)); connect(system_012.y,emissioncontrol_10.y) +smooth=Smooth.None)); connect(system_012.y,control_005.y) annotation (Line( -points={{ 530.0, 75.0 } ,{ 167.70074915645318, 75.0 } ,{ 167.70074915645318, 48.72497338678082 } ,{ -194.59850168709363, 48.72497338678082 } }, +points={{ 530.0, 75.0 } ,{ 243.6249867975394, 75.0 } ,{ 243.62498679753944, 194.84621898353717 } ,{ -42.750026404921165, 194.84621898353717 } }, color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_012.port_b,system_005.port_1) @@ -3099,17 +3099,17 @@ color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_002.dataBus,control_002.dataBus) annotation (Line( -points={{ -158.6637903794453, -94.80867344416055 } ,{ -169.8037115094189, -94.80867344416055 } ,{ -169.8037115094189, -44.17414569234961 } ,{ -180.9436326393925, -44.17414569234961 } }, +points={{ 167.1383707962454, 91.02861458634007 } ,{ 75.66309358879893, 91.02861458634007 } ,{ 75.66309358879893, 185.91320571738788 } ,{ -15.812183618647536, 185.91320571738788 } }, color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_002.port_b,system_004.port_1) annotation (Line( -points={{ -158.6637903794453, -94.80867344416055 } ,{ -64.33189518972264, -94.80867344416055 } ,{ -64.33189518972264, -275.0 } ,{ 30.0, -275.0 } }, +points={{ 167.1383707962454, 91.02861458634007 } ,{ 98.5691853981227, 91.02861458634007 } ,{ 98.5691853981227, -275.0 } ,{ 30.0, -275.0 } }, color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_002.port_b,system_006.port_1) annotation (Line( -points={{ -158.6637903794453, -94.80867344416055 } ,{ 185.66810481027738, -94.80867344416055 } ,{ 185.66810481027733, -125.0 } ,{ 530.0, -125.0 } }, +points={{ 167.1383707962454, 91.02861458634007 } ,{ 348.5691853981227, 91.02861458634007 } ,{ 348.5691853981227, -125.0 } ,{ 530.0, -125.0 } }, color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_004.y,control_003.y) @@ -3154,17 +3154,17 @@ color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_001.dataBus,control_001.dataBus) annotation (Line( -points={{ 188.39201522753748, -0.335905389162841 } ,{ 143.23934001654962, -0.335905389162841 } ,{ 143.23934001654962, 188.9191245938689 } ,{ 98.08666480556177, 188.9191245938689 } }, +points={{ 92.94640039258113, -173.30602085609948 } ,{ -37.011291785731856, -173.30602085609948 } ,{ -37.011291785731856, 100.73141965467681 } ,{ -166.96898396404484, 100.73141965467681 } }, color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_001.port_b,system_002.port_a) annotation (Line( -points={{ 188.39201522753748, -0.335905389162841 } ,{ 14.864112424046112, -0.335905389162841 } ,{ 14.864112424046084, -94.80867344416055 } ,{ -158.6637903794453, -94.80867344416055 } }, +points={{ 92.94640039258113, -173.30602085609948 } ,{ 130.04238559441325, -173.30602085609948 } ,{ 130.04238559441325, 91.02861458634007 } ,{ 167.1383707962454, 91.02861458634007 } }, color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_003.port_2,system_001.port_a) annotation (Line( -points={{ 130.0, -175.0 } ,{ 159.19600761376876, -175.0 } ,{ 159.19600761376876, -0.335905389162841 } ,{ 188.39201522753748, -0.335905389162841 } }, +points={{ 130.0, -175.0 } ,{ 111.47320019629056, -175.0 } ,{ 111.47320019629056, -173.30602085609948 } ,{ 92.94640039258113, -173.30602085609948 } }, color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_013.port_b,system_009.port_a) @@ -3179,7 +3179,7 @@ color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_005.port_2,system_001.port_a) annotation (Line( -points={{ 630.0, -25.0 } ,{ 409.19600761376876, -25.0 } ,{ 409.19600761376876, -0.335905389162841 } ,{ 188.39201522753748, -0.335905389162841 } }, +points={{ 630.0, -25.0 } ,{ 361.4732001962906, -25.0 } ,{ 361.4732001962906, -173.30602085609948 } ,{ 92.94640039258113, -173.30602085609948 } }, color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_014.port_b,system_011.port_a) @@ -3187,74 +3187,74 @@ annotation (Line( points={{ 400.0, -25.0 } ,{ 450.0, -25.0 } ,{ 450.0, 75.0 } ,{ 500.0, 75.0 } }, color={255,204,51}, thickness=0.5, -smooth=Smooth.None)); connect(emissioncontrol_8.dataBus,data_bus.dataBus) +smooth=Smooth.None)); connect(control_007.dataBus,data_bus.dataBus) annotation (Line( -points={{ 119.46323115268068, 151.41102925541978 } ,{ 115.87478618835709, 151.41102925541978 } ,{ 115.87478618835709, -141.22941384514843 } ,{ 112.28634122403349, -141.22941384514843 } }, +points={{ -130.08494456909304, 150.83031054600136 } ,{ -157.81252832887606, 150.83031054600136 } ,{ -157.81252832887606, -43.80755598134578 } ,{ -185.5401120886591, -43.80755598134578 } }, thickness=0.05, -smooth=Smooth.None)); connect(occupancy_11.dataBus,data_bus.dataBus) +smooth=Smooth.None)); connect(occupancy_1.dataBus,data_bus.dataBus) annotation (Line( -points={{ -50.0, 0.0 } ,{ 31.143170612016746, 0.0 } ,{ 31.143170612016746, -141.22941384514843 } ,{ 112.28634122403349, -141.22941384514843 } }, +points={{ -50.0, 0.0 } ,{ -117.77005604432955, 0.0 } ,{ -117.77005604432955, -43.80755598134578 } ,{ -185.5401120886591, -43.80755598134578 } }, thickness=0.05, -smooth=Smooth.None)); connect(emissioncontrol_9.dataBus,data_bus.dataBus) +smooth=Smooth.None)); connect(control_006.dataBus,data_bus.dataBus) annotation (Line( -points={{ 195.74270524451885, 29.62828612681646 } ,{ 154.01452323427617, 29.62828612681646 } ,{ 154.01452323427617, -141.22941384514843 } ,{ 112.28634122403349, -141.22941384514843 } }, +points={{ -134.63999810877056, -164.33829653907998 } ,{ -160.09005509871483, -164.33829653907998 } ,{ -160.09005509871483, -43.80755598134578 } ,{ -185.5401120886591, -43.80755598134578 } }, thickness=0.05, -smooth=Smooth.None)); connect(occupancy_12.dataBus,data_bus.dataBus) +smooth=Smooth.None)); connect(occupancy_2.dataBus,data_bus.dataBus) annotation (Line( -points={{ 200.0, 150.0 } ,{ 156.14317061201675, 150.0 } ,{ 156.14317061201675, -141.22941384514843 } ,{ 112.28634122403349, -141.22941384514843 } }, +points={{ 200.0, 150.0 } ,{ 7.22994395567045, 150.0 } ,{ 7.22994395567045, -43.80755598134578 } ,{ -185.5401120886591, -43.80755598134578 } }, thickness=0.05, -smooth=Smooth.None)); connect(emissioncontrol_10.dataBus,data_bus.dataBus) +smooth=Smooth.None)); connect(control_005.dataBus,data_bus.dataBus) annotation (Line( -points={{ -194.59850168709363, 48.72497338678082 } ,{ -41.15608023153007, 48.72497338678082 } ,{ -41.15608023153007, -141.22941384514843 } ,{ 112.28634122403349, -141.22941384514843 } }, +points={{ -42.750026404921165, 194.84621898353717 } ,{ -114.14506924679014, 194.84621898353717 } ,{ -114.14506924679013, -43.80755598134578 } ,{ -185.5401120886591, -43.80755598134578 } }, thickness=0.05, -smooth=Smooth.None)); connect(occupancy_13.dataBus,data_bus.dataBus) +smooth=Smooth.None)); connect(occupancy_3.dataBus,data_bus.dataBus) annotation (Line( -points={{ 450.0, 150.0 } ,{ 281.1431706120168, 150.0 } ,{ 281.1431706120168, -141.22941384514843 } ,{ 112.28634122403349, -141.22941384514843 } }, +points={{ 450.0, 150.0 } ,{ 132.22994395567048, 150.0 } ,{ 132.22994395567042, -43.80755598134578 } ,{ -185.5401120886591, -43.80755598134578 } }, thickness=0.05, smooth=Smooth.None)); connect(control_002.dataBus,data_bus.dataBus) annotation (Line( -points={{ -180.9436326393925, -44.17414569234961 } ,{ -34.3286457076795, -44.17414569234961 } ,{ -34.3286457076795, -141.22941384514843 } ,{ 112.28634122403349, -141.22941384514843 } }, +points={{ -15.812183618647536, 185.91320571738788 } ,{ -100.67614785365332, 185.91320571738788 } ,{ -100.67614785365332, -43.80755598134578 } ,{ -185.5401120886591, -43.80755598134578 } }, thickness=0.05, smooth=Smooth.None)); connect(control_003.dataBus,data_bus.dataBus) annotation (Line( -points={{ -20.0, -275.0 } ,{ 46.143170612016746, -275.0 } ,{ 46.143170612016746, -141.22941384514843 } ,{ 112.28634122403349, -141.22941384514843 } }, +points={{ -20.0, -275.0 } ,{ -102.77005604432955, -275.0 } ,{ -102.77005604432955, -43.80755598134578 } ,{ -185.5401120886591, -43.80755598134578 } }, thickness=0.05, smooth=Smooth.None)); connect(control_004.dataBus,data_bus.dataBus) annotation (Line( -points={{ 480.0, -125.0 } ,{ 296.1431706120168, -125.0 } ,{ 296.1431706120168, -141.22941384514843 } ,{ 112.28634122403349, -141.22941384514843 } }, +points={{ 480.0, -125.0 } ,{ 147.22994395567048, -125.0 } ,{ 147.22994395567042, -43.80755598134578 } ,{ -185.5401120886591, -43.80755598134578 } }, thickness=0.05, smooth=Smooth.None)); connect(control_001.dataBus,data_bus.dataBus) annotation (Line( -points={{ 98.08666480556177, 188.9191245938689 } ,{ 105.18650301479764, 188.9191245938689 } ,{ 105.18650301479764, -141.22941384514843 } ,{ 112.28634122403349, -141.22941384514843 } }, +points={{ -166.96898396404484, 100.73141965467681 } ,{ -176.25454802635198, 100.73141965467681 } ,{ -176.25454802635198, -43.80755598134578 } ,{ -185.5401120886591, -43.80755598134578 } }, thickness=0.05, smooth=Smooth.None)); connect(schema_space_001.heaPorAir,data_bus.port[1]) annotation (Line( -points={{ 0.0, 0.0 } ,{ 56.143170612016746, 0.0 } ,{ 56.143170612016746, -141.22941384514843 } ,{ 112.28634122403349, -141.22941384514843 } }, +points={{ 0.0, 0.0 } ,{ -92.77005604432955, 0.0 } ,{ -92.77005604432955, -43.80755598134578 } ,{ -185.5401120886591, -43.80755598134578 } }, thickness=0.05, smooth=Smooth.None)); connect(schema_space_001.ports[1],data_bus.port_a[1]) annotation (Line( -points={{ 0.0, 0.0 } ,{ 56.143170612016746, 0.0 } ,{ 56.143170612016746, -141.22941384514843 } ,{ 112.28634122403349, -141.22941384514843 } }, +points={{ 0.0, 0.0 } ,{ -92.77005604432955, 0.0 } ,{ -92.77005604432955, -43.80755598134578 } ,{ -185.5401120886591, -43.80755598134578 } }, thickness=0.05, smooth=Smooth.None)); connect(schema_space_002.heaPorAir,data_bus.port[2]) annotation (Line( -points={{ 250.0, 150.0 } ,{ 181.14317061201675, 150.0 } ,{ 181.14317061201675, -141.22941384514843 } ,{ 112.28634122403349, -141.22941384514843 } }, +points={{ 250.0, 150.0 } ,{ 32.22994395567045, 150.0 } ,{ 32.22994395567045, -43.80755598134578 } ,{ -185.5401120886591, -43.80755598134578 } }, thickness=0.05, smooth=Smooth.None)); connect(schema_space_002.ports[1],data_bus.port_a[2]) annotation (Line( -points={{ 250.0, 150.0 } ,{ 181.14317061201675, 150.0 } ,{ 181.14317061201675, -141.22941384514843 } ,{ 112.28634122403349, -141.22941384514843 } }, +points={{ 250.0, 150.0 } ,{ 32.22994395567045, 150.0 } ,{ 32.22994395567045, -43.80755598134578 } ,{ -185.5401120886591, -43.80755598134578 } }, thickness=0.05, smooth=Smooth.None)); connect(schema_space_003.heaPorAir,data_bus.port[3]) annotation (Line( -points={{ 500.0, 150.0 } ,{ 306.1431706120168, 150.0 } ,{ 306.1431706120168, -141.22941384514843 } ,{ 112.28634122403349, -141.22941384514843 } }, +points={{ 500.0, 150.0 } ,{ 157.22994395567048, 150.0 } ,{ 157.22994395567042, -43.80755598134578 } ,{ -185.5401120886591, -43.80755598134578 } }, thickness=0.05, smooth=Smooth.None)); connect(schema_space_003.ports[1],data_bus.port_a[3]) annotation (Line( -points={{ 500.0, 150.0 } ,{ 306.1431706120168, 150.0 } ,{ 306.1431706120168, -141.22941384514843 } ,{ 112.28634122403349, -141.22941384514843 } }, +points={{ 500.0, 150.0 } ,{ 157.22994395567048, 150.0 } ,{ 157.22994395567042, -43.80755598134578 } ,{ -185.5401120886591, -43.80755598134578 } }, thickness=0.05, -smooth=Smooth.None));annotation (Diagram(coordinateSystem(extent={{-250.0,-325.0},{680.0,250.0}})), Icon( - coordinateSystem(extent={{-250.0,-325.0},{680.0,250.0}}))); +smooth=Smooth.None));annotation (Diagram(coordinateSystem(extent={{-244.97822422381938,-325.0},{680.0,250.0}})), Icon( + coordinateSystem(extent={{-244.97822422381938,-325.0},{680.0,250.0}}))); annotation ( - Documentation(info="Spaces

Spaces

Introduction

Introduction

nameschema_space_001
parameters
mSenFac1.0
AFlo100.0
hRoo2.5
linearizeRadiationtrue
m_flow_nominal0.01
T_start294.15
volume250.0
occupancy
nameoccupancy_11
parameters
emissions
nameparameters
system_007
nEle1
fraRad0.3
Q_flow_nominal2000.0
T_a_nominal363.15
T_b_nominal353.15
TAir_nominal293.15
TRad_nominal293.15
n1.9
deltaM0.01
from_dpfalse
dp_nominal1000.0
linearizedfalse
VWat0.116
mDry52.6
system_008
R7.0
delta00.01
dpFixed_nominal6000.0
l0.0001
from_dptrue
linearizedfalse
deltaM0.02
m_flow_nominal0.01
dpValve_nominal6000.0
external_boundaries
namesurfaceazimuthtiltconstruction
externalwall_17100.0180.0wall
nameconstruction_001
externalwall_18100.0180.0wall
nameconstruction_001
externalwall_19200.0180.0wall
nameconstruction_001
internal_elements
namesurfaceazimuthtiltconstruction
internal_schema_space_001_schema_space_00210.010.0wall
nameinternal_wall
internal_schema_space_001_schema_space_00310.010.0wall
nameinternal_wall
nameschema_space_002
parameters
mSenFac1.0
AFlo100.0
hRoo2.5
linearizeRadiationtrue
m_flow_nominal0.01
T_start294.15
volume250.0
occupancy
nameoccupancy_12
parameters
emissions
nameparameters
system_009
nEle1
fraRad0.3
Q_flow_nominal2000.0
T_a_nominal363.15
T_b_nominal353.15
TAir_nominal293.15
TRad_nominal293.15
n1.9
deltaM0.01
from_dpfalse
dp_nominal1000.0
linearizedfalse
VWat0.116
mDry52.6
system_010
R7.0
delta00.01
dpFixed_nominal6000.0
l0.0001
from_dptrue
linearizedfalse
deltaM0.02
m_flow_nominal0.01
dpValve_nominal6000.0
external_boundaries
namesurfaceazimuthtiltconstruction
externalwall_20100.0180.0wall
nameconstruction_001
externalwall_21100.0180.0wall
nameconstruction_001
externalwall_22200.0180.0wall
nameconstruction_001
internal_elements
namesurfaceazimuthtiltconstruction
internal_schema_space_001_schema_space_00210.010.0wall
nameinternal_wall
internal_schema_space_002_schema_space_00310.010.0wall
nameinternal_wall
nameschema_space_003
parameters
mSenFac1.0
AFlo100.0
hRoo2.5
linearizeRadiationtrue
m_flow_nominal0.01
T_start294.15
volume250.0
occupancy
nameoccupancy_13
parameters
emissions
nameparameters
system_011
nEle1
fraRad0.3
Q_flow_nominal2000.0
T_a_nominal363.15
T_b_nominal353.15
TAir_nominal293.15
TRad_nominal293.15
n1.9
deltaM0.01
from_dpfalse
dp_nominal1000.0
linearizedfalse
VWat0.116
mDry52.6
system_012
R7.0
delta00.01
dpFixed_nominal6000.0
l0.0001
from_dptrue
linearizedfalse
deltaM0.02
m_flow_nominal0.01
dpValve_nominal6000.0
external_boundaries
namesurfaceazimuthtiltconstruction
externalwall_23100.0180.0wall
nameconstruction_001
externalwall_24100.0180.0wall
nameconstruction_001
externalwall_25200.0180.0wall
nameconstruction_001
internal_elements
namesurfaceazimuthtiltconstruction
internal_schema_space_001_schema_space_00310.010.0wall
nameinternal_wall
internal_schema_space_002_schema_space_00310.010.0wall
nameinternal_wall

Conclusions

Conclusions

Spaces

Introduction

Introduction

nameconstruction_001
layers
materialthickness
namematerial_001
k0.035
c1000.0
rho2000.0
epsLw0.85
epsSw0.85
0.1
namematerial_002
k0.035
c1000.0
rho2000.0
epsLw0.85
epsSw0.85
0.1
namematerial_003
k0.035
c1000.0
rho2000.0
epsLw0.85
epsSw0.85
0.1
nameinternal_wall
layers
materialthickness
namebrick
k0.89
c790.0
rho1920.0
epsLw0.85
epsSw0.65
0.2

Conclusions

Conclusions

Spaces

Introduction

Introduction

namesystem_001
parameters
scaFacRad1.5
dTBoi_nominal20
dTRad_nominal10
a{0.9}
effCurBuildings.Fluid.Types.EfficiencyCurves.Constant
T_nominal353.15
fueBuildings.Fluid.Data.Fuels.HeatingOilLowerHeatingValue()
Q_flow_nominal2000
dp_nominal5000
linearizeFlowResistancefalse
deltaM0.1
show_Tfalse
VTan0.2
hTan2
nSeg4
dIns0.002
dp(3000 + 2000)*{2,1}
nominal_mass_flow_rate_boiler0.03571428571428571
nominal_mass_flow_radiator_loop0.07142857142857142
V_flow0.03571428571428571/1000*{0.5,1}

Conclusions

Conclusions

")); + Documentation(info="Spaces

Spaces

Introduction

Introduction

nameschema_space_001
parameters
mSenFac1.0
AFlo100.0
hRoo2.5
linearizeRadiationtrue
m_flow_nominal0.01
T_start294.15
volume250.0
occupancy
nameoccupancy_1
parameters
emissions
nameparameters
system_007
nEle1
fraRad0.3
Q_flow_nominal2000.0
T_a_nominal363.15
T_b_nominal353.15
TAir_nominal293.15
TRad_nominal293.15
n1.9
deltaM0.01
from_dpfalse
dp_nominal1000.0
linearizedfalse
VWat0.116
mDry52.6
system_008
R7.0
delta00.01
dpFixed_nominal6000.0
l0.0001
from_dptrue
linearizedfalse
deltaM0.02
m_flow_nominal0.01
dpValve_nominal6000.0
external_boundaries
namesurfaceazimuthtiltconstruction
externalwall_17100.0180.0wall
nameconstruction_001
externalwall_18100.0180.0wall
nameconstruction_001
externalwall_19200.0180.0wall
nameconstruction_001
internal_elements
namesurfaceazimuthtiltconstruction
internal_schema_space_001_schema_space_00210.010.0wall
nameinternal_wall
internal_schema_space_001_schema_space_00310.010.0wall
nameinternal_wall
nameschema_space_002
parameters
mSenFac1.0
AFlo100.0
hRoo2.5
linearizeRadiationtrue
m_flow_nominal0.01
T_start294.15
volume250.0
occupancy
nameoccupancy_2
parameters
emissions
nameparameters
system_009
nEle1
fraRad0.3
Q_flow_nominal2000.0
T_a_nominal363.15
T_b_nominal353.15
TAir_nominal293.15
TRad_nominal293.15
n1.9
deltaM0.01
from_dpfalse
dp_nominal1000.0
linearizedfalse
VWat0.116
mDry52.6
system_010
R7.0
delta00.01
dpFixed_nominal6000.0
l0.0001
from_dptrue
linearizedfalse
deltaM0.02
m_flow_nominal0.01
dpValve_nominal6000.0
external_boundaries
namesurfaceazimuthtiltconstruction
externalwall_20100.0180.0wall
nameconstruction_001
externalwall_21100.0180.0wall
nameconstruction_001
externalwall_22200.0180.0wall
nameconstruction_001
internal_elements
namesurfaceazimuthtiltconstruction
internal_schema_space_001_schema_space_00210.010.0wall
nameinternal_wall
internal_schema_space_002_schema_space_00310.010.0wall
nameinternal_wall
nameschema_space_003
parameters
mSenFac1.0
AFlo100.0
hRoo2.5
linearizeRadiationtrue
m_flow_nominal0.01
T_start294.15
volume250.0
occupancy
nameoccupancy_3
parameters
emissions
nameparameters
system_011
nEle1
fraRad0.3
Q_flow_nominal2000.0
T_a_nominal363.15
T_b_nominal353.15
TAir_nominal293.15
TRad_nominal293.15
n1.9
deltaM0.01
from_dpfalse
dp_nominal1000.0
linearizedfalse
VWat0.116
mDry52.6
system_012
R7.0
delta00.01
dpFixed_nominal6000.0
l0.0001
from_dptrue
linearizedfalse
deltaM0.02
m_flow_nominal0.01
dpValve_nominal6000.0
external_boundaries
namesurfaceazimuthtiltconstruction
externalwall_23100.0180.0wall
nameconstruction_001
externalwall_24100.0180.0wall
nameconstruction_001
externalwall_25200.0180.0wall
nameconstruction_001
internal_elements
namesurfaceazimuthtiltconstruction
internal_schema_space_001_schema_space_00310.010.0wall
nameinternal_wall
internal_schema_space_002_schema_space_00310.010.0wall
nameinternal_wall

Conclusions

Conclusions

Spaces

Introduction

Introduction

nameinternal_wall
layers
materialthickness
namebrick
k0.89
c790.0
rho1920.0
epsLw0.85
epsSw0.65
0.2
nameconstruction_001
layers
materialthickness
namematerial_001
k0.035
c1000.0
rho2000.0
epsLw0.85
epsSw0.85
0.1
namematerial_002
k0.035
c1000.0
rho2000.0
epsLw0.85
epsSw0.85
0.1
namematerial_003
k0.035
c1000.0
rho2000.0
epsLw0.85
epsSw0.85
0.1

Conclusions

Conclusions

Spaces

Introduction

Introduction

namesystem_001
parameters
scaFacRad1.5
dTBoi_nominal20
dTRad_nominal10
a{0.9}
effCurBuildings.Fluid.Types.EfficiencyCurves.Constant
T_nominal353.15
fueBuildings.Fluid.Data.Fuels.HeatingOilLowerHeatingValue()
Q_flow_nominal2000
dp_nominal5000
linearizeFlowResistancefalse
deltaM0.1
show_Tfalse
VTan0.2
hTan2
nSeg4
dIns0.002
dp(3000 + 2000)*{2,1}
nominal_mass_flow_rate_boiler0.03571428571428571
nominal_mass_flow_radiator_loop0.07142857142857142
V_flow0.03571428571428571/1000*{0.5,1}

Conclusions

Conclusions

")); end building; diff --git a/tests/data/house_yaml.mo b/tests/data/house_yaml.mo index 44511d6..2e16eea 100644 --- a/tests/data/house_yaml.mo +++ b/tests/data/house_yaml.mo @@ -404,7 +404,7 @@ constructed by the signals connected to this bus. fillPattern=FillPattern.Solid)}), Diagram(coordinateSystem( preserveAspectRatio=false))); end AHU_G36; - model EmissionControlEmissioncontrol_8 + model EmissionControlControl_007 parameter Real schedule[:]=3600*{7,19}; parameter Modelica.Units.SI.Temperature THeaSet= 273.15+24; @@ -458,17 +458,17 @@ connect(dataBus.TCooSetSchema_space_001, emissionControl.TCooSet); connect(dataBus.TZonSchema_space_001, emissionControl.TZon); connect(dataBus.yCooSystem_008, emissionControl.yCoo); connect(dataBus.yHeaSystem_008, emissionControl.yHea); -end EmissionControlEmissioncontrol_8; - model OccupancyOccupancy_11 +end EmissionControlControl_007; + model OccupancyOccupancy_1 extends house_yaml.Common.Occupancy.SimpleOccupancy ; Controls.BaseClasses.DataBus dataBus annotation (Placement(transformation( extent={{-120,-18},{-80,22}}), iconTransformation(extent={{-120,62},{-78,98}}))); equation connect(dataBus.OccupiedSchema_space_001, occSch2.occupied); - end OccupancyOccupancy_11; + end OccupancyOccupancy_1; - model EmissionControlEmissioncontrol_9 + model EmissionControlControl_006 parameter Real schedule[:]=3600*{7,19}; parameter Modelica.Units.SI.Temperature THeaSet= 273.15+24; @@ -522,17 +522,17 @@ connect(dataBus.TCooSetSchema_space_002, emissionControl.TCooSet); connect(dataBus.TZonSchema_space_002, emissionControl.TZon); connect(dataBus.yCooSystem_010, emissionControl.yCoo); connect(dataBus.yHeaSystem_010, emissionControl.yHea); -end EmissionControlEmissioncontrol_9; - model OccupancyOccupancy_12 +end EmissionControlControl_006; + model OccupancyOccupancy_2 extends house_yaml.Common.Occupancy.SimpleOccupancy ; Controls.BaseClasses.DataBus dataBus annotation (Placement(transformation( extent={{-120,-18},{-80,22}}), iconTransformation(extent={{-120,62},{-78,98}}))); equation connect(dataBus.OccupiedSchema_space_002, occSch2.occupied); - end OccupancyOccupancy_12; + end OccupancyOccupancy_2; - model EmissionControlEmissioncontrol_10 + model EmissionControlControl_005 parameter Real schedule[:]=3600*{7,19}; parameter Modelica.Units.SI.Temperature THeaSet= 273.15+24; @@ -586,15 +586,15 @@ connect(dataBus.TCooSetSchema_space_003, emissionControl.TCooSet); connect(dataBus.TZonSchema_space_003, emissionControl.TZon); connect(dataBus.yCooSystem_012, emissionControl.yCoo); connect(dataBus.yHeaSystem_012, emissionControl.yHea); -end EmissionControlEmissioncontrol_10; - model OccupancyOccupancy_13 +end EmissionControlControl_005; + model OccupancyOccupancy_3 extends house_yaml.Common.Occupancy.SimpleOccupancy ; Controls.BaseClasses.DataBus dataBus annotation (Placement(transformation( extent={{-120,-18},{-80,22}}), iconTransformation(extent={{-120,62},{-78,98}}))); equation connect(dataBus.OccupiedSchema_space_003, occSch2.occupied); - end OccupancyOccupancy_13; + end OccupancyOccupancy_3; model CollectorControlControl_002 Buildings.Controls.OBC.CDL.Reals.PIDWithReset @@ -716,23 +716,23 @@ iconTransformation(origin = {-2, -42}, extent = {{-110, -9}, {-90, 9}}))); Cont annotation (Placement(transformation( extent={{-120,-18},{-80,22}}), iconTransformation(extent={{-120,62},{-78,98}}))); Modelica.Blocks.Sources.RealExpression - TCooSetEmissioncontrol_8 + TCooSetControl_007 (y=298.15); -Modelica.Blocks.Sources.RealExpression - TColSetControl_003 - (y=363.15); -Modelica.Blocks.Sources.RealExpression - TColSetControl_004 - (y=363.15); Modelica.Blocks.Sources.RealExpression TAirOutControl_001 (y=0.0); Modelica.Blocks.Sources.RealExpression - TCooSetEmissioncontrol_9 + TCooSetControl_006 (y=298.15); Modelica.Blocks.Sources.RealExpression - TCooSetEmissioncontrol_10 + TColSetControl_003 + (y=363.15); +Modelica.Blocks.Sources.RealExpression + TCooSetControl_005 (y=298.15); +Modelica.Blocks.Sources.RealExpression + TColSetControl_004 + (y=363.15); Modelica.Blocks.Sources.BooleanExpression triggerControl_003 (y=true); @@ -753,17 +753,17 @@ connect(dataBus.ppmCO2Schema_space_001, TRoo1[1].ppm); connect(dataBus.ppmCO2Schema_space_002, TRoo1[2].ppm); connect(dataBus.ppmCO2Schema_space_003, TRoo1[3].ppm); connect(dataBus.TCooSetSchema_space_001, -TCooSetEmissioncontrol_8.y); -connect(dataBus.TColSetControl_003, -TColSetControl_003.y); -connect(dataBus.TColSetControl_004, -TColSetControl_004.y); +TCooSetControl_007.y); connect(dataBus.TAirOutSystem_001, TAirOutControl_001.y); connect(dataBus.TCooSetSchema_space_002, -TCooSetEmissioncontrol_9.y); +TCooSetControl_006.y); +connect(dataBus.TColSetControl_003, +TColSetControl_003.y); connect(dataBus.TCooSetSchema_space_003, -TCooSetEmissioncontrol_10.y); +TCooSetControl_005.y); +connect(dataBus.TColSetControl_004, +TColSetControl_004.y); connect(dataBus.triggerControl_003, triggerControl_003.y); connect(dataBus.triggerControl_004, @@ -2625,13 +2625,13 @@ parameter Integer nRoo = 2 "Number of rooms"; Placement(transformation(origin = { 30, -75 }, extent = {{-10, -10}, {10, 10}} ))); - house_yaml.Common.Controls.ventilation.EmissionControlEmissioncontrol_8 - emissioncontrol_8 annotation ( - Placement(transformation(origin = { -134.96463397443023, -137.31262375475157 }, + house_yaml.Common.Controls.ventilation.EmissionControlControl_007 + control_007 annotation ( + Placement(transformation(origin = { 40.94379200966132, -191.9280233214194 }, extent = {{-10, -10}, {10, 10}} ))); - house_yaml.Common.Controls.ventilation.OccupancyOccupancy_11 - occupancy_11( occupancy=3600*{7, 19}, + house_yaml.Common.Controls.ventilation.OccupancyOccupancy_1 + occupancy_1( occupancy=3600*{7, 19}, gain=[35; 70; 30], k=1/6/4 ) annotation ( @@ -2701,13 +2701,13 @@ parameter Integer nRoo = 2 "Number of rooms"; Placement(transformation(origin = { 280, 75 }, extent = {{-10, -10}, {10, 10}} ))); - house_yaml.Common.Controls.ventilation.EmissionControlEmissioncontrol_9 - emissioncontrol_9 annotation ( - Placement(transformation(origin = { -160.01033010621606, 143.41114185600884 }, + house_yaml.Common.Controls.ventilation.EmissionControlControl_006 + control_006 annotation ( + Placement(transformation(origin = { -128.8618891479775, -120.25668203575391 }, extent = {{-10, -10}, {10, 10}} ))); - house_yaml.Common.Controls.ventilation.OccupancyOccupancy_12 - occupancy_12( occupancy=3600*{7, 19}, + house_yaml.Common.Controls.ventilation.OccupancyOccupancy_2 + occupancy_2( occupancy=3600*{7, 19}, gain=[35; 70; 30], k=1/6/4 ) annotation ( @@ -2777,13 +2777,13 @@ parameter Integer nRoo = 2 "Number of rooms"; Placement(transformation(origin = { 530, 75 }, extent = {{-10, -10}, {10, 10}} ))); - house_yaml.Common.Controls.ventilation.EmissionControlEmissioncontrol_10 - emissioncontrol_10 annotation ( - Placement(transformation(origin = { 108.87800459012674, -153.81824435482702 }, + house_yaml.Common.Controls.ventilation.EmissionControlControl_005 + control_005 annotation ( + Placement(transformation(origin = { 149.26594214819474, -144.0171506390989 }, extent = {{-10, -10}, {10, 10}} ))); - house_yaml.Common.Controls.ventilation.OccupancyOccupancy_13 - occupancy_13( occupancy=3600*{7, 19}, + house_yaml.Common.Controls.ventilation.OccupancyOccupancy_3 + occupancy_3( occupancy=3600*{7, 19}, gain=[35; 70; 30], k=1/6/4 ) annotation ( @@ -2833,12 +2833,12 @@ parameter Integer nRoo = 2 "Number of rooms"; redeclare package Medium = MediumW ) annotation ( - Placement(transformation(origin = { 141.23642390973012, 131.87014322807966 }, + Placement(transformation(origin = { -39.70396230424323, -168.4720893482176 }, extent = {{-10, -10}, {10, 10}} ))); house_yaml.Common.Controls.ventilation.CollectorControlControl_002 control_002 annotation ( - Placement(transformation(origin = { 81.00574365488094, 149.95115646382456 }, + Placement(transformation(origin = { 69.99518355619206, -171.70371848552955 }, extent = {{-10, -10}, {10, 10}} ))); Buildings.Fluid.Actuators.Valves.ThreeWayEqualPercentageLinear @@ -2910,7 +2910,7 @@ BoilerWithStorageSystem_001 system_001( V_flow=0.03571428571428571/1000*{0.5,1} , redeclare package MediumW = MediumW) "Boiler" annotation ( - Placement(transformation(origin = { -85.29863140635692, -175.51824615474916 }, + Placement(transformation(origin = { -71.34067271596895, -182.8707008188481 }, extent = {{-10, -10}, {10, 10}} ))); house_yaml.Common.Controls.ventilation.BoilerControlControl_001 @@ -2918,7 +2918,7 @@ redeclare package MediumW = MediumW) "Boiler" annotation ( threshold_outdoor_air_cutoff=288.15, threshold_to_switch_off_boiler=288.15 ) annotation ( - Placement(transformation(origin = { -53.400662219084595, -183.1214735095933 }, + Placement(transformation(origin = { 142.07436993497487, 111.31779804961617 }, extent = {{-10, -10}, {10, 10}} ))); Buildings.Fluid.FixedResistances.Junction system_003 ( @@ -2960,7 +2960,7 @@ redeclare package MediumW = MediumW) "Boiler" annotation ( house_yaml.Common.Controls.ventilation.DataServer data_bus (redeclare package Medium = Medium) annotation ( - Placement(transformation(origin = { -21.86754463394467, 181.10974344373776 }, + Placement(transformation(origin = { 192.3412392205387, -51.85447150145035 }, extent = {{-10, -10}, {10, 10}} ))); @@ -2975,7 +2975,7 @@ annotation (Line( points={{ 0.0, 0.0 } ,{ 0.0, 0.0 } ,{ 0.0, -75.0 } ,{ 0.0, -75.0 } }, color={255,204,51}, thickness=0.5, -smooth=Smooth.None)); connect(schema_space_001.qGai_flow,occupancy_11.y) +smooth=Smooth.None)); connect(schema_space_001.qGai_flow,occupancy_1.y) annotation (Line( points={{ 0.0, 0.0 } ,{ -25.0, 0.0 } ,{ -25.0, 0.0 } ,{ -50.0, 0.0 } }, color={255,204,51}, @@ -2999,9 +2999,9 @@ annotation (Line( points={{ 0.0, -75.0 } ,{ 15.0, -75.0 } ,{ 15.0, -75.0 } ,{ 30.0, -75.0 } }, color={255,204,51}, thickness=0.5, -smooth=Smooth.None)); connect(system_008.y,emissioncontrol_8.y) +smooth=Smooth.None)); connect(system_008.y,control_007.y) annotation (Line( -points={{ 30.0, -75.0 } ,{ -52.482316987215114, -75.0 } ,{ -52.482316987215114, -137.31262375475157 } ,{ -134.96463397443023, -137.31262375475157 } }, +points={{ 30.0, -75.0 } ,{ 35.47189600483066, -75.0 } ,{ 35.47189600483066, -191.9280233214194 } ,{ 40.94379200966132, -191.9280233214194 } }, color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_008.port_b,system_003.port_1) @@ -3019,7 +3019,7 @@ annotation (Line( points={{ 250.0, 150.0 } ,{ 250.0, 150.0 } ,{ 250.0, 75.0 } ,{ 250.0, 75.0 } }, color={255,204,51}, thickness=0.5, -smooth=Smooth.None)); connect(schema_space_002.qGai_flow,occupancy_12.y) +smooth=Smooth.None)); connect(schema_space_002.qGai_flow,occupancy_2.y) annotation (Line( points={{ 250.0, 150.0 } ,{ 225.0, 150.0 } ,{ 225.0, 150.0 } ,{ 200.0, 150.0 } }, color={255,204,51}, @@ -3043,9 +3043,9 @@ annotation (Line( points={{ 250.0, 75.0 } ,{ 265.0, 75.0 } ,{ 265.0, 75.0 } ,{ 280.0, 75.0 } }, color={255,204,51}, thickness=0.5, -smooth=Smooth.None)); connect(system_010.y,emissioncontrol_9.y) +smooth=Smooth.None)); connect(system_010.y,control_006.y) annotation (Line( -points={{ 280.0, 75.0 } ,{ 59.994834946891956, 75.0 } ,{ 59.994834946891984, 143.41114185600884 } ,{ -160.01033010621606, 143.41114185600884 } }, +points={{ 280.0, 75.0 } ,{ 75.56905542601123, 75.0 } ,{ 75.56905542601126, -120.25668203575391 } ,{ -128.8618891479775, -120.25668203575391 } }, color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_010.port_b,system_003.port_1) @@ -3063,7 +3063,7 @@ annotation (Line( points={{ 500.0, 150.0 } ,{ 500.0, 150.0 } ,{ 500.0, 75.0 } ,{ 500.0, 75.0 } }, color={255,204,51}, thickness=0.5, -smooth=Smooth.None)); connect(schema_space_003.qGai_flow,occupancy_13.y) +smooth=Smooth.None)); connect(schema_space_003.qGai_flow,occupancy_3.y) annotation (Line( points={{ 500.0, 150.0 } ,{ 475.0, 150.0 } ,{ 475.0, 150.0 } ,{ 450.0, 150.0 } }, color={255,204,51}, @@ -3087,9 +3087,9 @@ annotation (Line( points={{ 500.0, 75.0 } ,{ 515.0, 75.0 } ,{ 515.0, 75.0 } ,{ 530.0, 75.0 } }, color={255,204,51}, thickness=0.5, -smooth=Smooth.None)); connect(system_012.y,emissioncontrol_10.y) +smooth=Smooth.None)); connect(system_012.y,control_005.y) annotation (Line( -points={{ 530.0, 75.0 } ,{ 319.43900229506335, 75.0 } ,{ 319.43900229506335, -153.81824435482702 } ,{ 108.87800459012674, -153.81824435482702 } }, +points={{ 530.0, 75.0 } ,{ 339.6329710740974, 75.0 } ,{ 339.6329710740973, -144.0171506390989 } ,{ 149.26594214819474, -144.0171506390989 } }, color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_012.port_b,system_005.port_1) @@ -3099,17 +3099,17 @@ color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_002.dataBus,control_002.dataBus) annotation (Line( -points={{ 141.23642390973012, 131.87014322807966 } ,{ 111.12108378230553, 131.87014322807966 } ,{ 111.12108378230553, 149.95115646382456 } ,{ 81.00574365488094, 149.95115646382456 } }, +points={{ -39.70396230424323, -168.4720893482176 } ,{ 15.14561062597442, -168.4720893482176 } ,{ 15.145610625974413, -171.70371848552955 } ,{ 69.99518355619206, -171.70371848552955 } }, color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_002.port_b,system_004.port_1) annotation (Line( -points={{ 141.23642390973012, 131.87014322807966 } ,{ 85.61821195486506, 131.87014322807966 } ,{ 85.61821195486506, -275.0 } ,{ 30.0, -275.0 } }, +points={{ -39.70396230424323, -168.4720893482176 } ,{ -4.851981152121617, -168.4720893482176 } ,{ -4.85198115212161, -275.0 } ,{ 30.0, -275.0 } }, color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_002.port_b,system_006.port_1) annotation (Line( -points={{ 141.23642390973012, 131.87014322807966 } ,{ 335.61821195486505, 131.87014322807966 } ,{ 335.61821195486505, -125.0 } ,{ 530.0, -125.0 } }, +points={{ -39.70396230424323, -168.4720893482176 } ,{ 245.14801884787838, -168.4720893482176 } ,{ 245.1480188478784, -125.0 } ,{ 530.0, -125.0 } }, color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_004.y,control_003.y) @@ -3154,17 +3154,17 @@ color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_001.dataBus,control_001.dataBus) annotation (Line( -points={{ -85.29863140635692, -175.51824615474916 } ,{ -69.34964681272075, -175.51824615474916 } ,{ -69.34964681272075, -183.1214735095933 } ,{ -53.400662219084595, -183.1214735095933 } }, +points={{ -71.34067271596895, -182.8707008188481 } ,{ 35.36684860950295, -182.8707008188481 } ,{ 35.366848609502966, 111.31779804961617 } ,{ 142.07436993497487, 111.31779804961617 } }, color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_001.port_b,system_002.port_a) annotation (Line( -points={{ -85.29863140635692, -175.51824615474916 } ,{ 27.9688962516866, -175.51824615474916 } ,{ 27.9688962516866, 131.87014322807966 } ,{ 141.23642390973012, 131.87014322807966 } }, +points={{ -71.34067271596895, -182.8707008188481 } ,{ -55.52231751010609, -182.8707008188481 } ,{ -55.52231751010609, -168.4720893482176 } ,{ -39.70396230424323, -168.4720893482176 } }, color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_003.port_2,system_001.port_a) annotation (Line( -points={{ 130.0, -175.0 } ,{ 22.35068429682154, -175.0 } ,{ 22.35068429682154, -175.51824615474916 } ,{ -85.29863140635692, -175.51824615474916 } }, +points={{ 130.0, -175.0 } ,{ 29.329663642015532, -175.0 } ,{ 29.329663642015518, -182.8707008188481 } ,{ -71.34067271596895, -182.8707008188481 } }, color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_013.port_b,system_009.port_a) @@ -3179,7 +3179,7 @@ color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_005.port_2,system_001.port_a) annotation (Line( -points={{ 630.0, -25.0 } ,{ 272.35068429682156, -25.0 } ,{ 272.35068429682156, -175.51824615474916 } ,{ -85.29863140635692, -175.51824615474916 } }, +points={{ 630.0, -25.0 } ,{ 279.32966364201553, -25.0 } ,{ 279.32966364201553, -182.8707008188481 } ,{ -71.34067271596895, -182.8707008188481 } }, color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_014.port_b,system_011.port_a) @@ -3187,74 +3187,74 @@ annotation (Line( points={{ 400.0, -25.0 } ,{ 450.0, -25.0 } ,{ 450.0, 75.0 } ,{ 500.0, 75.0 } }, color={255,204,51}, thickness=0.5, -smooth=Smooth.None)); connect(emissioncontrol_8.dataBus,data_bus.dataBus) +smooth=Smooth.None)); connect(control_007.dataBus,data_bus.dataBus) annotation (Line( -points={{ -134.96463397443023, -137.31262375475157 } ,{ -78.41608930418745, -137.31262375475157 } ,{ -78.41608930418745, 181.10974344373776 } ,{ -21.86754463394467, 181.10974344373776 } }, +points={{ 40.94379200966132, -191.9280233214194 } ,{ 116.64251561510001, -191.9280233214194 } ,{ 116.64251561510002, -51.85447150145035 } ,{ 192.3412392205387, -51.85447150145035 } }, thickness=0.05, -smooth=Smooth.None)); connect(occupancy_11.dataBus,data_bus.dataBus) +smooth=Smooth.None)); connect(occupancy_1.dataBus,data_bus.dataBus) annotation (Line( -points={{ -50.0, 0.0 } ,{ -35.93377231697234, 0.0 } ,{ -35.93377231697234, 181.10974344373776 } ,{ -21.86754463394467, 181.10974344373776 } }, +points={{ -50.0, 0.0 } ,{ 71.17061961026936, 0.0 } ,{ 71.17061961026936, -51.85447150145035 } ,{ 192.3412392205387, -51.85447150145035 } }, thickness=0.05, -smooth=Smooth.None)); connect(emissioncontrol_9.dataBus,data_bus.dataBus) +smooth=Smooth.None)); connect(control_006.dataBus,data_bus.dataBus) annotation (Line( -points={{ -160.01033010621606, 143.41114185600884 } ,{ -90.93893737008037, 143.41114185600884 } ,{ -90.93893737008037, 181.10974344373776 } ,{ -21.86754463394467, 181.10974344373776 } }, +points={{ -128.8618891479775, -120.25668203575391 } ,{ 31.7396750362806, -120.25668203575391 } ,{ 31.7396750362806, -51.85447150145035 } ,{ 192.3412392205387, -51.85447150145035 } }, thickness=0.05, -smooth=Smooth.None)); connect(occupancy_12.dataBus,data_bus.dataBus) +smooth=Smooth.None)); connect(occupancy_2.dataBus,data_bus.dataBus) annotation (Line( -points={{ 200.0, 150.0 } ,{ 89.06622768302766, 150.0 } ,{ 89.06622768302766, 181.10974344373776 } ,{ -21.86754463394467, 181.10974344373776 } }, +points={{ 200.0, 150.0 } ,{ 196.17061961026934, 150.0 } ,{ 196.17061961026934, -51.85447150145035 } ,{ 192.3412392205387, -51.85447150145035 } }, thickness=0.05, -smooth=Smooth.None)); connect(emissioncontrol_10.dataBus,data_bus.dataBus) +smooth=Smooth.None)); connect(control_005.dataBus,data_bus.dataBus) annotation (Line( -points={{ 108.87800459012674, -153.81824435482702 } ,{ 43.50522997809104, -153.81824435482702 } ,{ 43.50522997809102, 181.10974344373776 } ,{ -21.86754463394467, 181.10974344373776 } }, +points={{ 149.26594214819474, -144.0171506390989 } ,{ 170.80359068436672, -144.0171506390989 } ,{ 170.80359068436672, -51.85447150145035 } ,{ 192.3412392205387, -51.85447150145035 } }, thickness=0.05, -smooth=Smooth.None)); connect(occupancy_13.dataBus,data_bus.dataBus) +smooth=Smooth.None)); connect(occupancy_3.dataBus,data_bus.dataBus) annotation (Line( -points={{ 450.0, 150.0 } ,{ 214.06622768302768, 150.0 } ,{ 214.06622768302765, 181.10974344373776 } ,{ -21.86754463394467, 181.10974344373776 } }, +points={{ 450.0, 150.0 } ,{ 321.17061961026934, 150.0 } ,{ 321.17061961026934, -51.85447150145035 } ,{ 192.3412392205387, -51.85447150145035 } }, thickness=0.05, smooth=Smooth.None)); connect(control_002.dataBus,data_bus.dataBus) annotation (Line( -points={{ 81.00574365488094, 149.95115646382456 } ,{ 29.569099510468135, 149.95115646382456 } ,{ 29.56909951046814, 181.10974344373776 } ,{ -21.86754463394467, 181.10974344373776 } }, +points={{ 69.99518355619206, -171.70371848552955 } ,{ 131.1682113883654, -171.70371848552955 } ,{ 131.1682113883654, -51.85447150145035 } ,{ 192.3412392205387, -51.85447150145035 } }, thickness=0.05, smooth=Smooth.None)); connect(control_003.dataBus,data_bus.dataBus) annotation (Line( -points={{ -20.0, -275.0 } ,{ -20.933772316972338, -275.0 } ,{ -20.933772316972338, 181.10974344373776 } ,{ -21.86754463394467, 181.10974344373776 } }, +points={{ -20.0, -275.0 } ,{ 86.17061961026936, -275.0 } ,{ 86.17061961026936, -51.85447150145035 } ,{ 192.3412392205387, -51.85447150145035 } }, thickness=0.05, smooth=Smooth.None)); connect(control_004.dataBus,data_bus.dataBus) annotation (Line( -points={{ 480.0, -125.0 } ,{ 229.06622768302768, -125.0 } ,{ 229.06622768302765, 181.10974344373776 } ,{ -21.86754463394467, 181.10974344373776 } }, +points={{ 480.0, -125.0 } ,{ 336.17061961026934, -125.0 } ,{ 336.17061961026934, -51.85447150145035 } ,{ 192.3412392205387, -51.85447150145035 } }, thickness=0.05, smooth=Smooth.None)); connect(control_001.dataBus,data_bus.dataBus) annotation (Line( -points={{ -53.400662219084595, -183.1214735095933 } ,{ -37.634103426514635, -183.1214735095933 } ,{ -37.634103426514635, 181.10974344373776 } ,{ -21.86754463394467, 181.10974344373776 } }, +points={{ 142.07436993497487, 111.31779804961617 } ,{ 167.2078045777568, 111.31779804961617 } ,{ 167.2078045777568, -51.85447150145035 } ,{ 192.3412392205387, -51.85447150145035 } }, thickness=0.05, smooth=Smooth.None)); connect(schema_space_001.heaPorAir,data_bus.port[1]) annotation (Line( -points={{ 0.0, 0.0 } ,{ -10.933772316972336, 0.0 } ,{ -10.933772316972336, 181.10974344373776 } ,{ -21.86754463394467, 181.10974344373776 } }, +points={{ 0.0, 0.0 } ,{ 96.17061961026936, 0.0 } ,{ 96.17061961026936, -51.85447150145035 } ,{ 192.3412392205387, -51.85447150145035 } }, thickness=0.05, smooth=Smooth.None)); connect(schema_space_001.ports[1],data_bus.port_a[1]) annotation (Line( -points={{ 0.0, 0.0 } ,{ -10.933772316972336, 0.0 } ,{ -10.933772316972336, 181.10974344373776 } ,{ -21.86754463394467, 181.10974344373776 } }, +points={{ 0.0, 0.0 } ,{ 96.17061961026936, 0.0 } ,{ 96.17061961026936, -51.85447150145035 } ,{ 192.3412392205387, -51.85447150145035 } }, thickness=0.05, smooth=Smooth.None)); connect(schema_space_002.heaPorAir,data_bus.port[2]) annotation (Line( -points={{ 250.0, 150.0 } ,{ 114.06622768302768, 150.0 } ,{ 114.06622768302765, 181.10974344373776 } ,{ -21.86754463394467, 181.10974344373776 } }, +points={{ 250.0, 150.0 } ,{ 221.17061961026934, 150.0 } ,{ 221.17061961026934, -51.85447150145035 } ,{ 192.3412392205387, -51.85447150145035 } }, thickness=0.05, smooth=Smooth.None)); connect(schema_space_002.ports[1],data_bus.port_a[2]) annotation (Line( -points={{ 250.0, 150.0 } ,{ 114.06622768302768, 150.0 } ,{ 114.06622768302765, 181.10974344373776 } ,{ -21.86754463394467, 181.10974344373776 } }, +points={{ 250.0, 150.0 } ,{ 221.17061961026934, 150.0 } ,{ 221.17061961026934, -51.85447150145035 } ,{ 192.3412392205387, -51.85447150145035 } }, thickness=0.05, smooth=Smooth.None)); connect(schema_space_003.heaPorAir,data_bus.port[3]) annotation (Line( -points={{ 500.0, 150.0 } ,{ 239.06622768302765, 150.0 } ,{ 239.06622768302768, 181.10974344373776 } ,{ -21.86754463394467, 181.10974344373776 } }, +points={{ 500.0, 150.0 } ,{ 346.17061961026934, 150.0 } ,{ 346.17061961026934, -51.85447150145035 } ,{ 192.3412392205387, -51.85447150145035 } }, thickness=0.05, smooth=Smooth.None)); connect(schema_space_003.ports[1],data_bus.port_a[3]) annotation (Line( -points={{ 500.0, 150.0 } ,{ 239.06622768302765, 150.0 } ,{ 239.06622768302768, 181.10974344373776 } ,{ -21.86754463394467, 181.10974344373776 } }, +points={{ 500.0, 150.0 } ,{ 346.17061961026934, 150.0 } ,{ 346.17061961026934, -51.85447150145035 } ,{ 192.3412392205387, -51.85447150145035 } }, thickness=0.05, -smooth=Smooth.None));annotation (Diagram(coordinateSystem(extent={{-243.20614892926338,-325.0},{680.0,250.0}})), Icon( - coordinateSystem(extent={{-243.20614892926338,-325.0},{680.0,250.0}}))); +smooth=Smooth.None));annotation (Diagram(coordinateSystem(extent={{-230.49320733407646,-325.0},{680.0,250.0}})), Icon( + coordinateSystem(extent={{-230.49320733407646,-325.0},{680.0,250.0}}))); annotation ( - Documentation(info="Spaces

Spaces

Introduction

Introduction

nameschema_space_001
parameters
mSenFac1.0
AFlo100.0
hRoo2.5
linearizeRadiationtrue
m_flow_nominal0.01
T_start294.15
volume250.0
occupancy
nameoccupancy_11
parameters
emissions
nameparameters
system_007
nEle1
fraRad0.3
Q_flow_nominal2000.0
T_a_nominal363.15
T_b_nominal353.15
TAir_nominal293.15
TRad_nominal293.15
n1.9
deltaM0.01
from_dpfalse
dp_nominal0.0
linearizedfalse
VWat0.116
mDry52.6
system_008
R7.0
delta00.01
dpFixed_nominal6000.0
l0.0001
from_dptrue
linearizedfalse
deltaM0.02
m_flow_nominal0.01
dpValve_nominal6000.0
external_boundaries
namesurfaceazimuthtiltconstruction
externalwall_17100.0180.0wall
nameconstruction_001
externalwall_18100.0180.0wall
nameconstruction_001
externalwall_19200.0180.0wall
nameconstruction_001
internal_elements
namesurfaceazimuthtiltconstruction
internal_schema_space_001_schema_space_00210.010.0wall
nameinternal_wall
internal_schema_space_001_schema_space_00310.010.0wall
nameinternal_wall
nameschema_space_002
parameters
mSenFac1.0
AFlo100.0
hRoo2.5
linearizeRadiationtrue
m_flow_nominal0.01
T_start294.15
volume250.0
occupancy
nameoccupancy_12
parameters
emissions
nameparameters
system_009
nEle1
fraRad0.3
Q_flow_nominal2000.0
T_a_nominal363.15
T_b_nominal353.15
TAir_nominal293.15
TRad_nominal293.15
n1.9
deltaM0.01
from_dpfalse
dp_nominal0.0
linearizedfalse
VWat0.116
mDry52.6
system_010
R7.0
delta00.01
dpFixed_nominal6000.0
l0.0001
from_dptrue
linearizedfalse
deltaM0.02
m_flow_nominal0.01
dpValve_nominal6000.0
external_boundaries
namesurfaceazimuthtiltconstruction
externalwall_20100.0180.0wall
nameconstruction_001
externalwall_21100.0180.0wall
nameconstruction_001
externalwall_22200.0180.0wall
nameconstruction_001
internal_elements
namesurfaceazimuthtiltconstruction
internal_schema_space_001_schema_space_00210.010.0wall
nameinternal_wall
internal_schema_space_002_schema_space_00310.010.0wall
nameinternal_wall
nameschema_space_003
parameters
mSenFac1.0
AFlo100.0
hRoo2.5
linearizeRadiationtrue
m_flow_nominal0.01
T_start294.15
volume250.0
occupancy
nameoccupancy_13
parameters
emissions
nameparameters
system_011
nEle1
fraRad0.3
Q_flow_nominal2000.0
T_a_nominal363.15
T_b_nominal353.15
TAir_nominal293.15
TRad_nominal293.15
n1.9
deltaM0.01
from_dpfalse
dp_nominal0.0
linearizedfalse
VWat0.116
mDry52.6
system_012
R7.0
delta00.01
dpFixed_nominal6000.0
l0.0001
from_dptrue
linearizedfalse
deltaM0.02
m_flow_nominal0.01
dpValve_nominal6000.0
external_boundaries
namesurfaceazimuthtiltconstruction
externalwall_23100.0180.0wall
nameconstruction_001
externalwall_24100.0180.0wall
nameconstruction_001
externalwall_25200.0180.0wall
nameconstruction_001
internal_elements
namesurfaceazimuthtiltconstruction
internal_schema_space_001_schema_space_00310.010.0wall
nameinternal_wall
internal_schema_space_002_schema_space_00310.010.0wall
nameinternal_wall

Conclusions

Conclusions

Spaces

Introduction

Introduction

nameinternal_wall
layers
materialthickness
namebrick
k0.89
c790.0
rho1920.0
epsLw0.85
epsSw0.65
0.2
nameconstruction_001
layers
materialthickness
namematerial_001
k0.035
c1000.0
rho2000.0
epsLw0.85
epsSw0.65
0.1
namematerial_002
k0.035
c1000.0
rho2000.0
epsLw0.85
epsSw0.65
0.1
namematerial_003
k0.035
c1000.0
rho2000.0
epsLw0.85
epsSw0.65
0.1

Conclusions

Conclusions

Spaces

Introduction

Introduction

namesystem_001
parameters
scaFacRad1.5
dTBoi_nominal20
dTRad_nominal10
a{0.9}
effCurBuildings.Fluid.Types.EfficiencyCurves.Constant
T_nominal353.15
fueBuildings.Fluid.Data.Fuels.HeatingOilLowerHeatingValue()
Q_flow_nominal2000
dp_nominal5000
linearizeFlowResistancefalse
deltaM0.1
show_Tfalse
VTan0.2
hTan2
nSeg4
dIns0.002
dp(3000 + 2000)*{2,1}
nominal_mass_flow_rate_boiler0.03571428571428571
nominal_mass_flow_radiator_loop0.07142857142857142
V_flow0.03571428571428571/1000*{0.5,1}

Conclusions

Conclusions

")); + Documentation(info="Spaces

Spaces

Introduction

Introduction

nameschema_space_001
parameters
mSenFac1.0
AFlo100.0
hRoo2.5
linearizeRadiationtrue
m_flow_nominal0.01
T_start294.15
volume250.0
occupancy
nameoccupancy_1
parameters
emissions
nameparameters
system_007
nEle1
fraRad0.3
Q_flow_nominal2000.0
T_a_nominal363.15
T_b_nominal353.15
TAir_nominal293.15
TRad_nominal293.15
n1.9
deltaM0.01
from_dpfalse
dp_nominal0.0
linearizedfalse
VWat0.116
mDry52.6
system_008
R7.0
delta00.01
dpFixed_nominal6000.0
l0.0001
from_dptrue
linearizedfalse
deltaM0.02
m_flow_nominal0.01
dpValve_nominal6000.0
external_boundaries
namesurfaceazimuthtiltconstruction
externalwall_17100.0180.0wall
nameconstruction_001
externalwall_18100.0180.0wall
nameconstruction_001
externalwall_19200.0180.0wall
nameconstruction_001
internal_elements
namesurfaceazimuthtiltconstruction
internal_schema_space_001_schema_space_00210.010.0wall
nameinternal_wall
internal_schema_space_001_schema_space_00310.010.0wall
nameinternal_wall
nameschema_space_002
parameters
mSenFac1.0
AFlo100.0
hRoo2.5
linearizeRadiationtrue
m_flow_nominal0.01
T_start294.15
volume250.0
occupancy
nameoccupancy_2
parameters
emissions
nameparameters
system_009
nEle1
fraRad0.3
Q_flow_nominal2000.0
T_a_nominal363.15
T_b_nominal353.15
TAir_nominal293.15
TRad_nominal293.15
n1.9
deltaM0.01
from_dpfalse
dp_nominal0.0
linearizedfalse
VWat0.116
mDry52.6
system_010
R7.0
delta00.01
dpFixed_nominal6000.0
l0.0001
from_dptrue
linearizedfalse
deltaM0.02
m_flow_nominal0.01
dpValve_nominal6000.0
external_boundaries
namesurfaceazimuthtiltconstruction
externalwall_20100.0180.0wall
nameconstruction_001
externalwall_21100.0180.0wall
nameconstruction_001
externalwall_22200.0180.0wall
nameconstruction_001
internal_elements
namesurfaceazimuthtiltconstruction
internal_schema_space_001_schema_space_00210.010.0wall
nameinternal_wall
internal_schema_space_002_schema_space_00310.010.0wall
nameinternal_wall
nameschema_space_003
parameters
mSenFac1.0
AFlo100.0
hRoo2.5
linearizeRadiationtrue
m_flow_nominal0.01
T_start294.15
volume250.0
occupancy
nameoccupancy_3
parameters
emissions
nameparameters
system_011
nEle1
fraRad0.3
Q_flow_nominal2000.0
T_a_nominal363.15
T_b_nominal353.15
TAir_nominal293.15
TRad_nominal293.15
n1.9
deltaM0.01
from_dpfalse
dp_nominal0.0
linearizedfalse
VWat0.116
mDry52.6
system_012
R7.0
delta00.01
dpFixed_nominal6000.0
l0.0001
from_dptrue
linearizedfalse
deltaM0.02
m_flow_nominal0.01
dpValve_nominal6000.0
external_boundaries
namesurfaceazimuthtiltconstruction
externalwall_23100.0180.0wall
nameconstruction_001
externalwall_24100.0180.0wall
nameconstruction_001
externalwall_25200.0180.0wall
nameconstruction_001
internal_elements
namesurfaceazimuthtiltconstruction
internal_schema_space_001_schema_space_00310.010.0wall
nameinternal_wall
internal_schema_space_002_schema_space_00310.010.0wall
nameinternal_wall

Conclusions

Conclusions

Spaces

Introduction

Introduction

nameinternal_wall
layers
materialthickness
namebrick
k0.89
c790.0
rho1920.0
epsLw0.85
epsSw0.65
0.2
nameconstruction_001
layers
materialthickness
namematerial_001
k0.035
c1000.0
rho2000.0
epsLw0.85
epsSw0.65
0.1
namematerial_002
k0.035
c1000.0
rho2000.0
epsLw0.85
epsSw0.65
0.1
namematerial_003
k0.035
c1000.0
rho2000.0
epsLw0.85
epsSw0.65
0.1

Conclusions

Conclusions

Spaces

Introduction

Introduction

namesystem_001
parameters
scaFacRad1.5
dTBoi_nominal20
dTRad_nominal10
a{0.9}
effCurBuildings.Fluid.Types.EfficiencyCurves.Constant
T_nominal353.15
fueBuildings.Fluid.Data.Fuels.HeatingOilLowerHeatingValue()
Q_flow_nominal2000
dp_nominal5000
linearizeFlowResistancefalse
deltaM0.1
show_Tfalse
VTan0.2
hTan2
nSeg4
dIns0.002
dp(3000 + 2000)*{2,1}
nominal_mass_flow_rate_boiler0.03571428571428571
nominal_mass_flow_radiator_loop0.07142857142857142
V_flow0.03571428571428571/1000*{0.5,1}

Conclusions

Conclusions

")); end building; diff --git a/tests/house.json b/tests/house.json new file mode 100644 index 0000000..5162092 --- /dev/null +++ b/tests/house.json @@ -0,0 +1,408 @@ +{ + "materials": [ + { + "id": "MATERIAL:001", + "thermal_conductivity": 0.035, + "specific_heat_capacity": 1000.0, + "density": 2000.0, + "longwave_emissivity": 0.85, + "shortwave_emissivity": 0.85 + }, + { + "id": "MATERIAL:002", + "thermal_conductivity": 0.035, + "specific_heat_capacity": 1000.0, + "density": 2000.0, + "longwave_emissivity": 0.85, + "shortwave_emissivity": 0.85 + }, + { + "id": "MATERIAL:003", + "thermal_conductivity": 0.035, + "specific_heat_capacity": 1000.0, + "density": 2000.0, + "longwave_emissivity": 0.85, + "shortwave_emissivity": 0.85 + } + ], + "constructions": [ + { + "id": "CONSTRUCTION:001", + "layers": [ + { + "material": "MATERIAL:001", + "thickness": 0.1 + }, + { + "material": "MATERIAL:002", + "thickness": 0.1 + }, + { + "material": "MATERIAL:003", + "thickness": 0.1 + } + ] + } + ], + "spaces": [ + { + "id": "schema:Space:001", + "external_boundaries": { + "external_walls": [ + { + "surface": 100.0, + "azimuth": 180.0, + "tilt": "wall", + "construction": "CONSTRUCTION:001" + }, + { + "surface": 100.0, + "azimuth": 180.0, + "tilt": "wall", + "construction": "CONSTRUCTION:001" + }, + { + "surface": 200.0, + "azimuth": 180.0, + "tilt": "wall", + "construction": "CONSTRUCTION:001" + } + ] + }, + "parameters": { + "sensible_thermal_mass_scaling_factor": 1.0, + "floor_area": 100.0, + "average_room_height": 2.5, + "nominal_mass_flow_rate": 0.01, + "temperature_initial": 294.15 + }, + "occupancy": { + "parameters": { + "occupancy": "3600*{7, 19}", + "gain": "[35; 70; 30]", + "heat_gain_if_occupied": "1/6/4" + } + }, + "emissions": [ + { + "radiator": { + "id": "SYSTEM:007", + "parameters": { + "number_of_elements_used_in_the_discretization": 1.0, + "fraction_radiant_heat_transfer": 0.3, + "nominal_heating_power_positive_for_heating": 2000.0, + "water_inlet_temperature_at_nominal_condition": 363.15, + "water_outlet_temperature_at_nominal_condition": 353.15, + "air_temperature_at_nominal_condition": 293.15, + "radiative_temperature_at_nominal_condition": 293.15, + "exponent_for_heat_transfer": 1.9, + "fraction_of_nominal_mass_flow_rate_where_transition_to_turbulent_occurs": 0.01, + "dp_nominal": 1000.0 + } + } + }, + { + "valve": { + "id": "SYSTEM:008", + "parameters": { + "rangeability": 7.0, + "range_of_significant_deviation_from_equal_percentage_law": 0.01, + "dp_fixed_nominal": 6000.0, + "valve_leakage": 0.0001, + "fraction_of_nominal_flow_rate_where_linearization_starts_if_y_1": 0.02, + "m_flow_nominal": 0.01, + "dp_valve_nominal": 6000.0 + }, + "control": { + "emission_control": { + "id": "CONTROL:007", + "parameters": { + "k_coo_con": 1.0, + "ti_coo_con": 900.0, + "k_hea_con": 0.1, + "ti_hea_con": 900.0, + "tim_che": 30.0, + "dt_hys": 0.25, + "loo_hys": 0.01 + } + } + } + } + } + ] + }, + { + "id": "schema:Space:002", + "external_boundaries": { + "external_walls": [ + { + "surface": 100.0, + "azimuth": 180.0, + "tilt": "wall", + "construction": "CONSTRUCTION:001" + }, + { + "surface": 100.0, + "azimuth": 180.0, + "tilt": "wall", + "construction": "CONSTRUCTION:001" + }, + { + "surface": 200.0, + "azimuth": 180.0, + "tilt": "wall", + "construction": "CONSTRUCTION:001" + } + ] + }, + "parameters": { + "sensible_thermal_mass_scaling_factor": 1.0, + "floor_area": 100.0, + "average_room_height": 2.5, + "nominal_mass_flow_rate": 0.01, + "temperature_initial": 294.15 + }, + "occupancy": { + "parameters": { + "occupancy": "3600*{7, 19}", + "gain": "[35; 70; 30]", + "heat_gain_if_occupied": "1/6/4" + } + }, + "emissions": [ + { + "radiator": { + "id": "SYSTEM:009", + "parameters": { + "number_of_elements_used_in_the_discretization": 1.0, + "fraction_radiant_heat_transfer": 0.3, + "nominal_heating_power_positive_for_heating": 2000.0, + "water_inlet_temperature_at_nominal_condition": 363.15, + "water_outlet_temperature_at_nominal_condition": 353.15, + "air_temperature_at_nominal_condition": 293.15, + "radiative_temperature_at_nominal_condition": 293.15, + "exponent_for_heat_transfer": 1.9, + "fraction_of_nominal_mass_flow_rate_where_transition_to_turbulent_occurs": 0.01, + "dp_nominal": 1000.0 + } + } + }, + { + "valve": { + "id": "SYSTEM:010", + "parameters": { + "rangeability": 7.0, + "range_of_significant_deviation_from_equal_percentage_law": 0.01, + "dp_fixed_nominal": 6000.0, + "valve_leakage": 0.0001, + "fraction_of_nominal_flow_rate_where_linearization_starts_if_y_1": 0.02, + "m_flow_nominal": 0.01, + "dp_valve_nominal": 6000.0 + }, + "control": { + "emission_control": { + "id": "CONTROL:006", + "parameters": { + "k_coo_con": 1.0, + "ti_coo_con": 900.0, + "k_hea_con": 0.1, + "ti_hea_con": 900.0, + "tim_che": 30.0, + "dt_hys": 0.25, + "loo_hys": 0.01 + } + } + } + } + } + ] + }, + { + "id": "schema:Space:003", + "external_boundaries": { + "external_walls": [ + { + "surface": 100.0, + "azimuth": 180.0, + "tilt": "wall", + "construction": "CONSTRUCTION:001" + }, + { + "surface": 100.0, + "azimuth": 180.0, + "tilt": "wall", + "construction": "CONSTRUCTION:001" + }, + { + "surface": 200.0, + "azimuth": 180.0, + "tilt": "wall", + "construction": "CONSTRUCTION:001" + } + ] + }, + "parameters": { + "sensible_thermal_mass_scaling_factor": 1.0, + "floor_area": 100.0, + "average_room_height": 2.5, + "nominal_mass_flow_rate": 0.01, + "temperature_initial": 294.15 + }, + "occupancy": { + "parameters": { + "occupancy": "3600*{7, 19}", + "gain": "[35; 70; 30]", + "heat_gain_if_occupied": "1/6/4" + } + }, + "emissions": [ + { + "radiator": { + "id": "SYSTEM:011", + "parameters": { + "number_of_elements_used_in_the_discretization": 1.0, + "fraction_radiant_heat_transfer": 0.3, + "nominal_heating_power_positive_for_heating": 2000.0, + "water_inlet_temperature_at_nominal_condition": 363.15, + "water_outlet_temperature_at_nominal_condition": 353.15, + "air_temperature_at_nominal_condition": 293.15, + "radiative_temperature_at_nominal_condition": 293.15, + "exponent_for_heat_transfer": 1.9, + "fraction_of_nominal_mass_flow_rate_where_transition_to_turbulent_occurs": 0.01, + "dp_nominal": 1000.0 + } + } + }, + { + "valve": { + "id": "SYSTEM:012", + "parameters": { + "rangeability": 7.0, + "range_of_significant_deviation_from_equal_percentage_law": 0.01, + "dp_fixed_nominal": 6000.0, + "valve_leakage": 0.0001, + "fraction_of_nominal_flow_rate_where_linearization_starts_if_y_1": 0.02, + "m_flow_nominal": 0.01, + "dp_valve_nominal": 6000.0 + }, + "control": { + "emission_control": { + "id": "CONTROL:005", + "parameters": { + "k_coo_con": 1.0, + "ti_coo_con": 900.0, + "k_hea_con": 0.1, + "ti_hea_con": 900.0, + "tim_che": 30.0, + "dt_hys": 0.25, + "loo_hys": 0.01 + } + } + } + } + } + ] + } + ], + "systems": [ + { + "boiler": { + "id": "SYSTEM:001", + "control": { + "boiler_control": { + "id": "CONTROL:001" + } + } + } + }, + { + "pump": { + "id": "SYSTEM:002", + "inlets": [ + "SYSTEM:001" + ], + "outlets": [ + "SYSTEM:004", + "SYSTEM:006" + ], + "control": { + "collector_control": { + "id": "CONTROL:002" + } + } + } + }, + { + "split_valve": { + "id": "SYSTEM:003", + "inlets": [ + "SYSTEM:008", + "SYSTEM:010" + ], + "outlets": [ + "SYSTEM:001" + ] + } + }, + { + "three_way_valve": { + "id": "SYSTEM:004", + "outlets": [ + "SYSTEM:013", + "SYSTEM:003" + ], + "control": { + "three_way_valve_control": { + "id": "CONTROL:003" + } + } + } + }, + { + "temperature_sensor": { + "id": "SYSTEM:013", + "outlets": [ + "SYSTEM:009", + "SYSTEM:007" + ] + } + }, + { + "split_valve": { + "id": "SYSTEM:005", + "inlets": [ + "SYSTEM:012" + ], + "outlets": [ + "SYSTEM:001" + ] + } + }, + { + "three_way_valve": { + "id": "SYSTEM:006", + "outlets": [ + "SYSTEM:014", + "SYSTEM:005" + ], + "control": { + "three_way_valve_control": { + "id": "CONTROL:004" + } + } + } + }, + { + "temperature_sensor": { + "id": "SYSTEM:014", + "inlets": [ + "SYSTEM:006" + ], + "outlets": [ + "SYSTEM:011" + ] + } + } + ], + "@type": "Building" +} \ No newline at end of file diff --git a/tests/house.yaml b/tests/house.yaml index 7f5b32e..dbf87ea 100644 --- a/tests/house.yaml +++ b/tests/house.yaml @@ -55,6 +55,7 @@ spaces: rangeability: 7 control: emission_control: + id: CONTROL:007 parameters: k_coo_con: 1.0 - id: schema:Space:002 @@ -90,6 +91,7 @@ spaces: rangeability: 7 control: emission_control: + id: CONTROL:006 parameters: k_coo_con: 1.0 @@ -125,6 +127,7 @@ spaces: rangeability: 7 control: emission_control: + id: CONTROL:005 parameters: k_coo_con: 1.0 diff --git a/trano/data_models/conversion.py b/trano/data_models/conversion.py index 8c4c579..694f280 100644 --- a/trano/data_models/conversion.py +++ b/trano/data_models/conversion.py @@ -1,5 +1,6 @@ import copy import json +from collections import Counter from pathlib import Path from typing import Any, Dict @@ -69,6 +70,7 @@ def convert_network(name: str, model_path: Path) -> Network: # noqa: C901 network = Network(name=name) occupancy = None data = None + system_counter: Any = Counter() if model_path.suffix == ".yaml": data = yaml.safe_load(model_path.read_text()) if model_path.suffix == ".json": @@ -103,7 +105,13 @@ def convert_network(name: str, model_path: Path) -> Network: # noqa: C901 ) external_walls.append(external_wall_) if space.get("occupancy"): - occupancy = Occupancy(**space["occupancy"]) + system_counter.update(["occupancy"]) + occupancy = Occupancy( + **( + space["occupancy"] + | {"name": f"occupancy_{system_counter['occupancy']}"} + ) + ) emissions = [] for emission in space["emissions"]: emission_ = _instantiate_component(emission) diff --git a/trano/data_models/trano.yaml b/trano/data_models/trano.yaml index 46fd2c9..093d820 100644 --- a/trano/data_models/trano.yaml +++ b/trano/data_models/trano.yaml @@ -188,6 +188,8 @@ classes: EmissionControl: + slots: + - id attributes: parameters: range: ControlLoopsParameters @@ -755,6 +757,7 @@ slots: slot_uri: schema:emission_control range: EmissionControl multivalued: false + inlined: true three_way_valve_control: slot_uri: schema:three_way_valve_control range: ThreeWayValveControl From d39f85bcb0d33bf58327fb85b1efe3d098c91b6f Mon Sep 17 00:00:00 2001 From: aan Date: Fri, 9 Aug 2024 14:37:38 +0200 Subject: [PATCH 09/11] feat: Simplified house description. --- poetry.lock | 822 ++++++++++++++++---------------- tests/simplified_house.yaml | 152 ++++++ tests/test_schema.py | 26 +- trano/data_models/conversion.py | 38 +- trano/data_models/trano.yaml | 2 + trano/plot/plot.py | 2 +- 6 files changed, 630 insertions(+), 412 deletions(-) create mode 100644 tests/simplified_house.yaml diff --git a/poetry.lock b/poetry.lock index a96cc72..0d773f9 100644 --- a/poetry.lock +++ b/poetry.lock @@ -40,14 +40,14 @@ six = "*" [[package]] name = "argcomplete" -version = "3.4.0" +version = "3.5.0" description = "Bash tab completion for argparse" category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "argcomplete-3.4.0-py3-none-any.whl", hash = "sha256:69a79e083a716173e5532e0fa3bef45f793f4e61096cf52b5a42c0211c8b8aa5"}, - {file = "argcomplete-3.4.0.tar.gz", hash = "sha256:c2abcdfe1be8ace47ba777d4fce319eb13bf8ad9dace8d085dcad6eded88057f"}, + {file = "argcomplete-3.5.0-py3-none-any.whl", hash = "sha256:d4bcf3ff544f51e16e54228a7ac7f486ed70ebf2ecfe49a63a91171c76bf029b"}, + {file = "argcomplete-3.5.0.tar.gz", hash = "sha256:4349400469dccfb7950bb60334a680c58d88699bff6159df61251878dc6bf74b"}, ] [package.extras] @@ -94,23 +94,23 @@ test = ["astroid (>=1,<2)", "astroid (>=2,<4)", "pytest"] [[package]] name = "attrs" -version = "23.2.0" +version = "24.2.0" description = "Classes Without Boilerplate" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "attrs-23.2.0-py3-none-any.whl", hash = "sha256:99b87a485a5820b23b879f04c2305b44b951b502fd64be915879d77a7e8fc6f1"}, - {file = "attrs-23.2.0.tar.gz", hash = "sha256:935dc3b529c262f6cf76e50877d35a4bd3c1de194fd41f47a2b7ae8f19971f30"}, + {file = "attrs-24.2.0-py3-none-any.whl", hash = "sha256:81921eb96de3191c8258c199618104dd27ac608d9366f5e35d011eae1867ede2"}, + {file = "attrs-24.2.0.tar.gz", hash = "sha256:5cfb1b9148b5b086569baec03f20d7b6bf3bcacc9a42bebf87ffaaca362f6346"}, ] [package.extras] -cov = ["attrs[tests]", "coverage[toml] (>=5.3)"] -dev = ["attrs[tests]", "pre-commit"] -docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"] -tests = ["attrs[tests-no-zope]", "zope-interface"] -tests-mypy = ["mypy (>=1.6)", "pytest-mypy-plugins"] -tests-no-zope = ["attrs[tests-mypy]", "cloudpickle", "hypothesis", "pympler", "pytest (>=4.3.0)", "pytest-xdist[psutil]"] +benchmark = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-codspeed", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +cov = ["cloudpickle", "coverage[toml] (>=5.3)", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +dev = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pre-commit", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +docs = ["cogapp", "furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier (<24.7)"] +tests = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +tests-mypy = ["mypy (>=1.11.1)", "pytest-mypy-plugins"] [[package]] name = "binaryornot" @@ -468,14 +468,14 @@ pyproject = ["toml (>=0.10)"] [[package]] name = "curies" -version = "0.7.9" +version = "0.7.10" description = "Idiomatic conversion between URIs and compact URIs (CURIEs)." category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "curies-0.7.9-py3-none-any.whl", hash = "sha256:e4c5beb91642376953c94db0ee2fb5d2b011c3b16749516436114ba61442f260"}, - {file = "curies-0.7.9.tar.gz", hash = "sha256:3b63c5fea7b0e967629a3a384b1a8c59b56c503487c1dcbacddeab59e25db4d8"}, + {file = "curies-0.7.10-py3-none-any.whl", hash = "sha256:ad80f420dd76b6f3e921a245370ff6ab7473c48c29c17254970c03cd2e58af5f"}, + {file = "curies-0.7.10.tar.gz", hash = "sha256:98a7ceb94710fab3a02727a7f85ba0719dd22be5fc8b5f2ad1d7d4cfc47d64ce"}, ] [package.dependencies] @@ -607,14 +607,14 @@ files = [ [[package]] name = "exceptiongroup" -version = "1.2.1" +version = "1.2.2" description = "Backport of PEP 654 (exception groups)" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "exceptiongroup-1.2.1-py3-none-any.whl", hash = "sha256:5258b9ed329c5bbdd31a309f53cbfb0b155341807f6ff7606a1e801a891b29ad"}, - {file = "exceptiongroup-1.2.1.tar.gz", hash = "sha256:a4785e48b045528f5bfe627b6ad554ff32def154f42372786903b7abcfe1aa16"}, + {file = "exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b"}, + {file = "exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc"}, ] [package.extras] @@ -654,54 +654,54 @@ typing = ["typing-extensions (>=4.8)"] [[package]] name = "fonttools" -version = "4.53.0" +version = "4.53.1" description = "Tools to manipulate font files" category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "fonttools-4.53.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:52a6e0a7a0bf611c19bc8ec8f7592bdae79c8296c70eb05917fd831354699b20"}, - {file = "fonttools-4.53.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:099634631b9dd271d4a835d2b2a9e042ccc94ecdf7e2dd9f7f34f7daf333358d"}, - {file = "fonttools-4.53.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e40013572bfb843d6794a3ce076c29ef4efd15937ab833f520117f8eccc84fd6"}, - {file = "fonttools-4.53.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:715b41c3e231f7334cbe79dfc698213dcb7211520ec7a3bc2ba20c8515e8a3b5"}, - {file = "fonttools-4.53.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:74ae2441731a05b44d5988d3ac2cf784d3ee0a535dbed257cbfff4be8bb49eb9"}, - {file = "fonttools-4.53.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:95db0c6581a54b47c30860d013977b8a14febc206c8b5ff562f9fe32738a8aca"}, - {file = "fonttools-4.53.0-cp310-cp310-win32.whl", hash = "sha256:9cd7a6beec6495d1dffb1033d50a3f82dfece23e9eb3c20cd3c2444d27514068"}, - {file = "fonttools-4.53.0-cp310-cp310-win_amd64.whl", hash = "sha256:daaef7390e632283051e3cf3e16aff2b68b247e99aea916f64e578c0449c9c68"}, - {file = "fonttools-4.53.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a209d2e624ba492df4f3bfad5996d1f76f03069c6133c60cd04f9a9e715595ec"}, - {file = "fonttools-4.53.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4f520d9ac5b938e6494f58a25c77564beca7d0199ecf726e1bd3d56872c59749"}, - {file = "fonttools-4.53.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eceef49f457253000e6a2d0f7bd08ff4e9fe96ec4ffce2dbcb32e34d9c1b8161"}, - {file = "fonttools-4.53.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa1f3e34373aa16045484b4d9d352d4c6b5f9f77ac77a178252ccbc851e8b2ee"}, - {file = "fonttools-4.53.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:28d072169fe8275fb1a0d35e3233f6df36a7e8474e56cb790a7258ad822b6fd6"}, - {file = "fonttools-4.53.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4a2a6ba400d386e904fd05db81f73bee0008af37799a7586deaa4aef8cd5971e"}, - {file = "fonttools-4.53.0-cp311-cp311-win32.whl", hash = "sha256:bb7273789f69b565d88e97e9e1da602b4ee7ba733caf35a6c2affd4334d4f005"}, - {file = "fonttools-4.53.0-cp311-cp311-win_amd64.whl", hash = "sha256:9fe9096a60113e1d755e9e6bda15ef7e03391ee0554d22829aa506cdf946f796"}, - {file = "fonttools-4.53.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:d8f191a17369bd53a5557a5ee4bab91d5330ca3aefcdf17fab9a497b0e7cff7a"}, - {file = "fonttools-4.53.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:93156dd7f90ae0a1b0e8871032a07ef3178f553f0c70c386025a808f3a63b1f4"}, - {file = "fonttools-4.53.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bff98816cb144fb7b85e4b5ba3888a33b56ecef075b0e95b95bcd0a5fbf20f06"}, - {file = "fonttools-4.53.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:973d030180eca8255b1bce6ffc09ef38a05dcec0e8320cc9b7bcaa65346f341d"}, - {file = "fonttools-4.53.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c4ee5a24e281fbd8261c6ab29faa7fd9a87a12e8c0eed485b705236c65999109"}, - {file = "fonttools-4.53.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:bd5bc124fae781a4422f61b98d1d7faa47985f663a64770b78f13d2c072410c2"}, - {file = "fonttools-4.53.0-cp312-cp312-win32.whl", hash = "sha256:a239afa1126b6a619130909c8404070e2b473dd2b7fc4aacacd2e763f8597fea"}, - {file = "fonttools-4.53.0-cp312-cp312-win_amd64.whl", hash = "sha256:45b4afb069039f0366a43a5d454bc54eea942bfb66b3fc3e9a2c07ef4d617380"}, - {file = "fonttools-4.53.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:93bc9e5aaa06ff928d751dc6be889ff3e7d2aa393ab873bc7f6396a99f6fbb12"}, - {file = "fonttools-4.53.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2367d47816cc9783a28645bc1dac07f8ffc93e0f015e8c9fc674a5b76a6da6e4"}, - {file = "fonttools-4.53.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:907fa0b662dd8fc1d7c661b90782ce81afb510fc4b7aa6ae7304d6c094b27bce"}, - {file = "fonttools-4.53.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3e0ad3c6ea4bd6a289d958a1eb922767233f00982cf0fe42b177657c86c80a8f"}, - {file = "fonttools-4.53.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:73121a9b7ff93ada888aaee3985a88495489cc027894458cb1a736660bdfb206"}, - {file = "fonttools-4.53.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:ee595d7ba9bba130b2bec555a40aafa60c26ce68ed0cf509983e0f12d88674fd"}, - {file = "fonttools-4.53.0-cp38-cp38-win32.whl", hash = "sha256:fca66d9ff2ac89b03f5aa17e0b21a97c21f3491c46b583bb131eb32c7bab33af"}, - {file = "fonttools-4.53.0-cp38-cp38-win_amd64.whl", hash = "sha256:31f0e3147375002aae30696dd1dc596636abbd22fca09d2e730ecde0baad1d6b"}, - {file = "fonttools-4.53.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7d6166192dcd925c78a91d599b48960e0a46fe565391c79fe6de481ac44d20ac"}, - {file = "fonttools-4.53.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ef50ec31649fbc3acf6afd261ed89d09eb909b97cc289d80476166df8438524d"}, - {file = "fonttools-4.53.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f193f060391a455920d61684a70017ef5284ccbe6023bb056e15e5ac3de11d1"}, - {file = "fonttools-4.53.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba9f09ff17f947392a855e3455a846f9855f6cf6bec33e9a427d3c1d254c712f"}, - {file = "fonttools-4.53.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:0c555e039d268445172b909b1b6bdcba42ada1cf4a60e367d68702e3f87e5f64"}, - {file = "fonttools-4.53.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5a4788036201c908079e89ae3f5399b33bf45b9ea4514913f4dbbe4fac08efe0"}, - {file = "fonttools-4.53.0-cp39-cp39-win32.whl", hash = "sha256:d1a24f51a3305362b94681120c508758a88f207fa0a681c16b5a4172e9e6c7a9"}, - {file = "fonttools-4.53.0-cp39-cp39-win_amd64.whl", hash = "sha256:1e677bfb2b4bd0e5e99e0f7283e65e47a9814b0486cb64a41adf9ef110e078f2"}, - {file = "fonttools-4.53.0-py3-none-any.whl", hash = "sha256:6b4f04b1fbc01a3569d63359f2227c89ab294550de277fd09d8fca6185669fa4"}, - {file = "fonttools-4.53.0.tar.gz", hash = "sha256:c93ed66d32de1559b6fc348838c7572d5c0ac1e4a258e76763a5caddd8944002"}, + {file = "fonttools-4.53.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0679a30b59d74b6242909945429dbddb08496935b82f91ea9bf6ad240ec23397"}, + {file = "fonttools-4.53.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e8bf06b94694251861ba7fdeea15c8ec0967f84c3d4143ae9daf42bbc7717fe3"}, + {file = "fonttools-4.53.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b96cd370a61f4d083c9c0053bf634279b094308d52fdc2dd9a22d8372fdd590d"}, + {file = "fonttools-4.53.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a1c7c5aa18dd3b17995898b4a9b5929d69ef6ae2af5b96d585ff4005033d82f0"}, + {file = "fonttools-4.53.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e013aae589c1c12505da64a7d8d023e584987e51e62006e1bb30d72f26522c41"}, + {file = "fonttools-4.53.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:9efd176f874cb6402e607e4cc9b4a9cd584d82fc34a4b0c811970b32ba62501f"}, + {file = "fonttools-4.53.1-cp310-cp310-win32.whl", hash = "sha256:c8696544c964500aa9439efb6761947393b70b17ef4e82d73277413f291260a4"}, + {file = "fonttools-4.53.1-cp310-cp310-win_amd64.whl", hash = "sha256:8959a59de5af6d2bec27489e98ef25a397cfa1774b375d5787509c06659b3671"}, + {file = "fonttools-4.53.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:da33440b1413bad53a8674393c5d29ce64d8c1a15ef8a77c642ffd900d07bfe1"}, + {file = "fonttools-4.53.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5ff7e5e9bad94e3a70c5cd2fa27f20b9bb9385e10cddab567b85ce5d306ea923"}, + {file = "fonttools-4.53.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c6e7170d675d12eac12ad1a981d90f118c06cf680b42a2d74c6c931e54b50719"}, + {file = "fonttools-4.53.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bee32ea8765e859670c4447b0817514ca79054463b6b79784b08a8df3a4d78e3"}, + {file = "fonttools-4.53.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6e08f572625a1ee682115223eabebc4c6a2035a6917eac6f60350aba297ccadb"}, + {file = "fonttools-4.53.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b21952c092ffd827504de7e66b62aba26fdb5f9d1e435c52477e6486e9d128b2"}, + {file = "fonttools-4.53.1-cp311-cp311-win32.whl", hash = "sha256:9dfdae43b7996af46ff9da520998a32b105c7f098aeea06b2226b30e74fbba88"}, + {file = "fonttools-4.53.1-cp311-cp311-win_amd64.whl", hash = "sha256:d4d0096cb1ac7a77b3b41cd78c9b6bc4a400550e21dc7a92f2b5ab53ed74eb02"}, + {file = "fonttools-4.53.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:d92d3c2a1b39631a6131c2fa25b5406855f97969b068e7e08413325bc0afba58"}, + {file = "fonttools-4.53.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3b3c8ebafbee8d9002bd8f1195d09ed2bd9ff134ddec37ee8f6a6375e6a4f0e8"}, + {file = "fonttools-4.53.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:32f029c095ad66c425b0ee85553d0dc326d45d7059dbc227330fc29b43e8ba60"}, + {file = "fonttools-4.53.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10f5e6c3510b79ea27bb1ebfcc67048cde9ec67afa87c7dd7efa5c700491ac7f"}, + {file = "fonttools-4.53.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f677ce218976496a587ab17140da141557beb91d2a5c1a14212c994093f2eae2"}, + {file = "fonttools-4.53.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:9e6ceba2a01b448e36754983d376064730690401da1dd104ddb543519470a15f"}, + {file = "fonttools-4.53.1-cp312-cp312-win32.whl", hash = "sha256:791b31ebbc05197d7aa096bbc7bd76d591f05905d2fd908bf103af4488e60670"}, + {file = "fonttools-4.53.1-cp312-cp312-win_amd64.whl", hash = "sha256:6ed170b5e17da0264b9f6fae86073be3db15fa1bd74061c8331022bca6d09bab"}, + {file = "fonttools-4.53.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:c818c058404eb2bba05e728d38049438afd649e3c409796723dfc17cd3f08749"}, + {file = "fonttools-4.53.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:651390c3b26b0c7d1f4407cad281ee7a5a85a31a110cbac5269de72a51551ba2"}, + {file = "fonttools-4.53.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e54f1bba2f655924c1138bbc7fa91abd61f45c68bd65ab5ed985942712864bbb"}, + {file = "fonttools-4.53.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9cd19cf4fe0595ebdd1d4915882b9440c3a6d30b008f3cc7587c1da7b95be5f"}, + {file = "fonttools-4.53.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:2af40ae9cdcb204fc1d8f26b190aa16534fcd4f0df756268df674a270eab575d"}, + {file = "fonttools-4.53.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:35250099b0cfb32d799fb5d6c651220a642fe2e3c7d2560490e6f1d3f9ae9169"}, + {file = "fonttools-4.53.1-cp38-cp38-win32.whl", hash = "sha256:f08df60fbd8d289152079a65da4e66a447efc1d5d5a4d3f299cdd39e3b2e4a7d"}, + {file = "fonttools-4.53.1-cp38-cp38-win_amd64.whl", hash = "sha256:7b6b35e52ddc8fb0db562133894e6ef5b4e54e1283dff606fda3eed938c36fc8"}, + {file = "fonttools-4.53.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:75a157d8d26c06e64ace9df037ee93a4938a4606a38cb7ffaf6635e60e253b7a"}, + {file = "fonttools-4.53.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4824c198f714ab5559c5be10fd1adf876712aa7989882a4ec887bf1ef3e00e31"}, + {file = "fonttools-4.53.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:becc5d7cb89c7b7afa8321b6bb3dbee0eec2b57855c90b3e9bf5fb816671fa7c"}, + {file = "fonttools-4.53.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84ec3fb43befb54be490147b4a922b5314e16372a643004f182babee9f9c3407"}, + {file = "fonttools-4.53.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:73379d3ffdeecb376640cd8ed03e9d2d0e568c9d1a4e9b16504a834ebadc2dfb"}, + {file = "fonttools-4.53.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:02569e9a810f9d11f4ae82c391ebc6fb5730d95a0657d24d754ed7763fb2d122"}, + {file = "fonttools-4.53.1-cp39-cp39-win32.whl", hash = "sha256:aae7bd54187e8bf7fd69f8ab87b2885253d3575163ad4d669a262fe97f0136cb"}, + {file = "fonttools-4.53.1-cp39-cp39-win_amd64.whl", hash = "sha256:e5b708073ea3d684235648786f5f6153a48dc8762cdfe5563c57e80787c29fbb"}, + {file = "fonttools-4.53.1-py3-none-any.whl", hash = "sha256:f1f8758a2ad110bd6432203a344269f445a2907dc24ef6bccfd0ac4e14e0d71d"}, + {file = "fonttools-4.53.1.tar.gz", hash = "sha256:e128778a8e9bc11159ce5447f76766cefbd876f44bd79aff030287254e4752c4"}, ] [package.extras] @@ -867,14 +867,14 @@ files = [ [[package]] name = "identify" -version = "2.5.36" +version = "2.6.0" description = "File identification library for Python" category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "identify-2.5.36-py2.py3-none-any.whl", hash = "sha256:37d93f380f4de590500d9dba7db359d0d3da95ffe7f9de1753faa159e71e7dfa"}, - {file = "identify-2.5.36.tar.gz", hash = "sha256:e5e00f54165f9047fbebeb4a560f9acfb8af4c88232be60a488e9b68d122745d"}, + {file = "identify-2.6.0-py2.py3-none-any.whl", hash = "sha256:e79ae4406387a9d300332b5fd366d8994f1525e8414984e1a59e058b2eda2dd0"}, + {file = "identify-2.6.0.tar.gz", hash = "sha256:cb171c685bdc31bcc4c1734698736a7d5b6c8bf2e0c15117f4d469c8640ae5cf"}, ] [package.extras] @@ -1126,14 +1126,14 @@ files = [ [[package]] name = "jsonschema" -version = "4.22.0" +version = "4.23.0" description = "An implementation of JSON Schema validation for Python" category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "jsonschema-4.22.0-py3-none-any.whl", hash = "sha256:ff4cfd6b1367a40e7bc6411caec72effadd3db0bbe5017de188f2d6108335802"}, - {file = "jsonschema-4.22.0.tar.gz", hash = "sha256:5b22d434a45935119af990552c862e5d6d564e8f6601206b305a61fdf661a2b7"}, + {file = "jsonschema-4.23.0-py3-none-any.whl", hash = "sha256:fbadb6f8b144a8f8cf9f0b89ba94501d143e50411a1278633f56a7acf7fd5566"}, + {file = "jsonschema-4.23.0.tar.gz", hash = "sha256:d71497fef26351a33265337fa77ffeb82423f3ea21283cd9467bb03999266bc4"}, ] [package.dependencies] @@ -1152,7 +1152,7 @@ webcolors = {version = ">=1.11", optional = true, markers = "extra == \"format\" [package.extras] format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"] -format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"] +format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=24.6.0)"] [[package]] name = "jsonschema-specifications" @@ -1590,41 +1590,41 @@ files = [ [[package]] name = "matplotlib" -version = "3.9.0" +version = "3.9.1.post1" description = "Python plotting package" category = "main" optional = false python-versions = ">=3.9" files = [ - {file = "matplotlib-3.9.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2bcee1dffaf60fe7656183ac2190bd630842ff87b3153afb3e384d966b57fe56"}, - {file = "matplotlib-3.9.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3f988bafb0fa39d1074ddd5bacd958c853e11def40800c5824556eb630f94d3b"}, - {file = "matplotlib-3.9.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fe428e191ea016bb278758c8ee82a8129c51d81d8c4bc0846c09e7e8e9057241"}, - {file = "matplotlib-3.9.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eaf3978060a106fab40c328778b148f590e27f6fa3cd15a19d6892575bce387d"}, - {file = "matplotlib-3.9.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2e7f03e5cbbfacdd48c8ea394d365d91ee8f3cae7e6ec611409927b5ed997ee4"}, - {file = "matplotlib-3.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:13beb4840317d45ffd4183a778685e215939be7b08616f431c7795276e067463"}, - {file = "matplotlib-3.9.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:063af8587fceeac13b0936c42a2b6c732c2ab1c98d38abc3337e430e1ff75e38"}, - {file = "matplotlib-3.9.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9a2fa6d899e17ddca6d6526cf6e7ba677738bf2a6a9590d702c277204a7c6152"}, - {file = "matplotlib-3.9.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:550cdda3adbd596078cca7d13ed50b77879104e2e46392dcd7c75259d8f00e85"}, - {file = "matplotlib-3.9.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:76cce0f31b351e3551d1f3779420cf8f6ec0d4a8cf9c0237a3b549fd28eb4abb"}, - {file = "matplotlib-3.9.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c53aeb514ccbbcbab55a27f912d79ea30ab21ee0531ee2c09f13800efb272674"}, - {file = "matplotlib-3.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:a5be985db2596d761cdf0c2eaf52396f26e6a64ab46bd8cd810c48972349d1be"}, - {file = "matplotlib-3.9.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:c79f3a585f1368da6049318bdf1f85568d8d04b2e89fc24b7e02cc9b62017382"}, - {file = "matplotlib-3.9.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:bdd1ecbe268eb3e7653e04f451635f0fb0f77f07fd070242b44c076c9106da84"}, - {file = "matplotlib-3.9.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d38e85a1a6d732f645f1403ce5e6727fd9418cd4574521d5803d3d94911038e5"}, - {file = "matplotlib-3.9.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0a490715b3b9984fa609116481b22178348c1a220a4499cda79132000a79b4db"}, - {file = "matplotlib-3.9.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8146ce83cbc5dc71c223a74a1996d446cd35cfb6a04b683e1446b7e6c73603b7"}, - {file = "matplotlib-3.9.0-cp312-cp312-win_amd64.whl", hash = "sha256:d91a4ffc587bacf5c4ce4ecfe4bcd23a4b675e76315f2866e588686cc97fccdf"}, - {file = "matplotlib-3.9.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:616fabf4981a3b3c5a15cd95eba359c8489c4e20e03717aea42866d8d0465956"}, - {file = "matplotlib-3.9.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:cd53c79fd02f1c1808d2cfc87dd3cf4dbc63c5244a58ee7944497107469c8d8a"}, - {file = "matplotlib-3.9.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:06a478f0d67636554fa78558cfbcd7b9dba85b51f5c3b5a0c9be49010cf5f321"}, - {file = "matplotlib-3.9.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:81c40af649d19c85f8073e25e5806926986806fa6d54be506fbf02aef47d5a89"}, - {file = "matplotlib-3.9.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:52146fc3bd7813cc784562cb93a15788be0b2875c4655e2cc6ea646bfa30344b"}, - {file = "matplotlib-3.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:0fc51eaa5262553868461c083d9adadb11a6017315f3a757fc45ec6ec5f02888"}, - {file = "matplotlib-3.9.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:bd4f2831168afac55b881db82a7730992aa41c4f007f1913465fb182d6fb20c0"}, - {file = "matplotlib-3.9.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:290d304e59be2b33ef5c2d768d0237f5bd132986bdcc66f80bc9bcc300066a03"}, - {file = "matplotlib-3.9.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ff2e239c26be4f24bfa45860c20ffccd118d270c5b5d081fa4ea409b5469fcd"}, - {file = "matplotlib-3.9.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:af4001b7cae70f7eaacfb063db605280058246de590fa7874f00f62259f2df7e"}, - {file = "matplotlib-3.9.0.tar.gz", hash = "sha256:e6d29ea6c19e34b30fb7d88b7081f869a03014f66fe06d62cc77d5a6ea88ed7a"}, + {file = "matplotlib-3.9.1.post1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:3779ad3e8b72df22b8a622c5796bbcfabfa0069b835412e3c1dec8ee3de92d0c"}, + {file = "matplotlib-3.9.1.post1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ec400340f8628e8e2260d679078d4e9b478699f386e5cc8094e80a1cb0039c7c"}, + {file = "matplotlib-3.9.1.post1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:82c18791b8862ea095081f745b81f896b011c5a5091678fb33204fef641476af"}, + {file = "matplotlib-3.9.1.post1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:621a628389c09a6b9f609a238af8e66acecece1cfa12febc5fe4195114ba7446"}, + {file = "matplotlib-3.9.1.post1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:9a54734ca761ebb27cd4f0b6c2ede696ab6861052d7d7e7b8f7a6782665115f5"}, + {file = "matplotlib-3.9.1.post1-cp310-cp310-win_amd64.whl", hash = "sha256:0721f93db92311bb514e446842e2b21c004541dcca0281afa495053e017c5458"}, + {file = "matplotlib-3.9.1.post1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:b08b46058fe2a31ecb81ef6aa3611f41d871f6a8280e9057cb4016cb3d8e894a"}, + {file = "matplotlib-3.9.1.post1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:22b344e84fcc574f561b5731f89a7625db8ef80cdbb0026a8ea855a33e3429d1"}, + {file = "matplotlib-3.9.1.post1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4b49fee26d64aefa9f061b575f0f7b5fc4663e51f87375c7239efa3d30d908fa"}, + {file = "matplotlib-3.9.1.post1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89eb7e89e2b57856533c5c98f018aa3254fa3789fcd86d5f80077b9034a54c9a"}, + {file = "matplotlib-3.9.1.post1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:c06e742bade41fda6176d4c9c78c9ea016e176cd338e62a1686384cb1eb8de41"}, + {file = "matplotlib-3.9.1.post1-cp311-cp311-win_amd64.whl", hash = "sha256:c44edab5b849e0fc1f1c9d6e13eaa35ef65925f7be45be891d9784709ad95561"}, + {file = "matplotlib-3.9.1.post1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:bf28b09986aee06393e808e661c3466be9c21eff443c9bc881bce04bfbb0c500"}, + {file = "matplotlib-3.9.1.post1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:92aeb8c439d4831510d8b9d5e39f31c16c7f37873879767c26b147cef61e54cd"}, + {file = "matplotlib-3.9.1.post1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f15798b0691b45c80d3320358a88ce5a9d6f518b28575b3ea3ed31b4bd95d009"}, + {file = "matplotlib-3.9.1.post1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d59fc6096da7b9c1df275f9afc3fef5cbf634c21df9e5f844cba3dd8deb1847d"}, + {file = "matplotlib-3.9.1.post1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ab986817a32a70ce22302438691e7df4c6ee4a844d47289db9d583d873491e0b"}, + {file = "matplotlib-3.9.1.post1-cp312-cp312-win_amd64.whl", hash = "sha256:0d78e7d2d86c4472da105d39aba9b754ed3dfeaeaa4ac7206b82706e0a5362fa"}, + {file = "matplotlib-3.9.1.post1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:bd07eba6431b4dc9253cce6374a28c415e1d3a7dc9f8aba028ea7592f06fe172"}, + {file = "matplotlib-3.9.1.post1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ca230cc4482010d646827bd2c6d140c98c361e769ae7d954ebf6fff2a226f5b1"}, + {file = "matplotlib-3.9.1.post1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ace27c0fdeded399cbc43f22ffa76e0f0752358f5b33106ec7197534df08725a"}, + {file = "matplotlib-3.9.1.post1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a4f3aeb7ba14c497dc6f021a076c48c2e5fbdf3da1e7264a5d649683e284a2f"}, + {file = "matplotlib-3.9.1.post1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:23f96fbd4ff4cfa9b8a6b685a65e7eb3c2ced724a8d965995ec5c9c2b1f7daf5"}, + {file = "matplotlib-3.9.1.post1-cp39-cp39-win_amd64.whl", hash = "sha256:2808b95452b4ffa14bfb7c7edffc5350743c31bda495f0d63d10fdd9bc69e895"}, + {file = "matplotlib-3.9.1.post1-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:ffc91239f73b4179dec256b01299d46d0ffa9d27d98494bc1476a651b7821cbe"}, + {file = "matplotlib-3.9.1.post1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:f965ebca9fd4feaaca45937c4849d92b70653057497181100fcd1e18161e5f29"}, + {file = "matplotlib-3.9.1.post1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:801ee9323fd7b2da0d405aebbf98d1da77ea430bbbbbec6834c0b3af15e5db44"}, + {file = "matplotlib-3.9.1.post1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:50113e9b43ceb285739f35d43db36aa752fb8154325b35d134ff6e177452f9ec"}, + {file = "matplotlib-3.9.1.post1.tar.gz", hash = "sha256:c91e585c65092c975a44dc9d4239ba8c594ba3c193d7c478b6d178c4ef61f406"}, ] [package.dependencies] @@ -1685,45 +1685,45 @@ psutil = {version = ">=4.0.0", markers = "sys_platform != \"cygwin\""} [[package]] name = "mypy" -version = "1.10.1" +version = "1.11.1" description = "Optional static typing for Python" category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "mypy-1.10.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e36f229acfe250dc660790840916eb49726c928e8ce10fbdf90715090fe4ae02"}, - {file = "mypy-1.10.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:51a46974340baaa4145363b9e051812a2446cf583dfaeba124af966fa44593f7"}, - {file = "mypy-1.10.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:901c89c2d67bba57aaaca91ccdb659aa3a312de67f23b9dfb059727cce2e2e0a"}, - {file = "mypy-1.10.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0cd62192a4a32b77ceb31272d9e74d23cd88c8060c34d1d3622db3267679a5d9"}, - {file = "mypy-1.10.1-cp310-cp310-win_amd64.whl", hash = "sha256:a2cbc68cb9e943ac0814c13e2452d2046c2f2b23ff0278e26599224cf164e78d"}, - {file = "mypy-1.10.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:bd6f629b67bb43dc0d9211ee98b96d8dabc97b1ad38b9b25f5e4c4d7569a0c6a"}, - {file = "mypy-1.10.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a1bbb3a6f5ff319d2b9d40b4080d46cd639abe3516d5a62c070cf0114a457d84"}, - {file = "mypy-1.10.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8edd4e9bbbc9d7b79502eb9592cab808585516ae1bcc1446eb9122656c6066f"}, - {file = "mypy-1.10.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6166a88b15f1759f94a46fa474c7b1b05d134b1b61fca627dd7335454cc9aa6b"}, - {file = "mypy-1.10.1-cp311-cp311-win_amd64.whl", hash = "sha256:5bb9cd11c01c8606a9d0b83ffa91d0b236a0e91bc4126d9ba9ce62906ada868e"}, - {file = "mypy-1.10.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d8681909f7b44d0b7b86e653ca152d6dff0eb5eb41694e163c6092124f8246d7"}, - {file = "mypy-1.10.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:378c03f53f10bbdd55ca94e46ec3ba255279706a6aacaecac52ad248f98205d3"}, - {file = "mypy-1.10.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bacf8f3a3d7d849f40ca6caea5c055122efe70e81480c8328ad29c55c69e93e"}, - {file = "mypy-1.10.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:701b5f71413f1e9855566a34d6e9d12624e9e0a8818a5704d74d6b0402e66c04"}, - {file = "mypy-1.10.1-cp312-cp312-win_amd64.whl", hash = "sha256:3c4c2992f6ea46ff7fce0072642cfb62af7a2484efe69017ed8b095f7b39ef31"}, - {file = "mypy-1.10.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:604282c886497645ffb87b8f35a57ec773a4a2721161e709a4422c1636ddde5c"}, - {file = "mypy-1.10.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37fd87cab83f09842653f08de066ee68f1182b9b5282e4634cdb4b407266bade"}, - {file = "mypy-1.10.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8addf6313777dbb92e9564c5d32ec122bf2c6c39d683ea64de6a1fd98b90fe37"}, - {file = "mypy-1.10.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5cc3ca0a244eb9a5249c7c583ad9a7e881aa5d7b73c35652296ddcdb33b2b9c7"}, - {file = "mypy-1.10.1-cp38-cp38-win_amd64.whl", hash = "sha256:1b3a2ffce52cc4dbaeee4df762f20a2905aa171ef157b82192f2e2f368eec05d"}, - {file = "mypy-1.10.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fe85ed6836165d52ae8b88f99527d3d1b2362e0cb90b005409b8bed90e9059b3"}, - {file = "mypy-1.10.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c2ae450d60d7d020d67ab440c6e3fae375809988119817214440033f26ddf7bf"}, - {file = "mypy-1.10.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6be84c06e6abd72f960ba9a71561c14137a583093ffcf9bbfaf5e613d63fa531"}, - {file = "mypy-1.10.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:2189ff1e39db399f08205e22a797383613ce1cb0cb3b13d8bcf0170e45b96cc3"}, - {file = "mypy-1.10.1-cp39-cp39-win_amd64.whl", hash = "sha256:97a131ee36ac37ce9581f4220311247ab6cba896b4395b9c87af0675a13a755f"}, - {file = "mypy-1.10.1-py3-none-any.whl", hash = "sha256:71d8ac0b906354ebda8ef1673e5fde785936ac1f29ff6987c7483cfbd5a4235a"}, - {file = "mypy-1.10.1.tar.gz", hash = "sha256:1f8f492d7db9e3593ef42d4f115f04e556130f2819ad33ab84551403e97dd4c0"}, + {file = "mypy-1.11.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a32fc80b63de4b5b3e65f4be82b4cfa362a46702672aa6a0f443b4689af7008c"}, + {file = "mypy-1.11.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c1952f5ea8a5a959b05ed5f16452fddadbaae48b5d39235ab4c3fc444d5fd411"}, + {file = "mypy-1.11.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e1e30dc3bfa4e157e53c1d17a0dad20f89dc433393e7702b813c10e200843b03"}, + {file = "mypy-1.11.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2c63350af88f43a66d3dfeeeb8d77af34a4f07d760b9eb3a8697f0386c7590b4"}, + {file = "mypy-1.11.1-cp310-cp310-win_amd64.whl", hash = "sha256:a831671bad47186603872a3abc19634f3011d7f83b083762c942442d51c58d58"}, + {file = "mypy-1.11.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7b6343d338390bb946d449677726edf60102a1c96079b4f002dedff375953fc5"}, + {file = "mypy-1.11.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e4fe9f4e5e521b458d8feb52547f4bade7ef8c93238dfb5bbc790d9ff2d770ca"}, + {file = "mypy-1.11.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:886c9dbecc87b9516eff294541bf7f3655722bf22bb898ee06985cd7269898de"}, + {file = "mypy-1.11.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fca4a60e1dd9fd0193ae0067eaeeb962f2d79e0d9f0f66223a0682f26ffcc809"}, + {file = "mypy-1.11.1-cp311-cp311-win_amd64.whl", hash = "sha256:0bd53faf56de9643336aeea1c925012837432b5faf1701ccca7fde70166ccf72"}, + {file = "mypy-1.11.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f39918a50f74dc5969807dcfaecafa804fa7f90c9d60506835036cc1bc891dc8"}, + {file = "mypy-1.11.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0bc71d1fb27a428139dd78621953effe0d208aed9857cb08d002280b0422003a"}, + {file = "mypy-1.11.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b868d3bcff720dd7217c383474008ddabaf048fad8d78ed948bb4b624870a417"}, + {file = "mypy-1.11.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a707ec1527ffcdd1c784d0924bf5cb15cd7f22683b919668a04d2b9c34549d2e"}, + {file = "mypy-1.11.1-cp312-cp312-win_amd64.whl", hash = "sha256:64f4a90e3ea07f590c5bcf9029035cf0efeae5ba8be511a8caada1a4893f5525"}, + {file = "mypy-1.11.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:749fd3213916f1751fff995fccf20c6195cae941dc968f3aaadf9bb4e430e5a2"}, + {file = "mypy-1.11.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b639dce63a0b19085213ec5fdd8cffd1d81988f47a2dec7100e93564f3e8fb3b"}, + {file = "mypy-1.11.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4c956b49c5d865394d62941b109728c5c596a415e9c5b2be663dd26a1ff07bc0"}, + {file = "mypy-1.11.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:45df906e8b6804ef4b666af29a87ad9f5921aad091c79cc38e12198e220beabd"}, + {file = "mypy-1.11.1-cp38-cp38-win_amd64.whl", hash = "sha256:d44be7551689d9d47b7abc27c71257adfdb53f03880841a5db15ddb22dc63edb"}, + {file = "mypy-1.11.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2684d3f693073ab89d76da8e3921883019ea8a3ec20fa5d8ecca6a2db4c54bbe"}, + {file = "mypy-1.11.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:79c07eb282cb457473add5052b63925e5cc97dfab9812ee65a7c7ab5e3cb551c"}, + {file = "mypy-1.11.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:11965c2f571ded6239977b14deebd3f4c3abd9a92398712d6da3a772974fad69"}, + {file = "mypy-1.11.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a2b43895a0f8154df6519706d9bca8280cda52d3d9d1514b2d9c3e26792a0b74"}, + {file = "mypy-1.11.1-cp39-cp39-win_amd64.whl", hash = "sha256:1a81cf05975fd61aec5ae16501a091cfb9f605dc3e3c878c0da32f250b74760b"}, + {file = "mypy-1.11.1-py3-none-any.whl", hash = "sha256:0624bdb940255d2dd24e829d99a13cfeb72e4e9031f9492148f410ed30bcab54"}, + {file = "mypy-1.11.1.tar.gz", hash = "sha256:f404a0b069709f18bbdb702eb3dcfe51910602995de00bd39cea3050b5772d08"}, ] [package.dependencies] mypy-extensions = ">=1.0.0" tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} -typing-extensions = ">=4.1.0" +typing-extensions = ">=4.6.0" [package.extras] dmypy = ["psutil (>=4.0)"] @@ -1815,57 +1815,57 @@ tox-to-nox = ["jinja2", "tox (<4)"] [[package]] name = "numpy" -version = "2.0.0" +version = "2.0.1" description = "Fundamental package for array computing in Python" category = "main" optional = false python-versions = ">=3.9" files = [ - {file = "numpy-2.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:04494f6ec467ccb5369d1808570ae55f6ed9b5809d7f035059000a37b8d7e86f"}, - {file = "numpy-2.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2635dbd200c2d6faf2ef9a0d04f0ecc6b13b3cad54f7c67c61155138835515d2"}, - {file = "numpy-2.0.0-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:0a43f0974d501842866cc83471bdb0116ba0dffdbaac33ec05e6afed5b615238"}, - {file = "numpy-2.0.0-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:8d83bb187fb647643bd56e1ae43f273c7f4dbcdf94550d7938cfc32566756514"}, - {file = "numpy-2.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79e843d186c8fb1b102bef3e2bc35ef81160ffef3194646a7fdd6a73c6b97196"}, - {file = "numpy-2.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d7696c615765091cc5093f76fd1fa069870304beaccfd58b5dcc69e55ef49c1"}, - {file = "numpy-2.0.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b4c76e3d4c56f145d41b7b6751255feefae92edbc9a61e1758a98204200f30fc"}, - {file = "numpy-2.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:acd3a644e4807e73b4e1867b769fbf1ce8c5d80e7caaef0d90dcdc640dfc9787"}, - {file = "numpy-2.0.0-cp310-cp310-win32.whl", hash = "sha256:cee6cc0584f71adefe2c908856ccc98702baf95ff80092e4ca46061538a2ba98"}, - {file = "numpy-2.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:ed08d2703b5972ec736451b818c2eb9da80d66c3e84aed1deeb0c345fefe461b"}, - {file = "numpy-2.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ad0c86f3455fbd0de6c31a3056eb822fc939f81b1618f10ff3406971893b62a5"}, - {file = "numpy-2.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e7f387600d424f91576af20518334df3d97bc76a300a755f9a8d6e4f5cadd289"}, - {file = "numpy-2.0.0-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:34f003cb88b1ba38cb9a9a4a3161c1604973d7f9d5552c38bc2f04f829536609"}, - {file = "numpy-2.0.0-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:b6f6a8f45d0313db07d6d1d37bd0b112f887e1369758a5419c0370ba915b3871"}, - {file = "numpy-2.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f64641b42b2429f56ee08b4f427a4d2daf916ec59686061de751a55aafa22e4"}, - {file = "numpy-2.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a7039a136017eaa92c1848152827e1424701532ca8e8967fe480fe1569dae581"}, - {file = "numpy-2.0.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:46e161722e0f619749d1cd892167039015b2c2817296104487cd03ed4a955995"}, - {file = "numpy-2.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0e50842b2295ba8414c8c1d9d957083d5dfe9e16828b37de883f51fc53c4016f"}, - {file = "numpy-2.0.0-cp311-cp311-win32.whl", hash = "sha256:2ce46fd0b8a0c947ae047d222f7136fc4d55538741373107574271bc00e20e8f"}, - {file = "numpy-2.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:fbd6acc766814ea6443628f4e6751d0da6593dae29c08c0b2606164db026970c"}, - {file = "numpy-2.0.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:354f373279768fa5a584bac997de6a6c9bc535c482592d7a813bb0c09be6c76f"}, - {file = "numpy-2.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4d2f62e55a4cd9c58c1d9a1c9edaedcd857a73cb6fda875bf79093f9d9086f85"}, - {file = "numpy-2.0.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:1e72728e7501a450288fc8e1f9ebc73d90cfd4671ebbd631f3e7857c39bd16f2"}, - {file = "numpy-2.0.0-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:84554fc53daa8f6abf8e8a66e076aff6ece62de68523d9f665f32d2fc50fd66e"}, - {file = "numpy-2.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c73aafd1afca80afecb22718f8700b40ac7cab927b8abab3c3e337d70e10e5a2"}, - {file = "numpy-2.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49d9f7d256fbc804391a7f72d4a617302b1afac1112fac19b6c6cec63fe7fe8a"}, - {file = "numpy-2.0.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:0ec84b9ba0654f3b962802edc91424331f423dcf5d5f926676e0150789cb3d95"}, - {file = "numpy-2.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:feff59f27338135776f6d4e2ec7aeeac5d5f7a08a83e80869121ef8164b74af9"}, - {file = "numpy-2.0.0-cp312-cp312-win32.whl", hash = "sha256:c5a59996dc61835133b56a32ebe4ef3740ea5bc19b3983ac60cc32be5a665d54"}, - {file = "numpy-2.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:a356364941fb0593bb899a1076b92dfa2029f6f5b8ba88a14fd0984aaf76d0df"}, - {file = "numpy-2.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e61155fae27570692ad1d327e81c6cf27d535a5d7ef97648a17d922224b216de"}, - {file = "numpy-2.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4554eb96f0fd263041baf16cf0881b3f5dafae7a59b1049acb9540c4d57bc8cb"}, - {file = "numpy-2.0.0-cp39-cp39-macosx_14_0_arm64.whl", hash = "sha256:903703372d46bce88b6920a0cd86c3ad82dae2dbef157b5fc01b70ea1cfc430f"}, - {file = "numpy-2.0.0-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:3e8e01233d57639b2e30966c63d36fcea099d17c53bf424d77f088b0f4babd86"}, - {file = "numpy-2.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1cde1753efe513705a0c6d28f5884e22bdc30438bf0085c5c486cdaff40cd67a"}, - {file = "numpy-2.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:821eedb7165ead9eebdb569986968b541f9908979c2da8a4967ecac4439bae3d"}, - {file = "numpy-2.0.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9a1712c015831da583b21c5bfe15e8684137097969c6d22e8316ba66b5baabe4"}, - {file = "numpy-2.0.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:9c27f0946a3536403efb0e1c28def1ae6730a72cd0d5878db38824855e3afc44"}, - {file = "numpy-2.0.0-cp39-cp39-win32.whl", hash = "sha256:63b92c512d9dbcc37f9d81b123dec99fdb318ba38c8059afc78086fe73820275"}, - {file = "numpy-2.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:3f6bed7f840d44c08ebdb73b1825282b801799e325bcbdfa6bc5c370e5aecc65"}, - {file = "numpy-2.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9416a5c2e92ace094e9f0082c5fd473502c91651fb896bc17690d6fc475128d6"}, - {file = "numpy-2.0.0-pp39-pypy39_pp73-macosx_14_0_x86_64.whl", hash = "sha256:17067d097ed036636fa79f6a869ac26df7db1ba22039d962422506640314933a"}, - {file = "numpy-2.0.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:38ecb5b0582cd125f67a629072fed6f83562d9dd04d7e03256c9829bdec027ad"}, - {file = "numpy-2.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:cef04d068f5fb0518a77857953193b6bb94809a806bd0a14983a8f12ada060c9"}, - {file = "numpy-2.0.0.tar.gz", hash = "sha256:cf5d1c9e6837f8af9f92b6bd3e86d513cdc11f60fd62185cc49ec7d1aba34864"}, + {file = "numpy-2.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0fbb536eac80e27a2793ffd787895242b7f18ef792563d742c2d673bfcb75134"}, + {file = "numpy-2.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:69ff563d43c69b1baba77af455dd0a839df8d25e8590e79c90fcbe1499ebde42"}, + {file = "numpy-2.0.1-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:1b902ce0e0a5bb7704556a217c4f63a7974f8f43e090aff03fcf262e0b135e02"}, + {file = "numpy-2.0.1-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:f1659887361a7151f89e79b276ed8dff3d75877df906328f14d8bb40bb4f5101"}, + {file = "numpy-2.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4658c398d65d1b25e1760de3157011a80375da861709abd7cef3bad65d6543f9"}, + {file = "numpy-2.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4127d4303b9ac9f94ca0441138acead39928938660ca58329fe156f84b9f3015"}, + {file = "numpy-2.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:e5eeca8067ad04bc8a2a8731183d51d7cbaac66d86085d5f4766ee6bf19c7f87"}, + {file = "numpy-2.0.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:9adbd9bb520c866e1bfd7e10e1880a1f7749f1f6e5017686a5fbb9b72cf69f82"}, + {file = "numpy-2.0.1-cp310-cp310-win32.whl", hash = "sha256:7b9853803278db3bdcc6cd5beca37815b133e9e77ff3d4733c247414e78eb8d1"}, + {file = "numpy-2.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:81b0893a39bc5b865b8bf89e9ad7807e16717f19868e9d234bdaf9b1f1393868"}, + {file = "numpy-2.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:75b4e316c5902d8163ef9d423b1c3f2f6252226d1aa5cd8a0a03a7d01ffc6268"}, + {file = "numpy-2.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6e4eeb6eb2fced786e32e6d8df9e755ce5be920d17f7ce00bc38fcde8ccdbf9e"}, + {file = "numpy-2.0.1-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:a1e01dcaab205fbece13c1410253a9eea1b1c9b61d237b6fa59bcc46e8e89343"}, + {file = "numpy-2.0.1-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:a8fc2de81ad835d999113ddf87d1ea2b0f4704cbd947c948d2f5513deafe5a7b"}, + {file = "numpy-2.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5a3d94942c331dd4e0e1147f7a8699a4aa47dffc11bf8a1523c12af8b2e91bbe"}, + {file = "numpy-2.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15eb4eca47d36ec3f78cde0a3a2ee24cf05ca7396ef808dda2c0ddad7c2bde67"}, + {file = "numpy-2.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:b83e16a5511d1b1f8a88cbabb1a6f6a499f82c062a4251892d9ad5d609863fb7"}, + {file = "numpy-2.0.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1f87fec1f9bc1efd23f4227becff04bd0e979e23ca50cc92ec88b38489db3b55"}, + {file = "numpy-2.0.1-cp311-cp311-win32.whl", hash = "sha256:36d3a9405fd7c511804dc56fc32974fa5533bdeb3cd1604d6b8ff1d292b819c4"}, + {file = "numpy-2.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:08458fbf403bff5e2b45f08eda195d4b0c9b35682311da5a5a0a0925b11b9bd8"}, + {file = "numpy-2.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:6bf4e6f4a2a2e26655717a1983ef6324f2664d7011f6ef7482e8c0b3d51e82ac"}, + {file = "numpy-2.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7d6fddc5fe258d3328cd8e3d7d3e02234c5d70e01ebe377a6ab92adb14039cb4"}, + {file = "numpy-2.0.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:5daab361be6ddeb299a918a7c0864fa8618af66019138263247af405018b04e1"}, + {file = "numpy-2.0.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:ea2326a4dca88e4a274ba3a4405eb6c6467d3ffbd8c7d38632502eaae3820587"}, + {file = "numpy-2.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:529af13c5f4b7a932fb0e1911d3a75da204eff023ee5e0e79c1751564221a5c8"}, + {file = "numpy-2.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6790654cb13eab303d8402354fabd47472b24635700f631f041bd0b65e37298a"}, + {file = "numpy-2.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:cbab9fc9c391700e3e1287666dfd82d8666d10e69a6c4a09ab97574c0b7ee0a7"}, + {file = "numpy-2.0.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:99d0d92a5e3613c33a5f01db206a33f8fdf3d71f2912b0de1739894668b7a93b"}, + {file = "numpy-2.0.1-cp312-cp312-win32.whl", hash = "sha256:173a00b9995f73b79eb0191129f2455f1e34c203f559dd118636858cc452a1bf"}, + {file = "numpy-2.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:bb2124fdc6e62baae159ebcfa368708867eb56806804d005860b6007388df171"}, + {file = "numpy-2.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bfc085b28d62ff4009364e7ca34b80a9a080cbd97c2c0630bb5f7f770dae9414"}, + {file = "numpy-2.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8fae4ebbf95a179c1156fab0b142b74e4ba4204c87bde8d3d8b6f9c34c5825ef"}, + {file = "numpy-2.0.1-cp39-cp39-macosx_14_0_arm64.whl", hash = "sha256:72dc22e9ec8f6eaa206deb1b1355eb2e253899d7347f5e2fae5f0af613741d06"}, + {file = "numpy-2.0.1-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:ec87f5f8aca726117a1c9b7083e7656a9d0d606eec7299cc067bb83d26f16e0c"}, + {file = "numpy-2.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f682ea61a88479d9498bf2091fdcd722b090724b08b31d63e022adc063bad59"}, + {file = "numpy-2.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8efc84f01c1cd7e34b3fb310183e72fcdf55293ee736d679b6d35b35d80bba26"}, + {file = "numpy-2.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:3fdabe3e2a52bc4eff8dc7a5044342f8bd9f11ef0934fcd3289a788c0eb10018"}, + {file = "numpy-2.0.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:24a0e1befbfa14615b49ba9659d3d8818a0f4d8a1c5822af8696706fbda7310c"}, + {file = "numpy-2.0.1-cp39-cp39-win32.whl", hash = "sha256:f9cf5ea551aec449206954b075db819f52adc1638d46a6738253a712d553c7b4"}, + {file = "numpy-2.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:e9e81fa9017eaa416c056e5d9e71be93d05e2c3c2ab308d23307a8bc4443c368"}, + {file = "numpy-2.0.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:61728fba1e464f789b11deb78a57805c70b2ed02343560456190d0501ba37b0f"}, + {file = "numpy-2.0.1-pp39-pypy39_pp73-macosx_14_0_x86_64.whl", hash = "sha256:12f5d865d60fb9734e60a60f1d5afa6d962d8d4467c120a1c0cda6eb2964437d"}, + {file = "numpy-2.0.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eacf3291e263d5a67d8c1a581a8ebbcfd6447204ef58828caf69a5e3e8c75990"}, + {file = "numpy-2.0.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:2c3a346ae20cfd80b6cfd3e60dc179963ef2ea58da5ec074fd3d9e7a1e7ba97f"}, + {file = "numpy-2.0.1.tar.gz", hash = "sha256:485b87235796410c3519a699cfe1faab097e509e90ebb05dcd098db2ae87e7b3"}, ] [[package]] @@ -1985,21 +1985,18 @@ xml = ["lxml (>=4.9.2)"] [[package]] name = "pandas-stubs" -version = "2.2.2.240603" +version = "2.2.2.240807" description = "Type annotations for pandas" category = "dev" optional = false python-versions = ">=3.9" files = [ - {file = "pandas_stubs-2.2.2.240603-py3-none-any.whl", hash = "sha256:e08ce7f602a4da2bff5a67475ba881c39f2a4d4f7fccc1cba57c6f35a379c6c0"}, - {file = "pandas_stubs-2.2.2.240603.tar.gz", hash = "sha256:2dcc86e8fa6ea41535a4561c1f08b3942ba5267b464eff2e99caeee66f9e4cd1"}, + {file = "pandas_stubs-2.2.2.240807-py3-none-any.whl", hash = "sha256:893919ad82be4275f0d07bb47a95d08bae580d3fdea308a7acfcb3f02e76186e"}, + {file = "pandas_stubs-2.2.2.240807.tar.gz", hash = "sha256:64a559725a57a449f46225fbafc422520b7410bff9252b661a225b5559192a93"}, ] [package.dependencies] -numpy = [ - {version = ">=1.23.5", markers = "python_version >= \"3.9\" and python_version < \"3.12\""}, - {version = ">=1.26.0", markers = "python_version >= \"3.12\" and python_version < \"3.13\""}, -] +numpy = ">=1.23.5" types-pytz = ">=2022.1.1" [[package]] @@ -2162,14 +2159,14 @@ type = ["mypy (>=1.8)"] [[package]] name = "plotly" -version = "5.22.0" +version = "5.23.0" description = "An open-source, interactive data visualization library for Python" category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "plotly-5.22.0-py3-none-any.whl", hash = "sha256:68fc1901f098daeb233cc3dd44ec9dc31fb3ca4f4e53189344199c43496ed006"}, - {file = "plotly-5.22.0.tar.gz", hash = "sha256:859fdadbd86b5770ae2466e542b761b247d1c6b49daed765b95bb8c7063e7469"}, + {file = "plotly-5.23.0-py3-none-any.whl", hash = "sha256:76cbe78f75eddc10c56f5a4ee3e7ccaade7c0a57465546f02098c0caed6c2d1a"}, + {file = "plotly-5.23.0.tar.gz", hash = "sha256:89e57d003a116303a34de6700862391367dd564222ab71f8531df70279fc0193"}, ] [package.dependencies] @@ -2218,14 +2215,14 @@ files = [ [[package]] name = "pre-commit" -version = "3.7.1" +version = "3.8.0" description = "A framework for managing and maintaining multi-language pre-commit hooks." category = "dev" optional = false python-versions = ">=3.9" files = [ - {file = "pre_commit-3.7.1-py2.py3-none-any.whl", hash = "sha256:fae36fd1d7ad7d6a5a1c0b0d5adb2ed1a3bda5a21bf6c3e5372073d7a11cd4c5"}, - {file = "pre_commit-3.7.1.tar.gz", hash = "sha256:8ca3ad567bc78a4972a3f1a477e94a79d4597e8140a6e0b651c5e33899c3654a"}, + {file = "pre_commit-3.8.0-py2.py3-none-any.whl", hash = "sha256:9a90a53bf82fdd8778d58085faf8d83df56e40dfe18f45b19446e26bf1b3a63f"}, + {file = "pre_commit-3.8.0.tar.gz", hash = "sha256:8bb6494d4a20423842e198980c9ecf9f96607a07ea29549e180eef9ae80fe7af"}, ] [package.dependencies] @@ -2255,14 +2252,14 @@ requests = ">=2.28.1,<3.0.0" [[package]] name = "prefixmaps" -version = "0.2.4" +version = "0.2.5" description = "A python library for retrieving semantic prefix maps" category = "main" optional = false python-versions = "<4.0,>=3.8" files = [ - {file = "prefixmaps-0.2.4-py3-none-any.whl", hash = "sha256:89bf0e6fb08c276f754f9624c42adf2e87c64ee92a3dde1f7eff01f22d85b512"}, - {file = "prefixmaps-0.2.4.tar.gz", hash = "sha256:ae86a1b31189d0516d199756d5808f75f44b39e86546c356cc78c0fe8d2078af"}, + {file = "prefixmaps-0.2.5-py3-none-any.whl", hash = "sha256:68caa04b3a6a8e058aa1c55affe32c62e44b564d031d63f768e267b796a1f3ee"}, + {file = "prefixmaps-0.2.5.tar.gz", hash = "sha256:aaccd2425ade2ea97a502c58be49fe8f3536e3d5e919712ae0358a39fc800799"}, ] [package.dependencies] @@ -2328,14 +2325,14 @@ files = [ [[package]] name = "pure-eval" -version = "0.2.2" +version = "0.2.3" description = "Safely evaluate AST nodes without side effects" category = "main" optional = false python-versions = "*" files = [ - {file = "pure_eval-0.2.2-py3-none-any.whl", hash = "sha256:01eaab343580944bc56080ebe0a674b39ec44a945e6d09ba7db3cb8cec289350"}, - {file = "pure_eval-0.2.2.tar.gz", hash = "sha256:2b45320af6dfaa1750f543d714b6d1c520a1688dec6fd24d339063ce0aaa9ac3"}, + {file = "pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0"}, + {file = "pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42"}, ] [package.extras] @@ -2468,14 +2465,14 @@ typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" [[package]] name = "pyfunnel" -version = "0.3.0" +version = "1.0.1" description = "Comparison tool for two (x, y) data sets given tolerances in x and y directions" category = "main" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +python-versions = ">=3.8" files = [ - {file = "pyfunnel-0.3.0-py3-none-any.whl", hash = "sha256:1bb7bec7faf7b3cb5839d61101e490145885ca19e596d1c75b300a8ca8518c3a"}, - {file = "pyfunnel-0.3.0.tar.gz", hash = "sha256:68256e82ecaa3832741dbf5f9c9a3420fcdb6b0c646406169e6c728ad1d47c6c"}, + {file = "pyfunnel-1.0.1-py3-none-any.whl", hash = "sha256:19836eaf1c9c7dd95e282d8ffd8462f2e9ce657f165c73905d81f9c2a18c4e2e"}, + {file = "pyfunnel-1.0.1.tar.gz", hash = "sha256:739e579708a6e1011ee89b07bf4b13502a0ad8e3211f69bb3e558c0bdb5cbf77"}, ] [package.dependencies] @@ -2844,62 +2841,65 @@ files = [ [[package]] name = "pyyaml" -version = "6.0.1" +version = "6.0.2" description = "YAML parser and emitter for Python" category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, - {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, - {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, - {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, - {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, - {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, - {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, - {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, - {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, - {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, - {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, - {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, - {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, - {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, - {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, - {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, - {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, - {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, - {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, - {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, - {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, - {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, - {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, - {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, - {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, - {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, - {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, - {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, - {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, - {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, - {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, - {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, - {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, - {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, - {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, - {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, - {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, - {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, - {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, - {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, - {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, - {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, - {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, - {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, - {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, - {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, - {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, - {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, - {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, - {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, + {file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"}, + {file = "PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed"}, + {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180"}, + {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68"}, + {file = "PyYAML-6.0.2-cp310-cp310-win32.whl", hash = "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99"}, + {file = "PyYAML-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e"}, + {file = "PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774"}, + {file = "PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85"}, + {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4"}, + {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e"}, + {file = "PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5"}, + {file = "PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44"}, + {file = "PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab"}, + {file = "PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476"}, + {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48"}, + {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b"}, + {file = "PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4"}, + {file = "PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8"}, + {file = "PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba"}, + {file = "PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5"}, + {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc"}, + {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652"}, + {file = "PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183"}, + {file = "PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563"}, + {file = "PyYAML-6.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083"}, + {file = "PyYAML-6.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706"}, + {file = "PyYAML-6.0.2-cp38-cp38-win32.whl", hash = "sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a"}, + {file = "PyYAML-6.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff"}, + {file = "PyYAML-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d"}, + {file = "PyYAML-6.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19"}, + {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e"}, + {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725"}, + {file = "PyYAML-6.0.2-cp39-cp39-win32.whl", hash = "sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631"}, + {file = "PyYAML-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8"}, + {file = "pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e"}, ] [[package]] @@ -3041,111 +3041,115 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "rpds-py" -version = "0.18.1" +version = "0.20.0" description = "Python bindings to Rust's persistent data structures (rpds)" category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "rpds_py-0.18.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:d31dea506d718693b6b2cffc0648a8929bdc51c70a311b2770f09611caa10d53"}, - {file = "rpds_py-0.18.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:732672fbc449bab754e0b15356c077cc31566df874964d4801ab14f71951ea80"}, - {file = "rpds_py-0.18.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a98a1f0552b5f227a3d6422dbd61bc6f30db170939bd87ed14f3c339aa6c7c9"}, - {file = "rpds_py-0.18.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7f1944ce16401aad1e3f7d312247b3d5de7981f634dc9dfe90da72b87d37887d"}, - {file = "rpds_py-0.18.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:38e14fb4e370885c4ecd734f093a2225ee52dc384b86fa55fe3f74638b2cfb09"}, - {file = "rpds_py-0.18.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:08d74b184f9ab6289b87b19fe6a6d1a97fbfea84b8a3e745e87a5de3029bf944"}, - {file = "rpds_py-0.18.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d70129cef4a8d979caa37e7fe957202e7eee8ea02c5e16455bc9808a59c6b2f0"}, - {file = "rpds_py-0.18.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ce0bb20e3a11bd04461324a6a798af34d503f8d6f1aa3d2aa8901ceaf039176d"}, - {file = "rpds_py-0.18.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:81c5196a790032e0fc2464c0b4ab95f8610f96f1f2fa3d4deacce6a79852da60"}, - {file = "rpds_py-0.18.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:f3027be483868c99b4985fda802a57a67fdf30c5d9a50338d9db646d590198da"}, - {file = "rpds_py-0.18.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:d44607f98caa2961bab4fa3c4309724b185b464cdc3ba6f3d7340bac3ec97cc1"}, - {file = "rpds_py-0.18.1-cp310-none-win32.whl", hash = "sha256:c273e795e7a0f1fddd46e1e3cb8be15634c29ae8ff31c196debb620e1edb9333"}, - {file = "rpds_py-0.18.1-cp310-none-win_amd64.whl", hash = "sha256:8352f48d511de5f973e4f2f9412736d7dea76c69faa6d36bcf885b50c758ab9a"}, - {file = "rpds_py-0.18.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:6b5ff7e1d63a8281654b5e2896d7f08799378e594f09cf3674e832ecaf396ce8"}, - {file = "rpds_py-0.18.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8927638a4d4137a289e41d0fd631551e89fa346d6dbcfc31ad627557d03ceb6d"}, - {file = "rpds_py-0.18.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:154bf5c93d79558b44e5b50cc354aa0459e518e83677791e6adb0b039b7aa6a7"}, - {file = "rpds_py-0.18.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:07f2139741e5deb2c5154a7b9629bc5aa48c766b643c1a6750d16f865a82c5fc"}, - {file = "rpds_py-0.18.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8c7672e9fba7425f79019db9945b16e308ed8bc89348c23d955c8c0540da0a07"}, - {file = "rpds_py-0.18.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:489bdfe1abd0406eba6b3bb4fdc87c7fa40f1031de073d0cfb744634cc8fa261"}, - {file = "rpds_py-0.18.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c20f05e8e3d4fc76875fc9cb8cf24b90a63f5a1b4c5b9273f0e8225e169b100"}, - {file = "rpds_py-0.18.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:967342e045564cef76dfcf1edb700b1e20838d83b1aa02ab313e6a497cf923b8"}, - {file = "rpds_py-0.18.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2cc7c1a47f3a63282ab0f422d90ddac4aa3034e39fc66a559ab93041e6505da7"}, - {file = "rpds_py-0.18.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:f7afbfee1157e0f9376c00bb232e80a60e59ed716e3211a80cb8506550671e6e"}, - {file = "rpds_py-0.18.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9e6934d70dc50f9f8ea47081ceafdec09245fd9f6032669c3b45705dea096b88"}, - {file = "rpds_py-0.18.1-cp311-none-win32.whl", hash = "sha256:c69882964516dc143083d3795cb508e806b09fc3800fd0d4cddc1df6c36e76bb"}, - {file = "rpds_py-0.18.1-cp311-none-win_amd64.whl", hash = "sha256:70a838f7754483bcdc830444952fd89645569e7452e3226de4a613a4c1793fb2"}, - {file = "rpds_py-0.18.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:3dd3cd86e1db5aadd334e011eba4e29d37a104b403e8ca24dcd6703c68ca55b3"}, - {file = "rpds_py-0.18.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:05f3d615099bd9b13ecf2fc9cf2d839ad3f20239c678f461c753e93755d629ee"}, - {file = "rpds_py-0.18.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:35b2b771b13eee8729a5049c976197ff58a27a3829c018a04341bcf1ae409b2b"}, - {file = "rpds_py-0.18.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ee17cd26b97d537af8f33635ef38be873073d516fd425e80559f4585a7b90c43"}, - {file = "rpds_py-0.18.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b646bf655b135ccf4522ed43d6902af37d3f5dbcf0da66c769a2b3938b9d8184"}, - {file = "rpds_py-0.18.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:19ba472b9606c36716062c023afa2484d1e4220548751bda14f725a7de17b4f6"}, - {file = "rpds_py-0.18.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e30ac5e329098903262dc5bdd7e2086e0256aa762cc8b744f9e7bf2a427d3f8"}, - {file = "rpds_py-0.18.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d58ad6317d188c43750cb76e9deacf6051d0f884d87dc6518e0280438648a9ac"}, - {file = "rpds_py-0.18.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e1735502458621921cee039c47318cb90b51d532c2766593be6207eec53e5c4c"}, - {file = "rpds_py-0.18.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:f5bab211605d91db0e2995a17b5c6ee5edec1270e46223e513eaa20da20076ac"}, - {file = "rpds_py-0.18.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2fc24a329a717f9e2448f8cd1f960f9dac4e45b6224d60734edeb67499bab03a"}, - {file = "rpds_py-0.18.1-cp312-none-win32.whl", hash = "sha256:1805d5901779662d599d0e2e4159d8a82c0b05faa86ef9222bf974572286b2b6"}, - {file = "rpds_py-0.18.1-cp312-none-win_amd64.whl", hash = "sha256:720edcb916df872d80f80a1cc5ea9058300b97721efda8651efcd938a9c70a72"}, - {file = "rpds_py-0.18.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:c827576e2fa017a081346dce87d532a5310241648eb3700af9a571a6e9fc7e74"}, - {file = "rpds_py-0.18.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:aa3679e751408d75a0b4d8d26d6647b6d9326f5e35c00a7ccd82b78ef64f65f8"}, - {file = "rpds_py-0.18.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0abeee75434e2ee2d142d650d1e54ac1f8b01e6e6abdde8ffd6eeac6e9c38e20"}, - {file = "rpds_py-0.18.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ed402d6153c5d519a0faf1bb69898e97fb31613b49da27a84a13935ea9164dfc"}, - {file = "rpds_py-0.18.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:338dee44b0cef8b70fd2ef54b4e09bb1b97fc6c3a58fea5db6cc083fd9fc2724"}, - {file = "rpds_py-0.18.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7750569d9526199c5b97e5a9f8d96a13300950d910cf04a861d96f4273d5b104"}, - {file = "rpds_py-0.18.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:607345bd5912aacc0c5a63d45a1f73fef29e697884f7e861094e443187c02be5"}, - {file = "rpds_py-0.18.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:207c82978115baa1fd8d706d720b4a4d2b0913df1c78c85ba73fe6c5804505f0"}, - {file = "rpds_py-0.18.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:6d1e42d2735d437e7e80bab4d78eb2e459af48c0a46e686ea35f690b93db792d"}, - {file = "rpds_py-0.18.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:5463c47c08630007dc0fe99fb480ea4f34a89712410592380425a9b4e1611d8e"}, - {file = "rpds_py-0.18.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:06d218939e1bf2ca50e6b0ec700ffe755e5216a8230ab3e87c059ebb4ea06afc"}, - {file = "rpds_py-0.18.1-cp38-none-win32.whl", hash = "sha256:312fe69b4fe1ffbe76520a7676b1e5ac06ddf7826d764cc10265c3b53f96dbe9"}, - {file = "rpds_py-0.18.1-cp38-none-win_amd64.whl", hash = "sha256:9437ca26784120a279f3137ee080b0e717012c42921eb07861b412340f85bae2"}, - {file = "rpds_py-0.18.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:19e515b78c3fc1039dd7da0a33c28c3154458f947f4dc198d3c72db2b6b5dc93"}, - {file = "rpds_py-0.18.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a7b28c5b066bca9a4eb4e2f2663012debe680f097979d880657f00e1c30875a0"}, - {file = "rpds_py-0.18.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:673fdbbf668dd958eff750e500495ef3f611e2ecc209464f661bc82e9838991e"}, - {file = "rpds_py-0.18.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d960de62227635d2e61068f42a6cb6aae91a7fe00fca0e3aeed17667c8a34611"}, - {file = "rpds_py-0.18.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:352a88dc7892f1da66b6027af06a2e7e5d53fe05924cc2cfc56495b586a10b72"}, - {file = "rpds_py-0.18.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4e0ee01ad8260184db21468a6e1c37afa0529acc12c3a697ee498d3c2c4dcaf3"}, - {file = "rpds_py-0.18.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4c39ad2f512b4041343ea3c7894339e4ca7839ac38ca83d68a832fc8b3748ab"}, - {file = "rpds_py-0.18.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:aaa71ee43a703c321906813bb252f69524f02aa05bf4eec85f0c41d5d62d0f4c"}, - {file = "rpds_py-0.18.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:6cd8098517c64a85e790657e7b1e509b9fe07487fd358e19431cb120f7d96338"}, - {file = "rpds_py-0.18.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:4adec039b8e2928983f885c53b7cc4cda8965b62b6596501a0308d2703f8af1b"}, - {file = "rpds_py-0.18.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:32b7daaa3e9389db3695964ce8e566e3413b0c43e3394c05e4b243a4cd7bef26"}, - {file = "rpds_py-0.18.1-cp39-none-win32.whl", hash = "sha256:2625f03b105328729f9450c8badda34d5243231eef6535f80064d57035738360"}, - {file = "rpds_py-0.18.1-cp39-none-win_amd64.whl", hash = "sha256:bf18932d0003c8c4d51a39f244231986ab23ee057d235a12b2684ea26a353590"}, - {file = "rpds_py-0.18.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:cbfbea39ba64f5e53ae2915de36f130588bba71245b418060ec3330ebf85678e"}, - {file = "rpds_py-0.18.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:a3d456ff2a6a4d2adcdf3c1c960a36f4fd2fec6e3b4902a42a384d17cf4e7a65"}, - {file = "rpds_py-0.18.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7700936ef9d006b7ef605dc53aa364da2de5a3aa65516a1f3ce73bf82ecfc7ae"}, - {file = "rpds_py-0.18.1-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:51584acc5916212e1bf45edd17f3a6b05fe0cbb40482d25e619f824dccb679de"}, - {file = "rpds_py-0.18.1-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:942695a206a58d2575033ff1e42b12b2aece98d6003c6bc739fbf33d1773b12f"}, - {file = "rpds_py-0.18.1-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b906b5f58892813e5ba5c6056d6a5ad08f358ba49f046d910ad992196ea61397"}, - {file = "rpds_py-0.18.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6f8e3fecca256fefc91bb6765a693d96692459d7d4c644660a9fff32e517843"}, - {file = "rpds_py-0.18.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7732770412bab81c5a9f6d20aeb60ae943a9b36dcd990d876a773526468e7163"}, - {file = "rpds_py-0.18.1-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:bd1105b50ede37461c1d51b9698c4f4be6e13e69a908ab7751e3807985fc0346"}, - {file = "rpds_py-0.18.1-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:618916f5535784960f3ecf8111581f4ad31d347c3de66d02e728de460a46303c"}, - {file = "rpds_py-0.18.1-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:17c6d2155e2423f7e79e3bb18151c686d40db42d8645e7977442170c360194d4"}, - {file = "rpds_py-0.18.1-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:6c4c4c3f878df21faf5fac86eda32671c27889e13570645a9eea0a1abdd50922"}, - {file = "rpds_py-0.18.1-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:fab6ce90574645a0d6c58890e9bcaac8d94dff54fb51c69e5522a7358b80ab64"}, - {file = "rpds_py-0.18.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:531796fb842b53f2695e94dc338929e9f9dbf473b64710c28af5a160b2a8927d"}, - {file = "rpds_py-0.18.1-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:740884bc62a5e2bbb31e584f5d23b32320fd75d79f916f15a788d527a5e83644"}, - {file = "rpds_py-0.18.1-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:998125738de0158f088aef3cb264a34251908dd2e5d9966774fdab7402edfab7"}, - {file = "rpds_py-0.18.1-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e2be6e9dd4111d5b31ba3b74d17da54a8319d8168890fbaea4b9e5c3de630ae5"}, - {file = "rpds_py-0.18.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d0cee71bc618cd93716f3c1bf56653740d2d13ddbd47673efa8bf41435a60daa"}, - {file = "rpds_py-0.18.1-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2c3caec4ec5cd1d18e5dd6ae5194d24ed12785212a90b37f5f7f06b8bedd7139"}, - {file = "rpds_py-0.18.1-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:27bba383e8c5231cd559affe169ca0b96ec78d39909ffd817f28b166d7ddd4d8"}, - {file = "rpds_py-0.18.1-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:a888e8bdb45916234b99da2d859566f1e8a1d2275a801bb8e4a9644e3c7e7909"}, - {file = "rpds_py-0.18.1-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:6031b25fb1b06327b43d841f33842b383beba399884f8228a6bb3df3088485ff"}, - {file = "rpds_py-0.18.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:48c2faaa8adfacefcbfdb5f2e2e7bdad081e5ace8d182e5f4ade971f128e6bb3"}, - {file = "rpds_py-0.18.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:d85164315bd68c0806768dc6bb0429c6f95c354f87485ee3593c4f6b14def2bd"}, - {file = "rpds_py-0.18.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6afd80f6c79893cfc0574956f78a0add8c76e3696f2d6a15bca2c66c415cf2d4"}, - {file = "rpds_py-0.18.1-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fa242ac1ff583e4ec7771141606aafc92b361cd90a05c30d93e343a0c2d82a89"}, - {file = "rpds_py-0.18.1-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d21be4770ff4e08698e1e8e0bce06edb6ea0626e7c8f560bc08222880aca6a6f"}, - {file = "rpds_py-0.18.1-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c45a639e93a0c5d4b788b2613bd637468edd62f8f95ebc6fcc303d58ab3f0a8"}, - {file = "rpds_py-0.18.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:910e71711d1055b2768181efa0a17537b2622afeb0424116619817007f8a2b10"}, - {file = "rpds_py-0.18.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b9bb1f182a97880f6078283b3505a707057c42bf55d8fca604f70dedfdc0772a"}, - {file = "rpds_py-0.18.1-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:1d54f74f40b1f7aaa595a02ff42ef38ca654b1469bef7d52867da474243cc633"}, - {file = "rpds_py-0.18.1-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:8d2e182c9ee01135e11e9676e9a62dfad791a7a467738f06726872374a83db49"}, - {file = "rpds_py-0.18.1-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:636a15acc588f70fda1661234761f9ed9ad79ebed3f2125d44be0862708b666e"}, - {file = "rpds_py-0.18.1.tar.gz", hash = "sha256:dc48b479d540770c811fbd1eb9ba2bb66951863e448efec2e2c102625328e92f"}, + {file = "rpds_py-0.20.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:3ad0fda1635f8439cde85c700f964b23ed5fc2d28016b32b9ee5fe30da5c84e2"}, + {file = "rpds_py-0.20.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9bb4a0d90fdb03437c109a17eade42dfbf6190408f29b2744114d11586611d6f"}, + {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c6377e647bbfd0a0b159fe557f2c6c602c159fc752fa316572f012fc0bf67150"}, + {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eb851b7df9dda52dc1415ebee12362047ce771fc36914586b2e9fcbd7d293b3e"}, + {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1e0f80b739e5a8f54837be5d5c924483996b603d5502bfff79bf33da06164ee2"}, + {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5a8c94dad2e45324fc74dce25e1645d4d14df9a4e54a30fa0ae8bad9a63928e3"}, + {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8e604fe73ba048c06085beaf51147eaec7df856824bfe7b98657cf436623daf"}, + {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:df3de6b7726b52966edf29663e57306b23ef775faf0ac01a3e9f4012a24a4140"}, + {file = "rpds_py-0.20.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cf258ede5bc22a45c8e726b29835b9303c285ab46fc7c3a4cc770736b5304c9f"}, + {file = "rpds_py-0.20.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:55fea87029cded5df854ca7e192ec7bdb7ecd1d9a3f63d5c4eb09148acf4a7ce"}, + {file = "rpds_py-0.20.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ae94bd0b2f02c28e199e9bc51485d0c5601f58780636185660f86bf80c89af94"}, + {file = "rpds_py-0.20.0-cp310-none-win32.whl", hash = "sha256:28527c685f237c05445efec62426d285e47a58fb05ba0090a4340b73ecda6dee"}, + {file = "rpds_py-0.20.0-cp310-none-win_amd64.whl", hash = "sha256:238a2d5b1cad28cdc6ed15faf93a998336eb041c4e440dd7f902528b8891b399"}, + {file = "rpds_py-0.20.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:ac2f4f7a98934c2ed6505aead07b979e6f999389f16b714448fb39bbaa86a489"}, + {file = "rpds_py-0.20.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:220002c1b846db9afd83371d08d239fdc865e8f8c5795bbaec20916a76db3318"}, + {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8d7919548df3f25374a1f5d01fbcd38dacab338ef5f33e044744b5c36729c8db"}, + {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:758406267907b3781beee0f0edfe4a179fbd97c0be2e9b1154d7f0a1279cf8e5"}, + {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3d61339e9f84a3f0767b1995adfb171a0d00a1185192718a17af6e124728e0f5"}, + {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1259c7b3705ac0a0bd38197565a5d603218591d3f6cee6e614e380b6ba61c6f6"}, + {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5c1dc0f53856b9cc9a0ccca0a7cc61d3d20a7088201c0937f3f4048c1718a209"}, + {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7e60cb630f674a31f0368ed32b2a6b4331b8350d67de53c0359992444b116dd3"}, + {file = "rpds_py-0.20.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:dbe982f38565bb50cb7fb061ebf762c2f254ca3d8c20d4006878766e84266272"}, + {file = "rpds_py-0.20.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:514b3293b64187172bc77c8fb0cdae26981618021053b30d8371c3a902d4d5ad"}, + {file = "rpds_py-0.20.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d0a26ffe9d4dd35e4dfdd1e71f46401cff0181c75ac174711ccff0459135fa58"}, + {file = "rpds_py-0.20.0-cp311-none-win32.whl", hash = "sha256:89c19a494bf3ad08c1da49445cc5d13d8fefc265f48ee7e7556839acdacf69d0"}, + {file = "rpds_py-0.20.0-cp311-none-win_amd64.whl", hash = "sha256:c638144ce971df84650d3ed0096e2ae7af8e62ecbbb7b201c8935c370df00a2c"}, + {file = "rpds_py-0.20.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a84ab91cbe7aab97f7446652d0ed37d35b68a465aeef8fc41932a9d7eee2c1a6"}, + {file = "rpds_py-0.20.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:56e27147a5a4c2c21633ff8475d185734c0e4befd1c989b5b95a5d0db699b21b"}, + {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2580b0c34583b85efec8c5c5ec9edf2dfe817330cc882ee972ae650e7b5ef739"}, + {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b80d4a7900cf6b66bb9cee5c352b2d708e29e5a37fe9bf784fa97fc11504bf6c"}, + {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:50eccbf054e62a7b2209b28dc7a22d6254860209d6753e6b78cfaeb0075d7bee"}, + {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:49a8063ea4296b3a7e81a5dfb8f7b2d73f0b1c20c2af401fb0cdf22e14711a96"}, + {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ea438162a9fcbee3ecf36c23e6c68237479f89f962f82dae83dc15feeceb37e4"}, + {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:18d7585c463087bddcfa74c2ba267339f14f2515158ac4db30b1f9cbdb62c8ef"}, + {file = "rpds_py-0.20.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d4c7d1a051eeb39f5c9547e82ea27cbcc28338482242e3e0b7768033cb083821"}, + {file = "rpds_py-0.20.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:e4df1e3b3bec320790f699890d41c59d250f6beda159ea3c44c3f5bac1976940"}, + {file = "rpds_py-0.20.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2cf126d33a91ee6eedc7f3197b53e87a2acdac63602c0f03a02dd69e4b138174"}, + {file = "rpds_py-0.20.0-cp312-none-win32.whl", hash = "sha256:8bc7690f7caee50b04a79bf017a8d020c1f48c2a1077ffe172abec59870f1139"}, + {file = "rpds_py-0.20.0-cp312-none-win_amd64.whl", hash = "sha256:0e13e6952ef264c40587d510ad676a988df19adea20444c2b295e536457bc585"}, + {file = "rpds_py-0.20.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:aa9a0521aeca7d4941499a73ad7d4f8ffa3d1affc50b9ea11d992cd7eff18a29"}, + {file = "rpds_py-0.20.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4a1f1d51eccb7e6c32ae89243cb352389228ea62f89cd80823ea7dd1b98e0b91"}, + {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8a86a9b96070674fc88b6f9f71a97d2c1d3e5165574615d1f9168ecba4cecb24"}, + {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6c8ef2ebf76df43f5750b46851ed1cdf8f109d7787ca40035fe19fbdc1acc5a7"}, + {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b74b25f024b421d5859d156750ea9a65651793d51b76a2e9238c05c9d5f203a9"}, + {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:57eb94a8c16ab08fef6404301c38318e2c5a32216bf5de453e2714c964c125c8"}, + {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1940dae14e715e2e02dfd5b0f64a52e8374a517a1e531ad9412319dc3ac7879"}, + {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d20277fd62e1b992a50c43f13fbe13277a31f8c9f70d59759c88f644d66c619f"}, + {file = "rpds_py-0.20.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:06db23d43f26478303e954c34c75182356ca9aa7797d22c5345b16871ab9c45c"}, + {file = "rpds_py-0.20.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b2a5db5397d82fa847e4c624b0c98fe59d2d9b7cf0ce6de09e4d2e80f8f5b3f2"}, + {file = "rpds_py-0.20.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5a35df9f5548fd79cb2f52d27182108c3e6641a4feb0f39067911bf2adaa3e57"}, + {file = "rpds_py-0.20.0-cp313-none-win32.whl", hash = "sha256:fd2d84f40633bc475ef2d5490b9c19543fbf18596dcb1b291e3a12ea5d722f7a"}, + {file = "rpds_py-0.20.0-cp313-none-win_amd64.whl", hash = "sha256:9bc2d153989e3216b0559251b0c260cfd168ec78b1fac33dd485750a228db5a2"}, + {file = "rpds_py-0.20.0-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:f2fbf7db2012d4876fb0d66b5b9ba6591197b0f165db8d99371d976546472a24"}, + {file = "rpds_py-0.20.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:1e5f3cd7397c8f86c8cc72d5a791071431c108edd79872cdd96e00abd8497d29"}, + {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce9845054c13696f7af7f2b353e6b4f676dab1b4b215d7fe5e05c6f8bb06f965"}, + {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c3e130fd0ec56cb76eb49ef52faead8ff09d13f4527e9b0c400307ff72b408e1"}, + {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4b16aa0107ecb512b568244ef461f27697164d9a68d8b35090e9b0c1c8b27752"}, + {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aa7f429242aae2947246587d2964fad750b79e8c233a2367f71b554e9447949c"}, + {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af0fc424a5842a11e28956e69395fbbeab2c97c42253169d87e90aac2886d751"}, + {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b8c00a3b1e70c1d3891f0db1b05292747f0dbcfb49c43f9244d04c70fbc40eb8"}, + {file = "rpds_py-0.20.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:40ce74fc86ee4645d0a225498d091d8bc61f39b709ebef8204cb8b5a464d3c0e"}, + {file = "rpds_py-0.20.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:4fe84294c7019456e56d93e8ababdad5a329cd25975be749c3f5f558abb48253"}, + {file = "rpds_py-0.20.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:338ca4539aad4ce70a656e5187a3a31c5204f261aef9f6ab50e50bcdffaf050a"}, + {file = "rpds_py-0.20.0-cp38-none-win32.whl", hash = "sha256:54b43a2b07db18314669092bb2de584524d1ef414588780261e31e85846c26a5"}, + {file = "rpds_py-0.20.0-cp38-none-win_amd64.whl", hash = "sha256:a1862d2d7ce1674cffa6d186d53ca95c6e17ed2b06b3f4c476173565c862d232"}, + {file = "rpds_py-0.20.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:3fde368e9140312b6e8b6c09fb9f8c8c2f00999d1823403ae90cc00480221b22"}, + {file = "rpds_py-0.20.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9824fb430c9cf9af743cf7aaf6707bf14323fb51ee74425c380f4c846ea70789"}, + {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:11ef6ce74616342888b69878d45e9f779b95d4bd48b382a229fe624a409b72c5"}, + {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c52d3f2f82b763a24ef52f5d24358553e8403ce05f893b5347098014f2d9eff2"}, + {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d35cef91e59ebbeaa45214861874bc6f19eb35de96db73e467a8358d701a96c"}, + {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d72278a30111e5b5525c1dd96120d9e958464316f55adb030433ea905866f4de"}, + {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4c29cbbba378759ac5786730d1c3cb4ec6f8ababf5c42a9ce303dc4b3d08cda"}, + {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6632f2d04f15d1bd6fe0eedd3b86d9061b836ddca4c03d5cf5c7e9e6b7c14580"}, + {file = "rpds_py-0.20.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:d0b67d87bb45ed1cd020e8fbf2307d449b68abc45402fe1a4ac9e46c3c8b192b"}, + {file = "rpds_py-0.20.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:ec31a99ca63bf3cd7f1a5ac9fe95c5e2d060d3c768a09bc1d16e235840861420"}, + {file = "rpds_py-0.20.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:22e6c9976e38f4d8c4a63bd8a8edac5307dffd3ee7e6026d97f3cc3a2dc02a0b"}, + {file = "rpds_py-0.20.0-cp39-none-win32.whl", hash = "sha256:569b3ea770c2717b730b61998b6c54996adee3cef69fc28d444f3e7920313cf7"}, + {file = "rpds_py-0.20.0-cp39-none-win_amd64.whl", hash = "sha256:e6900ecdd50ce0facf703f7a00df12374b74bbc8ad9fe0f6559947fb20f82364"}, + {file = "rpds_py-0.20.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:617c7357272c67696fd052811e352ac54ed1d9b49ab370261a80d3b6ce385045"}, + {file = "rpds_py-0.20.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:9426133526f69fcaba6e42146b4e12d6bc6c839b8b555097020e2b78ce908dcc"}, + {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:deb62214c42a261cb3eb04d474f7155279c1a8a8c30ac89b7dcb1721d92c3c02"}, + {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fcaeb7b57f1a1e071ebd748984359fef83ecb026325b9d4ca847c95bc7311c92"}, + {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d454b8749b4bd70dd0a79f428731ee263fa6995f83ccb8bada706e8d1d3ff89d"}, + {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d807dc2051abe041b6649681dce568f8e10668e3c1c6543ebae58f2d7e617855"}, + {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c3c20f0ddeb6e29126d45f89206b8291352b8c5b44384e78a6499d68b52ae511"}, + {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b7f19250ceef892adf27f0399b9e5afad019288e9be756d6919cb58892129f51"}, + {file = "rpds_py-0.20.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:4f1ed4749a08379555cebf4650453f14452eaa9c43d0a95c49db50c18b7da075"}, + {file = "rpds_py-0.20.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:dcedf0b42bcb4cfff4101d7771a10532415a6106062f005ab97d1d0ab5681c60"}, + {file = "rpds_py-0.20.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:39ed0d010457a78f54090fafb5d108501b5aa5604cc22408fc1c0c77eac14344"}, + {file = "rpds_py-0.20.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:bb273176be34a746bdac0b0d7e4e2c467323d13640b736c4c477881a3220a989"}, + {file = "rpds_py-0.20.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f918a1a130a6dfe1d7fe0f105064141342e7dd1611f2e6a21cd2f5c8cb1cfb3e"}, + {file = "rpds_py-0.20.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:f60012a73aa396be721558caa3a6fd49b3dd0033d1675c6d59c4502e870fcf0c"}, + {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d2b1ad682a3dfda2a4e8ad8572f3100f95fad98cb99faf37ff0ddfe9cbf9d03"}, + {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:614fdafe9f5f19c63ea02817fa4861c606a59a604a77c8cdef5aa01d28b97921"}, + {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fa518bcd7600c584bf42e6617ee8132869e877db2f76bcdc281ec6a4113a53ab"}, + {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f0475242f447cc6cb8a9dd486d68b2ef7fbee84427124c232bff5f63b1fe11e5"}, + {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f90a4cd061914a60bd51c68bcb4357086991bd0bb93d8aa66a6da7701370708f"}, + {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:def7400461c3a3f26e49078302e1c1b38f6752342c77e3cf72ce91ca69fb1bc1"}, + {file = "rpds_py-0.20.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:65794e4048ee837494aea3c21a28ad5fc080994dfba5b036cf84de37f7ad5074"}, + {file = "rpds_py-0.20.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:faefcc78f53a88f3076b7f8be0a8f8d35133a3ecf7f3770895c25f8813460f08"}, + {file = "rpds_py-0.20.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:5b4f105deeffa28bbcdff6c49b34e74903139afa690e35d2d9e3c2c2fba18cec"}, + {file = "rpds_py-0.20.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:fdfc3a892927458d98f3d55428ae46b921d1f7543b89382fdb483f5640daaec8"}, + {file = "rpds_py-0.20.0.tar.gz", hash = "sha256:d72a210824facfdaf8768cf2d7ca25a042c30320b3020de2fa04640920d4e121"}, ] [[package]] @@ -3508,61 +3512,61 @@ pandas = ["pandas (>=1.3.5)"] [[package]] name = "sqlalchemy" -version = "2.0.31" +version = "2.0.32" description = "Database Abstraction Library" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "SQLAlchemy-2.0.31-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f2a213c1b699d3f5768a7272de720387ae0122f1becf0901ed6eaa1abd1baf6c"}, - {file = "SQLAlchemy-2.0.31-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9fea3d0884e82d1e33226935dac990b967bef21315cbcc894605db3441347443"}, - {file = "SQLAlchemy-2.0.31-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3ad7f221d8a69d32d197e5968d798217a4feebe30144986af71ada8c548e9fa"}, - {file = "SQLAlchemy-2.0.31-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f2bee229715b6366f86a95d497c347c22ddffa2c7c96143b59a2aa5cc9eebbc"}, - {file = "SQLAlchemy-2.0.31-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cd5b94d4819c0c89280b7c6109c7b788a576084bf0a480ae17c227b0bc41e109"}, - {file = "SQLAlchemy-2.0.31-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:750900a471d39a7eeba57580b11983030517a1f512c2cb287d5ad0fcf3aebd58"}, - {file = "SQLAlchemy-2.0.31-cp310-cp310-win32.whl", hash = "sha256:7bd112be780928c7f493c1a192cd8c5fc2a2a7b52b790bc5a84203fb4381c6be"}, - {file = "SQLAlchemy-2.0.31-cp310-cp310-win_amd64.whl", hash = "sha256:5a48ac4d359f058474fadc2115f78a5cdac9988d4f99eae44917f36aa1476327"}, - {file = "SQLAlchemy-2.0.31-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f68470edd70c3ac3b6cd5c2a22a8daf18415203ca1b036aaeb9b0fb6f54e8298"}, - {file = "SQLAlchemy-2.0.31-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2e2c38c2a4c5c634fe6c3c58a789712719fa1bf9b9d6ff5ebfce9a9e5b89c1ca"}, - {file = "SQLAlchemy-2.0.31-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd15026f77420eb2b324dcb93551ad9c5f22fab2c150c286ef1dc1160f110203"}, - {file = "SQLAlchemy-2.0.31-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2196208432deebdfe3b22185d46b08f00ac9d7b01284e168c212919891289396"}, - {file = "SQLAlchemy-2.0.31-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:352b2770097f41bff6029b280c0e03b217c2dcaddc40726f8f53ed58d8a85da4"}, - {file = "SQLAlchemy-2.0.31-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:56d51ae825d20d604583f82c9527d285e9e6d14f9a5516463d9705dab20c3740"}, - {file = "SQLAlchemy-2.0.31-cp311-cp311-win32.whl", hash = "sha256:6e2622844551945db81c26a02f27d94145b561f9d4b0c39ce7bfd2fda5776dac"}, - {file = "SQLAlchemy-2.0.31-cp311-cp311-win_amd64.whl", hash = "sha256:ccaf1b0c90435b6e430f5dd30a5aede4764942a695552eb3a4ab74ed63c5b8d3"}, - {file = "SQLAlchemy-2.0.31-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3b74570d99126992d4b0f91fb87c586a574a5872651185de8297c6f90055ae42"}, - {file = "SQLAlchemy-2.0.31-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6f77c4f042ad493cb8595e2f503c7a4fe44cd7bd59c7582fd6d78d7e7b8ec52c"}, - {file = "SQLAlchemy-2.0.31-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cd1591329333daf94467e699e11015d9c944f44c94d2091f4ac493ced0119449"}, - {file = "SQLAlchemy-2.0.31-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:74afabeeff415e35525bf7a4ecdab015f00e06456166a2eba7590e49f8db940e"}, - {file = "SQLAlchemy-2.0.31-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b9c01990d9015df2c6f818aa8f4297d42ee71c9502026bb074e713d496e26b67"}, - {file = "SQLAlchemy-2.0.31-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:66f63278db425838b3c2b1c596654b31939427016ba030e951b292e32b99553e"}, - {file = "SQLAlchemy-2.0.31-cp312-cp312-win32.whl", hash = "sha256:0b0f658414ee4e4b8cbcd4a9bb0fd743c5eeb81fc858ca517217a8013d282c96"}, - {file = "SQLAlchemy-2.0.31-cp312-cp312-win_amd64.whl", hash = "sha256:fa4b1af3e619b5b0b435e333f3967612db06351217c58bfb50cee5f003db2a5a"}, - {file = "SQLAlchemy-2.0.31-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:f43e93057cf52a227eda401251c72b6fbe4756f35fa6bfebb5d73b86881e59b0"}, - {file = "SQLAlchemy-2.0.31-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d337bf94052856d1b330d5fcad44582a30c532a2463776e1651bd3294ee7e58b"}, - {file = "SQLAlchemy-2.0.31-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c06fb43a51ccdff3b4006aafee9fcf15f63f23c580675f7734245ceb6b6a9e05"}, - {file = "SQLAlchemy-2.0.31-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:b6e22630e89f0e8c12332b2b4c282cb01cf4da0d26795b7eae16702a608e7ca1"}, - {file = "SQLAlchemy-2.0.31-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:79a40771363c5e9f3a77f0e28b3302801db08040928146e6808b5b7a40749c88"}, - {file = "SQLAlchemy-2.0.31-cp37-cp37m-win32.whl", hash = "sha256:501ff052229cb79dd4c49c402f6cb03b5a40ae4771efc8bb2bfac9f6c3d3508f"}, - {file = "SQLAlchemy-2.0.31-cp37-cp37m-win_amd64.whl", hash = "sha256:597fec37c382a5442ffd471f66ce12d07d91b281fd474289356b1a0041bdf31d"}, - {file = "SQLAlchemy-2.0.31-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:dc6d69f8829712a4fd799d2ac8d79bdeff651c2301b081fd5d3fe697bd5b4ab9"}, - {file = "SQLAlchemy-2.0.31-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:23b9fbb2f5dd9e630db70fbe47d963c7779e9c81830869bd7d137c2dc1ad05fb"}, - {file = "SQLAlchemy-2.0.31-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2a21c97efcbb9f255d5c12a96ae14da873233597dfd00a3a0c4ce5b3e5e79704"}, - {file = "SQLAlchemy-2.0.31-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26a6a9837589c42b16693cf7bf836f5d42218f44d198f9343dd71d3164ceeeac"}, - {file = "SQLAlchemy-2.0.31-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:dc251477eae03c20fae8db9c1c23ea2ebc47331bcd73927cdcaecd02af98d3c3"}, - {file = "SQLAlchemy-2.0.31-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:2fd17e3bb8058359fa61248c52c7b09a97cf3c820e54207a50af529876451808"}, - {file = "SQLAlchemy-2.0.31-cp38-cp38-win32.whl", hash = "sha256:c76c81c52e1e08f12f4b6a07af2b96b9b15ea67ccdd40ae17019f1c373faa227"}, - {file = "SQLAlchemy-2.0.31-cp38-cp38-win_amd64.whl", hash = "sha256:4b600e9a212ed59355813becbcf282cfda5c93678e15c25a0ef896b354423238"}, - {file = "SQLAlchemy-2.0.31-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b6cf796d9fcc9b37011d3f9936189b3c8074a02a4ed0c0fbbc126772c31a6d4"}, - {file = "SQLAlchemy-2.0.31-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:78fe11dbe37d92667c2c6e74379f75746dc947ee505555a0197cfba9a6d4f1a4"}, - {file = "SQLAlchemy-2.0.31-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2fc47dc6185a83c8100b37acda27658fe4dbd33b7d5e7324111f6521008ab4fe"}, - {file = "SQLAlchemy-2.0.31-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8a41514c1a779e2aa9a19f67aaadeb5cbddf0b2b508843fcd7bafdf4c6864005"}, - {file = "SQLAlchemy-2.0.31-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:afb6dde6c11ea4525318e279cd93c8734b795ac8bb5dda0eedd9ebaca7fa23f1"}, - {file = "SQLAlchemy-2.0.31-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:3f9faef422cfbb8fd53716cd14ba95e2ef655400235c3dfad1b5f467ba179c8c"}, - {file = "SQLAlchemy-2.0.31-cp39-cp39-win32.whl", hash = "sha256:fc6b14e8602f59c6ba893980bea96571dd0ed83d8ebb9c4479d9ed5425d562e9"}, - {file = "SQLAlchemy-2.0.31-cp39-cp39-win_amd64.whl", hash = "sha256:3cb8a66b167b033ec72c3812ffc8441d4e9f5f78f5e31e54dcd4c90a4ca5bebc"}, - {file = "SQLAlchemy-2.0.31-py3-none-any.whl", hash = "sha256:69f3e3c08867a8e4856e92d7afb618b95cdee18e0bc1647b77599722c9a28911"}, - {file = "SQLAlchemy-2.0.31.tar.gz", hash = "sha256:b607489dd4a54de56984a0c7656247504bd5523d9d0ba799aef59d4add009484"}, + {file = "SQLAlchemy-2.0.32-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0c9045ecc2e4db59bfc97b20516dfdf8e41d910ac6fb667ebd3a79ea54084619"}, + {file = "SQLAlchemy-2.0.32-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1467940318e4a860afd546ef61fefb98a14d935cd6817ed07a228c7f7c62f389"}, + {file = "SQLAlchemy-2.0.32-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5954463675cb15db8d4b521f3566a017c8789222b8316b1e6934c811018ee08b"}, + {file = "SQLAlchemy-2.0.32-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:167e7497035c303ae50651b351c28dc22a40bb98fbdb8468cdc971821b1ae533"}, + {file = "SQLAlchemy-2.0.32-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b27dfb676ac02529fb6e343b3a482303f16e6bc3a4d868b73935b8792edb52d0"}, + {file = "SQLAlchemy-2.0.32-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:bf2360a5e0f7bd75fa80431bf8ebcfb920c9f885e7956c7efde89031695cafb8"}, + {file = "SQLAlchemy-2.0.32-cp310-cp310-win32.whl", hash = "sha256:306fe44e754a91cd9d600a6b070c1f2fadbb4a1a257b8781ccf33c7067fd3e4d"}, + {file = "SQLAlchemy-2.0.32-cp310-cp310-win_amd64.whl", hash = "sha256:99db65e6f3ab42e06c318f15c98f59a436f1c78179e6a6f40f529c8cc7100b22"}, + {file = "SQLAlchemy-2.0.32-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:21b053be28a8a414f2ddd401f1be8361e41032d2ef5884b2f31d31cb723e559f"}, + {file = "SQLAlchemy-2.0.32-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b178e875a7a25b5938b53b006598ee7645172fccafe1c291a706e93f48499ff5"}, + {file = "SQLAlchemy-2.0.32-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:723a40ee2cc7ea653645bd4cf024326dea2076673fc9d3d33f20f6c81db83e1d"}, + {file = "SQLAlchemy-2.0.32-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:295ff8689544f7ee7e819529633d058bd458c1fd7f7e3eebd0f9268ebc56c2a0"}, + {file = "SQLAlchemy-2.0.32-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:49496b68cd190a147118af585173ee624114dfb2e0297558c460ad7495f9dfe2"}, + {file = "SQLAlchemy-2.0.32-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:acd9b73c5c15f0ec5ce18128b1fe9157ddd0044abc373e6ecd5ba376a7e5d961"}, + {file = "SQLAlchemy-2.0.32-cp311-cp311-win32.whl", hash = "sha256:9365a3da32dabd3e69e06b972b1ffb0c89668994c7e8e75ce21d3e5e69ddef28"}, + {file = "SQLAlchemy-2.0.32-cp311-cp311-win_amd64.whl", hash = "sha256:8bd63d051f4f313b102a2af1cbc8b80f061bf78f3d5bd0843ff70b5859e27924"}, + {file = "SQLAlchemy-2.0.32-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:6bab3db192a0c35e3c9d1560eb8332463e29e5507dbd822e29a0a3c48c0a8d92"}, + {file = "SQLAlchemy-2.0.32-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:19d98f4f58b13900d8dec4ed09dd09ef292208ee44cc9c2fe01c1f0a2fe440e9"}, + {file = "SQLAlchemy-2.0.32-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3cd33c61513cb1b7371fd40cf221256456d26a56284e7d19d1f0b9f1eb7dd7e8"}, + {file = "SQLAlchemy-2.0.32-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7d6ba0497c1d066dd004e0f02a92426ca2df20fac08728d03f67f6960271feec"}, + {file = "SQLAlchemy-2.0.32-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2b6be53e4fde0065524f1a0a7929b10e9280987b320716c1509478b712a7688c"}, + {file = "SQLAlchemy-2.0.32-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:916a798f62f410c0b80b63683c8061f5ebe237b0f4ad778739304253353bc1cb"}, + {file = "SQLAlchemy-2.0.32-cp312-cp312-win32.whl", hash = "sha256:31983018b74908ebc6c996a16ad3690301a23befb643093fcfe85efd292e384d"}, + {file = "SQLAlchemy-2.0.32-cp312-cp312-win_amd64.whl", hash = "sha256:4363ed245a6231f2e2957cccdda3c776265a75851f4753c60f3004b90e69bfeb"}, + {file = "SQLAlchemy-2.0.32-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b8afd5b26570bf41c35c0121801479958b4446751a3971fb9a480c1afd85558e"}, + {file = "SQLAlchemy-2.0.32-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c750987fc876813f27b60d619b987b057eb4896b81117f73bb8d9918c14f1cad"}, + {file = "SQLAlchemy-2.0.32-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ada0102afff4890f651ed91120c1120065663506b760da4e7823913ebd3258be"}, + {file = "SQLAlchemy-2.0.32-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:78c03d0f8a5ab4f3034c0e8482cfcc415a3ec6193491cfa1c643ed707d476f16"}, + {file = "SQLAlchemy-2.0.32-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:3bd1cae7519283ff525e64645ebd7a3e0283f3c038f461ecc1c7b040a0c932a1"}, + {file = "SQLAlchemy-2.0.32-cp37-cp37m-win32.whl", hash = "sha256:01438ebcdc566d58c93af0171c74ec28efe6a29184b773e378a385e6215389da"}, + {file = "SQLAlchemy-2.0.32-cp37-cp37m-win_amd64.whl", hash = "sha256:4979dc80fbbc9d2ef569e71e0896990bc94df2b9fdbd878290bd129b65ab579c"}, + {file = "SQLAlchemy-2.0.32-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c742be912f57586ac43af38b3848f7688863a403dfb220193a882ea60e1ec3a"}, + {file = "SQLAlchemy-2.0.32-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:62e23d0ac103bcf1c5555b6c88c114089587bc64d048fef5bbdb58dfd26f96da"}, + {file = "SQLAlchemy-2.0.32-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:251f0d1108aab8ea7b9aadbd07fb47fb8e3a5838dde34aa95a3349876b5a1f1d"}, + {file = "SQLAlchemy-2.0.32-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ef18a84e5116340e38eca3e7f9eeaaef62738891422e7c2a0b80feab165905f"}, + {file = "SQLAlchemy-2.0.32-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:3eb6a97a1d39976f360b10ff208c73afb6a4de86dd2a6212ddf65c4a6a2347d5"}, + {file = "SQLAlchemy-2.0.32-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:0c1c9b673d21477cec17ab10bc4decb1322843ba35b481585facd88203754fc5"}, + {file = "SQLAlchemy-2.0.32-cp38-cp38-win32.whl", hash = "sha256:c41a2b9ca80ee555decc605bd3c4520cc6fef9abde8fd66b1cf65126a6922d65"}, + {file = "SQLAlchemy-2.0.32-cp38-cp38-win_amd64.whl", hash = "sha256:8a37e4d265033c897892279e8adf505c8b6b4075f2b40d77afb31f7185cd6ecd"}, + {file = "SQLAlchemy-2.0.32-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:52fec964fba2ef46476312a03ec8c425956b05c20220a1a03703537824b5e8e1"}, + {file = "SQLAlchemy-2.0.32-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:328429aecaba2aee3d71e11f2477c14eec5990fb6d0e884107935f7fb6001632"}, + {file = "SQLAlchemy-2.0.32-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:85a01b5599e790e76ac3fe3aa2f26e1feba56270023d6afd5550ed63c68552b3"}, + {file = "SQLAlchemy-2.0.32-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aaf04784797dcdf4c0aa952c8d234fa01974c4729db55c45732520ce12dd95b4"}, + {file = "SQLAlchemy-2.0.32-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:4488120becf9b71b3ac718f4138269a6be99a42fe023ec457896ba4f80749525"}, + {file = "SQLAlchemy-2.0.32-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:14e09e083a5796d513918a66f3d6aedbc131e39e80875afe81d98a03312889e6"}, + {file = "SQLAlchemy-2.0.32-cp39-cp39-win32.whl", hash = "sha256:0d322cc9c9b2154ba7e82f7bf25ecc7c36fbe2d82e2933b3642fc095a52cfc78"}, + {file = "SQLAlchemy-2.0.32-cp39-cp39-win_amd64.whl", hash = "sha256:7dd8583df2f98dea28b5cd53a1beac963f4f9d087888d75f22fcc93a07cf8d84"}, + {file = "SQLAlchemy-2.0.32-py3-none-any.whl", hash = "sha256:e567a8793a692451f706b363ccf3c45e056b67d90ead58c3bc9471af5d212202"}, + {file = "SQLAlchemy-2.0.32.tar.gz", hash = "sha256:c1b88cc8b02b6a5f0efb0345a03672d4c897dc7d92585176f88c67346f565ea8"}, ] [package.dependencies] @@ -3616,14 +3620,14 @@ tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] [[package]] name = "tenacity" -version = "8.4.2" +version = "9.0.0" description = "Retry code until it succeeds" category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "tenacity-8.4.2-py3-none-any.whl", hash = "sha256:9e6f7cf7da729125c7437222f8a522279751cdfbe6b67bfe64f75d3a348661b2"}, - {file = "tenacity-8.4.2.tar.gz", hash = "sha256:cd80a53a79336edba8489e767f729e4f391c896956b57140b5d7511a64bbd3ef"}, + {file = "tenacity-9.0.0-py3-none-any.whl", hash = "sha256:93de0c98785b27fcf659856aa9f54bfbd399e29969b0621bc7f762bd441b4539"}, + {file = "tenacity-9.0.0.tar.gz", hash = "sha256:807f37ca97d62aa361264d497b0e31e92b8027044942bfa756160d908320d73b"}, ] [package.extras] @@ -3705,14 +3709,14 @@ types-html5lib = "*" [[package]] name = "types-html5lib" -version = "1.1.11.20240228" +version = "1.1.11.20240806" description = "Typing stubs for html5lib" category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "types-html5lib-1.1.11.20240228.tar.gz", hash = "sha256:22736b7299e605ec4ba539d48691e905fd0c61c3ea610acc59922232dc84cede"}, - {file = "types_html5lib-1.1.11.20240228-py3-none-any.whl", hash = "sha256:af5de0125cb0fe5667543b158db83849b22e25c0e36c9149836b095548bf1020"}, + {file = "types-html5lib-1.1.11.20240806.tar.gz", hash = "sha256:8060dc98baf63d6796a765bbbc809fff9f7a383f6e3a9add526f814c086545ef"}, + {file = "types_html5lib-1.1.11.20240806-py3-none-any.whl", hash = "sha256:575c4fd84ba8eeeaa8520c7e4c7042b7791f5ec3e9c0a5d5c418124c42d9e7e4"}, ] [[package]] @@ -3741,14 +3745,14 @@ files = [ [[package]] name = "types-simplejson" -version = "3.19.0.20240310" +version = "3.19.0.20240801" description = "Typing stubs for simplejson" category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "types-simplejson-3.19.0.20240310.tar.gz", hash = "sha256:2831366f70d5d55832c3d978dff7c989575d55fb38621d086dbfee7a30c2b500"}, - {file = "types_simplejson-3.19.0.20240310-py3-none-any.whl", hash = "sha256:6f06d8e50112bc931863a40e2cf463a99223d55fe07f275826fa969962bb56a4"}, + {file = "types-simplejson-3.19.0.20240801.tar.gz", hash = "sha256:ef90cc81dd915f26c452fa2b5e0cbd3a36af81074ae63878fcf8a477e7594e4d"}, + {file = "types_simplejson-3.19.0.20240801-py3-none-any.whl", hash = "sha256:37f1b33c8626d7f072ea87737629310674845d54d187f12387fe33d31c938288"}, ] [[package]] @@ -3995,13 +3999,13 @@ files = [ [[package]] name = "yattag" -version = "1.15.2" +version = "1.16.0" description = "Generate HTML or XML in a pythonic way. Pure python alternative to web template engines.Can fill HTML forms with default values and error messages." category = "main" optional = false python-versions = "*" files = [ - {file = "yattag-1.15.2.tar.gz", hash = "sha256:aad9f540bd22dc503e5b5506cc47856facf081aa71fd35f727371b63e1e402bf"}, + {file = "yattag-1.16.0.tar.gz", hash = "sha256:0978247b9754d9f44e3703c64374ab9fa872d18de95ac5772fdfdd3c3f0d0706"}, ] [metadata] diff --git a/tests/simplified_house.yaml b/tests/simplified_house.yaml new file mode 100644 index 0000000..feb174e --- /dev/null +++ b/tests/simplified_house.yaml @@ -0,0 +1,152 @@ +materials: + - id: MATERIAL:001 + thermal_conductivity: 0.035 + density: 2000.0 + specific_heat_capacity: 1000.0 + - id: MATERIAL:002 + thermal_conductivity: 0.035 + density: 2000.0 + specific_heat_capacity: 1000.0 + - id: MATERIAL:003 + thermal_conductivity: 0.035 + density: 2000.0 + specific_heat_capacity: 1000.0 + +constructions: + - id: CONSTRUCTION:001 + layers: + - material: MATERIAL:001 + thickness: 0.1 + - material: MATERIAL:002 + thickness: 0.1 + - material: MATERIAL:003 + thickness: 0.1 +spaces: + - occupancy: {} + parameters: + floor_area: 100.0 + average_room_height: 2.5 + external_boundaries: + external_walls: + - surface: 100.0 + azimuth: 180.0 + tilt: wall + construction: CONSTRUCTION:001 + - surface: 100.0 + azimuth: 180.0 + tilt: wall + construction: CONSTRUCTION:001 + - surface: 200.0 + azimuth: 180.0 + tilt: wall + construction: CONSTRUCTION:001 + emissions: + - radiator: + id: SYSTEM:007 + - valve: + id: SYSTEM:008 + control: + emission_control: + - occupancy: {} + parameters: + floor_area: 100.0 + average_room_height: 2.5 + external_boundaries: + external_walls: + - surface: 100.0 + azimuth: 180.0 + tilt: wall + construction: CONSTRUCTION:001 + - surface: 100.0 + azimuth: 180.0 + tilt: wall + construction: CONSTRUCTION:001 + - surface: 200.0 + azimuth: 180.0 + tilt: wall + construction: CONSTRUCTION:001 + emissions: + - radiator: + id: SYSTEM:009 + - valve: + id: SYSTEM:010 + control: + emission_control: + - occupancy: {} + parameters: + floor_area: 100.0 + average_room_height: 2.5 + external_boundaries: + external_walls: + - surface: 100.0 + azimuth: 180.0 + tilt: wall + construction: CONSTRUCTION:001 + - surface: 100.0 + azimuth: 180.0 + tilt: wall + construction: CONSTRUCTION:001 + - surface: 200.0 + azimuth: 180.0 + tilt: wall + construction: CONSTRUCTION:001 + emissions: + - radiator: + id: SYSTEM:011 + - valve: + id: SYSTEM:012 + control: + emission_control: + +systems: + - boiler: + id: SYSTEM:001 + control: + boiler_control: + - pump: + id: SYSTEM:002 + control: + collector_control: + outlets: + - SYSTEM:004 + - SYSTEM:006 + inlets: + - SYSTEM:001 + - split_valve: + id: SYSTEM:003 + inlets: + - SYSTEM:008 + - SYSTEM:010 + outlets: + - SYSTEM:001 + - three_way_valve: + id: SYSTEM:004 + control: + three_way_valve_control: + outlets: + - SYSTEM:013 + - SYSTEM:003 + - temperature_sensor: + id: SYSTEM:013 + outlets: + - SYSTEM:009 + - SYSTEM:007 + - split_valve: + id: SYSTEM:005 + inlets: + - SYSTEM:012 + outlets: + - SYSTEM:001 + - three_way_valve: + id: SYSTEM:006 + control: + three_way_valve_control: + outlets: + - SYSTEM:014 + - SYSTEM:005 + - temperature_sensor: + id: SYSTEM:014 + inlets: + - SYSTEM:006 + outlets: + - SYSTEM:011 diff --git a/tests/test_schema.py b/tests/test_schema.py index d6dbdde..6ca4c66 100644 --- a/tests/test_schema.py +++ b/tests/test_schema.py @@ -5,10 +5,16 @@ from typing import Optional import pytest +import yaml from linkml.validator import validate_file from tests.conftest import _read, clean_model, is_success -from trano.data_models.conversion import convert_model, convert_network +from trano.data_models.conversion import ( + _parse, + assign_space_id, + convert_model, + convert_network, +) from trano.simulate.simulate import SimulationOptions, simulate @@ -93,3 +99,21 @@ def test_simulate_model_yaml() -> None: options=SimulationOptions(end_time=3600), ) assert is_success(results) + + +def test_simplified_yaml() -> None: + model_path = Path(__file__).parents[1].joinpath("tests", "simplified_house.yaml") + data = yaml.safe_load(model_path.read_text()) + data = assign_space_id(data) + _parse(data) + with tempfile.NamedTemporaryFile(mode="w+", suffix=".yaml") as f: + yaml.safe_dump(data, f) + network = convert_network("simplified_yaml", Path(f.name)) + + with tempfile.TemporaryDirectory(ignore_cleanup_errors=True) as project_path: + results = simulate( + Path(project_path), + network, + options=SimulationOptions(end_time=3600), + ) + assert is_success(results) diff --git a/trano/data_models/conversion.py b/trano/data_models/conversion.py index 694f280..d5ff43e 100644 --- a/trano/data_models/conversion.py +++ b/trano/data_models/conversion.py @@ -5,6 +5,7 @@ from typing import Any, Dict import yaml # type: ignore +from linkml.validator import validate_file # type: ignore from pydantic import BaseModel from trano.construction import Construction, Layer @@ -28,6 +29,9 @@ from trano.models.elements.weather import Weather from trano.topology import Network +DATA_MODEL_PATH = Path(__file__).parent.joinpath("trano.yaml") +COUNTER: Dict[Any, Any] = Counter() + def to_camel_case(snake_str: str) -> str: return "".join(x.capitalize() for x in snake_str.lower().split("_")) @@ -38,6 +42,14 @@ class Component(BaseModel): component_instance: Any +def validate_model(model_path: Path) -> None: + # TODO: why? this is not right, + + report = validate_file(model_path, DATA_MODEL_PATH, "Building") + if report.results: + raise Exception("Invalid model.") + + def _instantiate_component(component_: Dict[str, Any]) -> Component: component = copy.deepcopy(component_) components = component.items() @@ -71,6 +83,7 @@ def convert_network(name: str, model_path: Path) -> Network: # noqa: C901 occupancy = None data = None system_counter: Any = Counter() + validate_model(model_path) if model_path.suffix == ".yaml": data = yaml.safe_load(model_path.read_text()) if model_path.suffix == ".json": @@ -104,7 +117,7 @@ def convert_network(name: str, model_path: Path) -> Network: # noqa: C901 ) ) external_walls.append(external_wall_) - if space.get("occupancy"): + if space.get("occupancy") is not None: system_counter.update(["occupancy"]) occupancy = Occupancy( **( @@ -149,3 +162,26 @@ def convert_network(name: str, model_path: Path) -> Network: # noqa: C901 def convert_model(name: str, model_path: Path) -> str: network = convert_network(name, model_path) return network.model() + + +def _parse(data: Dict[str, Any]) -> None: + for k, v in data.items(): + if isinstance(v, dict): + _parse(v) + elif isinstance(v, list): + for i in v: + if isinstance(i, dict): + _parse(i) + elif v is None and "control" in k: + COUNTER.update(["control"]) # type: ignore + data[k] = {"id": f"CONTROL:{COUNTER['control']}"} + + +def assign_space_id(data: Dict[str, Any]) -> Dict[str, Any]: + space_counter: Dict[Any, Any] = Counter() + spaces = [] + for space in data.get("spaces", []): + space_counter.update(["space"]) # type: ignore + spaces.append({"id": f"SPACE:{space_counter['space']}"} | space) + data["spaces"] = spaces + return data diff --git a/trano/data_models/trano.yaml b/trano/data_models/trano.yaml index 093d820..b97852a 100644 --- a/trano/data_models/trano.yaml +++ b/trano/data_models/trano.yaml @@ -21,6 +21,8 @@ prefixes: MATERIAL: http://example.org/MATERIAL/ CONSTRUCTION: http://example.org/CONSTRUCTION/ CONTROL: http://example.org/CONTROL/ + OCCUPANCY: http://example.org/OCCUPANCY/ + SPACE: http://example.org/SPACE/ default_prefix: trano default_range: string diff --git a/trano/plot/plot.py b/trano/plot/plot.py index 67bfb59..b8091c8 100644 --- a/trano/plot/plot.py +++ b/trano/plot/plot.py @@ -32,7 +32,7 @@ def plot(data: Reader, figure: Figure, show: bool = True) -> pyFigure: except KeyError: logger.warning(f"Key {line.key} not found in data") continue - (p,) = axis.plot( + (p,) = axis.plot( # type: ignore line_data.loc[1], linestyle=line.line_style, linewidth=line.line_width, From 17c230582b8b40e403c7aa895415e1db7bdf64fb Mon Sep 17 00:00:00 2001 From: aan Date: Fri, 9 Aug 2024 16:12:13 +0200 Subject: [PATCH 10/11] feat: Simplified house description bugfix. --- .pre-commit-config.yaml | 2 +- tests/test_schema.py | 30 ++++++++---------------- trano/data_models/conversion.py | 41 +++++++++++++++++++++++++-------- 3 files changed, 41 insertions(+), 32 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 7cbb69f..2c08f85 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -19,7 +19,7 @@ repos: rev: 4.0.1 hooks: - id: flake8 - args: ["--ignore=ANN101,ANN102,W503,INP001,FS003", "--max-line-length=120"] + args: ["--ignore=ANN101,ANN102,W503,INP001,FS003,SIM106", "--max-line-length=120"] exclude: tests/excl/ additional_dependencies: - flake8-annotations==2.9.0 diff --git a/tests/test_schema.py b/tests/test_schema.py index 6ca4c66..ca236b0 100644 --- a/tests/test_schema.py +++ b/tests/test_schema.py @@ -5,16 +5,10 @@ from typing import Optional import pytest -import yaml from linkml.validator import validate_file from tests.conftest import _read, clean_model, is_success -from trano.data_models.conversion import ( - _parse, - assign_space_id, - convert_model, - convert_network, -) +from trano.data_models.conversion import convert_model, convert_network from trano.simulate.simulate import SimulationOptions, simulate @@ -103,17 +97,11 @@ def test_simulate_model_yaml() -> None: def test_simplified_yaml() -> None: model_path = Path(__file__).parents[1].joinpath("tests", "simplified_house.yaml") - data = yaml.safe_load(model_path.read_text()) - data = assign_space_id(data) - _parse(data) - with tempfile.NamedTemporaryFile(mode="w+", suffix=".yaml") as f: - yaml.safe_dump(data, f) - network = convert_network("simplified_yaml", Path(f.name)) - - with tempfile.TemporaryDirectory(ignore_cleanup_errors=True) as project_path: - results = simulate( - Path(project_path), - network, - options=SimulationOptions(end_time=3600), - ) - assert is_success(results) + network = convert_network("simplified_yaml", model_path) + with tempfile.TemporaryDirectory(ignore_cleanup_errors=True) as project_path: + results = simulate( + Path(project_path), + network, + options=SimulationOptions(end_time=3600), + ) + assert is_success(results) diff --git a/trano/data_models/conversion.py b/trano/data_models/conversion.py index d5ff43e..26fe0f6 100644 --- a/trano/data_models/conversion.py +++ b/trano/data_models/conversion.py @@ -1,5 +1,6 @@ import copy import json +import tempfile from collections import Counter from pathlib import Path from typing import Any, Dict @@ -43,7 +44,6 @@ class Component(BaseModel): def validate_model(model_path: Path) -> None: - # TODO: why? this is not right, report = validate_file(model_path, DATA_MODEL_PATH, "Building") if report.results: @@ -77,19 +77,40 @@ def _instantiate_component(component_: Dict[str, Any]) -> Component: return Component(name=name, component_instance=component) +class EnrichedModel(BaseModel): + data: Dict[str, Any] + path: Path + + +def load_and_enrich_model(model_path: Path) -> EnrichedModel: + if model_path.suffix == ".yaml": + load_function = yaml.safe_load + dump_function = yaml.safe_dump + elif model_path.suffix == ".json": + load_function = json.loads + dump_function = json.dump + else: + raise Exception("Invalid file format") + data = load_function(model_path.read_text()) + data = assign_space_id(data) + _parse(data) + with tempfile.NamedTemporaryFile( + mode="w+", suffix=model_path.suffix, delete=False + ) as f: + dump_function(data, f) + return EnrichedModel(path=Path(f.name), data=data) + + # TODO: reduce complexity -def convert_network(name: str, model_path: Path) -> Network: # noqa: C901 +def convert_network(name: str, model_path: Path) -> Network: network = Network(name=name) occupancy = None - data = None system_counter: Any = Counter() - validate_model(model_path) - if model_path.suffix == ".yaml": - data = yaml.safe_load(model_path.read_text()) - if model_path.suffix == ".json": - data = json.loads(model_path.read_text()) - if not data: - raise Exception("Invalid file format") + + enriched_model = load_and_enrich_model(model_path) + validate_model(enriched_model.path) + data = enriched_model.data + materials = { material["id"]: Material(**(material | {"name": material["id"]})) for material in data["materials"] From 1e7a49e7e701516b0771dd8895781a5c795c3d02 Mon Sep 17 00:00:00 2001 From: aan Date: Sat, 10 Aug 2024 11:45:28 +0200 Subject: [PATCH 11/11] feat: Added windows and floor description. --- tests/data/house.mo | 174 +- tests/data/house_yaml.mo | 3261 ------------------------------- tests/house.json | 53 +- tests/house.yaml | 42 +- tests/simplified_house.yaml | 8 +- tests/test_schema.py | 69 +- trano/data_models/conversion.py | 110 +- trano/data_models/trano.yaml | 92 +- trano/glass.py | 9 +- 9 files changed, 412 insertions(+), 3406 deletions(-) delete mode 100644 tests/data/house_yaml.mo diff --git a/tests/data/house.mo b/tests/data/house.mo index 254f2cf..a7a5d96 100644 --- a/tests/data/house.mo +++ b/tests/data/house.mo @@ -716,28 +716,28 @@ iconTransformation(origin = {-2, -42}, extent = {{-110, -9}, {-90, 9}}))); Cont annotation (Placement(transformation( extent={{-120,-18},{-80,22}}), iconTransformation(extent={{-120,62},{-78,98}}))); Modelica.Blocks.Sources.RealExpression - TCooSetControl_007 - (y=298.15); -Modelica.Blocks.Sources.RealExpression - TCooSetControl_005 - (y=298.15); + TColSetControl_003 + (y=363.15); Modelica.Blocks.Sources.RealExpression TColSetControl_004 (y=363.15); +Modelica.Blocks.Sources.RealExpression + TCooSetControl_006 + (y=298.15); +Modelica.Blocks.Sources.RealExpression + TCooSetControl_007 + (y=298.15); Modelica.Blocks.Sources.RealExpression TAirOutControl_001 (y=0.0); Modelica.Blocks.Sources.RealExpression - TCooSetControl_006 + TCooSetControl_005 (y=298.15); -Modelica.Blocks.Sources.RealExpression - TColSetControl_003 - (y=363.15); Modelica.Blocks.Sources.BooleanExpression - triggerControl_003 + triggerControl_004 (y=true); Modelica.Blocks.Sources.BooleanExpression - triggerControl_004 + triggerControl_003 (y=true); equation connect(port[1],TRoo[1]. port); @@ -752,22 +752,22 @@ connect(dataBus.TZonSchema_space_003, TRoo[3].T); connect(dataBus.ppmCO2Schema_space_001, TRoo1[1].ppm); connect(dataBus.ppmCO2Schema_space_002, TRoo1[2].ppm); connect(dataBus.ppmCO2Schema_space_003, TRoo1[3].ppm); -connect(dataBus.TCooSetSchema_space_001, -TCooSetControl_007.y); -connect(dataBus.TCooSetSchema_space_003, -TCooSetControl_005.y); +connect(dataBus.TColSetControl_003, +TColSetControl_003.y); connect(dataBus.TColSetControl_004, TColSetControl_004.y); -connect(dataBus.TAirOutSystem_001, -TAirOutControl_001.y); connect(dataBus.TCooSetSchema_space_002, TCooSetControl_006.y); -connect(dataBus.TColSetControl_003, -TColSetControl_003.y); -connect(dataBus.triggerControl_003, -triggerControl_003.y); +connect(dataBus.TCooSetSchema_space_001, +TCooSetControl_007.y); +connect(dataBus.TAirOutSystem_001, +TAirOutControl_001.y); +connect(dataBus.TCooSetSchema_space_003, +TCooSetControl_005.y); connect(dataBus.triggerControl_004, triggerControl_004.y); +connect(dataBus.triggerControl_003, +triggerControl_003.y); end DataServer; @@ -2488,6 +2488,37 @@ connect(dataBus.TControl_002, temSup.T); end Common; model building + parameter Buildings.HeatTransfer.Data.GlazingSystems.Generic construction_011( + final glass={ + Buildings.HeatTransfer.Data.Glasses.Generic( + x=0.003, + k=1.0, + tauSol={ 0.486 }, + rhoSol_a={ 0.053 }, + rhoSol_b={ 0.053 }, + tauIR=0.0, + absIR_a=0.84, + absIR_b=0.84) + , + Buildings.HeatTransfer.Data.Glasses.Generic( + x=0.003, + k=1.0, + tauSol={ 0.486 }, + rhoSol_a={ 0.053 }, + rhoSol_b={ 0.053 }, + tauIR=0.0, + absIR_a=0.84, + absIR_b=0.84) + + }, + final gas={ + Buildings.HeatTransfer.Data.Gases.Air(x=0.0127) + + }, + UFra=1.4) + annotation ( + defaultComponentPrefixes="parameter", + defaultComponentName="datGlaSys"); parameter Buildings.HeatTransfer.Data.OpaqueConstructions.Generic construction_001( final nLay=3, @@ -2570,17 +2601,32 @@ parameter Integer nRoo = 2 "Number of rooms"; linearizeRadiation=true, m_flow_nominal=0.01, T_start=294.15 -,nPorts = 3, nConExt=3, +,nPorts = 3, nConExt=2, datConExt( - layers={ construction_001, construction_001, construction_001 }, - A={ 100.0, 100.0, 200.0 }, - til={Buildings.Types.Tilt.Wall,Buildings.Types.Tilt.Wall,Buildings.Types.Tilt.Wall}, - azi={ 180.0, 180.0, 180.0 }), + layers={ construction_001, construction_001 }, + A={ 10.0, 20.0 }, + til={Buildings.Types.Tilt.Wall,Buildings.Types.Tilt.Wall}, + azi={ 90.0, 0.0 }), nSurBou=2, surBou( A={ 10.0, 10.0 }, til={Buildings.Types.Tilt.Wall,Buildings.Types.Tilt.Wall}), - nConBou=0, nConExtWin=0, nConPar=0, + nConBou=1, + datConBou( + layers={ construction_001 }, + A={ 1.0 }, + til={Buildings.Types.Tilt.Floor}, + azi={ 90.0 }), + nConExtWin=1, + datConExtWin( + layers={ construction_001 }, + A={ 10.0 }, + til={Buildings.Types.Tilt.Wall}, + glaSys={ construction_011 }, + wWin={ 1.0 }, + hWin={ 1.0 }, + azi={ 180.0 }), + nConPar=0, energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial) annotation ( Placement(transformation(origin = { 0, 0 }, extent = {{-20, -20}, {20, 20}} @@ -2627,7 +2673,7 @@ parameter Integer nRoo = 2 "Number of rooms"; ))); house.Common.Controls.ventilation.EmissionControlControl_007 control_007 annotation ( - Placement(transformation(origin = { -130.08494456909304, 150.83031054600136 }, + Placement(transformation(origin = { -142.94901771634298, -150.84023939536812 }, extent = {{-10, -10}, {10, 10}} ))); house.Common.Controls.ventilation.OccupancyOccupancy_1 @@ -2703,7 +2749,7 @@ parameter Integer nRoo = 2 "Number of rooms"; ))); house.Common.Controls.ventilation.EmissionControlControl_006 control_006 annotation ( - Placement(transformation(origin = { -134.63999810877056, -164.33829653907998 }, + Placement(transformation(origin = { 67.85131932572982, -153.71309528357213 }, extent = {{-10, -10}, {10, 10}} ))); house.Common.Controls.ventilation.OccupancyOccupancy_2 @@ -2779,7 +2825,7 @@ parameter Integer nRoo = 2 "Number of rooms"; ))); house.Common.Controls.ventilation.EmissionControlControl_005 control_005 annotation ( - Placement(transformation(origin = { -42.750026404921165, 194.84621898353717 }, + Placement(transformation(origin = { -180.67796550904532, -17.42348154549456 }, extent = {{-10, -10}, {10, 10}} ))); house.Common.Controls.ventilation.OccupancyOccupancy_3 @@ -2833,12 +2879,12 @@ parameter Integer nRoo = 2 "Number of rooms"; redeclare package Medium = MediumW ) annotation ( - Placement(transformation(origin = { 167.1383707962454, 91.02861458634007 }, + Placement(transformation(origin = { -126.17443206341127, 164.32414266471022 }, extent = {{-10, -10}, {10, 10}} ))); house.Common.Controls.ventilation.CollectorControlControl_002 control_002 annotation ( - Placement(transformation(origin = { -15.812183618647536, 185.91320571738788 }, + Placement(transformation(origin = { 37.36489776834, 173.37931354048843 }, extent = {{-10, -10}, {10, 10}} ))); Buildings.Fluid.Actuators.Valves.ThreeWayEqualPercentageLinear @@ -2910,7 +2956,7 @@ BoilerWithStorageSystem_001 system_001( V_flow=0.03571428571428571/1000*{0.5,1} , redeclare package MediumW = MediumW) "Boiler" annotation ( - Placement(transformation(origin = { 92.94640039258113, -173.30602085609948 }, + Placement(transformation(origin = { 147.78910826606574, 149.04793481288547 }, extent = {{-10, -10}, {10, 10}} ))); house.Common.Controls.ventilation.BoilerControlControl_001 @@ -2918,7 +2964,7 @@ redeclare package MediumW = MediumW) "Boiler" annotation ( threshold_outdoor_air_cutoff=288.15, threshold_to_switch_off_boiler=288.15 ) annotation ( - Placement(transformation(origin = { -166.96898396404484, 100.73141965467681 }, + Placement(transformation(origin = { -107.45987466832894, -164.00426703550968 }, extent = {{-10, -10}, {10, 10}} ))); Buildings.Fluid.FixedResistances.Junction system_003 ( @@ -2960,7 +3006,7 @@ redeclare package MediumW = MediumW) "Boiler" annotation ( house.Common.Controls.ventilation.DataServer data_bus (redeclare package Medium = Medium) annotation ( - Placement(transformation(origin = { -185.5401120886591, -43.80755598134578 }, + Placement(transformation(origin = { 106.43749066583423, 171.46142182673717 }, extent = {{-10, -10}, {10, 10}} ))); @@ -3001,7 +3047,7 @@ color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_008.y,control_007.y) annotation (Line( -points={{ 30.0, -75.0 } ,{ -50.04247228454652, -75.0 } ,{ -50.04247228454652, 150.83031054600136 } ,{ -130.08494456909304, 150.83031054600136 } }, +points={{ 30.0, -75.0 } ,{ -56.47450885817149, -75.0 } ,{ -56.47450885817149, -150.84023939536812 } ,{ -142.94901771634298, -150.84023939536812 } }, color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_008.port_b,system_003.port_1) @@ -3045,7 +3091,7 @@ color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_010.y,control_006.y) annotation (Line( -points={{ 280.0, 75.0 } ,{ 72.68000094561472, 75.0 } ,{ 72.68000094561472, -164.33829653907998 } ,{ -134.63999810877056, -164.33829653907998 } }, +points={{ 280.0, 75.0 } ,{ 173.92565966286492, 75.0 } ,{ 173.92565966286492, -153.71309528357213 } ,{ 67.85131932572982, -153.71309528357213 } }, color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_010.port_b,system_003.port_1) @@ -3089,7 +3135,7 @@ color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_012.y,control_005.y) annotation (Line( -points={{ 530.0, 75.0 } ,{ 243.6249867975394, 75.0 } ,{ 243.62498679753944, 194.84621898353717 } ,{ -42.750026404921165, 194.84621898353717 } }, +points={{ 530.0, 75.0 } ,{ 174.66101724547735, 75.0 } ,{ 174.66101724547732, -17.42348154549456 } ,{ -180.67796550904532, -17.42348154549456 } }, color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_012.port_b,system_005.port_1) @@ -3099,17 +3145,17 @@ color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_002.dataBus,control_002.dataBus) annotation (Line( -points={{ 167.1383707962454, 91.02861458634007 } ,{ 75.66309358879893, 91.02861458634007 } ,{ 75.66309358879893, 185.91320571738788 } ,{ -15.812183618647536, 185.91320571738788 } }, +points={{ -126.17443206341127, 164.32414266471022 } ,{ -44.40476714753564, 164.32414266471022 } ,{ -44.40476714753564, 173.37931354048843 } ,{ 37.36489776834, 173.37931354048843 } }, color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_002.port_b,system_004.port_1) annotation (Line( -points={{ 167.1383707962454, 91.02861458634007 } ,{ 98.5691853981227, 91.02861458634007 } ,{ 98.5691853981227, -275.0 } ,{ 30.0, -275.0 } }, +points={{ -126.17443206341127, 164.32414266471022 } ,{ -48.08721603170564, 164.32414266471022 } ,{ -48.08721603170564, -275.0 } ,{ 30.0, -275.0 } }, color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_002.port_b,system_006.port_1) annotation (Line( -points={{ 167.1383707962454, 91.02861458634007 } ,{ 348.5691853981227, 91.02861458634007 } ,{ 348.5691853981227, -125.0 } ,{ 530.0, -125.0 } }, +points={{ -126.17443206341127, 164.32414266471022 } ,{ 201.91278396829435, 164.32414266471022 } ,{ 201.91278396829438, -125.0 } ,{ 530.0, -125.0 } }, color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_004.y,control_003.y) @@ -3154,17 +3200,17 @@ color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_001.dataBus,control_001.dataBus) annotation (Line( -points={{ 92.94640039258113, -173.30602085609948 } ,{ -37.011291785731856, -173.30602085609948 } ,{ -37.011291785731856, 100.73141965467681 } ,{ -166.96898396404484, 100.73141965467681 } }, +points={{ 147.78910826606574, 149.04793481288547 } ,{ 20.164616798868394, 149.04793481288547 } ,{ 20.16461679886841, -164.00426703550968 } ,{ -107.45987466832894, -164.00426703550968 } }, color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_001.port_b,system_002.port_a) annotation (Line( -points={{ 92.94640039258113, -173.30602085609948 } ,{ 130.04238559441325, -173.30602085609948 } ,{ 130.04238559441325, 91.02861458634007 } ,{ 167.1383707962454, 91.02861458634007 } }, +points={{ 147.78910826606574, 149.04793481288547 } ,{ 10.807338101327218, 149.04793481288547 } ,{ 10.807338101327247, 164.32414266471022 } ,{ -126.17443206341127, 164.32414266471022 } }, color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_003.port_2,system_001.port_a) annotation (Line( -points={{ 130.0, -175.0 } ,{ 111.47320019629056, -175.0 } ,{ 111.47320019629056, -173.30602085609948 } ,{ 92.94640039258113, -173.30602085609948 } }, +points={{ 130.0, -175.0 } ,{ 138.89455413303287, -175.0 } ,{ 138.89455413303287, 149.04793481288547 } ,{ 147.78910826606574, 149.04793481288547 } }, color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_013.port_b,system_009.port_a) @@ -3179,7 +3225,7 @@ color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_005.port_2,system_001.port_a) annotation (Line( -points={{ 630.0, -25.0 } ,{ 361.4732001962906, -25.0 } ,{ 361.4732001962906, -173.30602085609948 } ,{ 92.94640039258113, -173.30602085609948 } }, +points={{ 630.0, -25.0 } ,{ 388.8945541330329, -25.0 } ,{ 388.8945541330329, 149.04793481288547 } ,{ 147.78910826606574, 149.04793481288547 } }, color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(system_014.port_b,system_011.port_a) @@ -3189,72 +3235,72 @@ color={255,204,51}, thickness=0.5, smooth=Smooth.None)); connect(control_007.dataBus,data_bus.dataBus) annotation (Line( -points={{ -130.08494456909304, 150.83031054600136 } ,{ -157.81252832887606, 150.83031054600136 } ,{ -157.81252832887606, -43.80755598134578 } ,{ -185.5401120886591, -43.80755598134578 } }, +points={{ -142.94901771634298, -150.84023939536812 } ,{ -18.255763525254366, -150.84023939536812 } ,{ -18.25576352525438, 171.46142182673717 } ,{ 106.43749066583423, 171.46142182673717 } }, thickness=0.05, smooth=Smooth.None)); connect(occupancy_1.dataBus,data_bus.dataBus) annotation (Line( -points={{ -50.0, 0.0 } ,{ -117.77005604432955, 0.0 } ,{ -117.77005604432955, -43.80755598134578 } ,{ -185.5401120886591, -43.80755598134578 } }, +points={{ -50.0, 0.0 } ,{ 28.21874533291711, 0.0 } ,{ 28.218745332917123, 171.46142182673717 } ,{ 106.43749066583423, 171.46142182673717 } }, thickness=0.05, smooth=Smooth.None)); connect(control_006.dataBus,data_bus.dataBus) annotation (Line( -points={{ -134.63999810877056, -164.33829653907998 } ,{ -160.09005509871483, -164.33829653907998 } ,{ -160.09005509871483, -43.80755598134578 } ,{ -185.5401120886591, -43.80755598134578 } }, +points={{ 67.85131932572982, -153.71309528357213 } ,{ 87.14440499578203, -153.71309528357213 } ,{ 87.14440499578203, 171.46142182673717 } ,{ 106.43749066583423, 171.46142182673717 } }, thickness=0.05, smooth=Smooth.None)); connect(occupancy_2.dataBus,data_bus.dataBus) annotation (Line( -points={{ 200.0, 150.0 } ,{ 7.22994395567045, 150.0 } ,{ 7.22994395567045, -43.80755598134578 } ,{ -185.5401120886591, -43.80755598134578 } }, +points={{ 200.0, 150.0 } ,{ 153.2187453329171, 150.0 } ,{ 153.2187453329171, 171.46142182673717 } ,{ 106.43749066583423, 171.46142182673717 } }, thickness=0.05, smooth=Smooth.None)); connect(control_005.dataBus,data_bus.dataBus) annotation (Line( -points={{ -42.750026404921165, 194.84621898353717 } ,{ -114.14506924679014, 194.84621898353717 } ,{ -114.14506924679013, -43.80755598134578 } ,{ -185.5401120886591, -43.80755598134578 } }, +points={{ -180.67796550904532, -17.42348154549456 } ,{ -37.12023742160554, -17.42348154549456 } ,{ -37.12023742160555, 171.46142182673717 } ,{ 106.43749066583423, 171.46142182673717 } }, thickness=0.05, smooth=Smooth.None)); connect(occupancy_3.dataBus,data_bus.dataBus) annotation (Line( -points={{ 450.0, 150.0 } ,{ 132.22994395567048, 150.0 } ,{ 132.22994395567042, -43.80755598134578 } ,{ -185.5401120886591, -43.80755598134578 } }, +points={{ 450.0, 150.0 } ,{ 278.21874533291714, 150.0 } ,{ 278.21874533291714, 171.46142182673717 } ,{ 106.43749066583423, 171.46142182673717 } }, thickness=0.05, smooth=Smooth.None)); connect(control_002.dataBus,data_bus.dataBus) annotation (Line( -points={{ -15.812183618647536, 185.91320571738788 } ,{ -100.67614785365332, 185.91320571738788 } ,{ -100.67614785365332, -43.80755598134578 } ,{ -185.5401120886591, -43.80755598134578 } }, +points={{ 37.36489776834, 173.37931354048843 } ,{ 71.90119421708712, 173.37931354048843 } ,{ 71.90119421708712, 171.46142182673717 } ,{ 106.43749066583423, 171.46142182673717 } }, thickness=0.05, smooth=Smooth.None)); connect(control_003.dataBus,data_bus.dataBus) annotation (Line( -points={{ -20.0, -275.0 } ,{ -102.77005604432955, -275.0 } ,{ -102.77005604432955, -43.80755598134578 } ,{ -185.5401120886591, -43.80755598134578 } }, +points={{ -20.0, -275.0 } ,{ 43.218745332917116, -275.0 } ,{ 43.218745332917116, 171.46142182673717 } ,{ 106.43749066583423, 171.46142182673717 } }, thickness=0.05, smooth=Smooth.None)); connect(control_004.dataBus,data_bus.dataBus) annotation (Line( -points={{ 480.0, -125.0 } ,{ 147.22994395567048, -125.0 } ,{ 147.22994395567042, -43.80755598134578 } ,{ -185.5401120886591, -43.80755598134578 } }, +points={{ 480.0, -125.0 } ,{ 293.21874533291714, -125.0 } ,{ 293.21874533291714, 171.46142182673717 } ,{ 106.43749066583423, 171.46142182673717 } }, thickness=0.05, smooth=Smooth.None)); connect(control_001.dataBus,data_bus.dataBus) annotation (Line( -points={{ -166.96898396404484, 100.73141965467681 } ,{ -176.25454802635198, 100.73141965467681 } ,{ -176.25454802635198, -43.80755598134578 } ,{ -185.5401120886591, -43.80755598134578 } }, +points={{ -107.45987466832894, -164.00426703550968 } ,{ -0.5111920012473519, -164.00426703550968 } ,{ -0.5111920012473519, 171.46142182673717 } ,{ 106.43749066583423, 171.46142182673717 } }, thickness=0.05, smooth=Smooth.None)); connect(schema_space_001.heaPorAir,data_bus.port[1]) annotation (Line( -points={{ 0.0, 0.0 } ,{ -92.77005604432955, 0.0 } ,{ -92.77005604432955, -43.80755598134578 } ,{ -185.5401120886591, -43.80755598134578 } }, +points={{ 0.0, 0.0 } ,{ 53.218745332917116, 0.0 } ,{ 53.218745332917116, 171.46142182673717 } ,{ 106.43749066583423, 171.46142182673717 } }, thickness=0.05, smooth=Smooth.None)); connect(schema_space_001.ports[1],data_bus.port_a[1]) annotation (Line( -points={{ 0.0, 0.0 } ,{ -92.77005604432955, 0.0 } ,{ -92.77005604432955, -43.80755598134578 } ,{ -185.5401120886591, -43.80755598134578 } }, +points={{ 0.0, 0.0 } ,{ 53.218745332917116, 0.0 } ,{ 53.218745332917116, 171.46142182673717 } ,{ 106.43749066583423, 171.46142182673717 } }, thickness=0.05, smooth=Smooth.None)); connect(schema_space_002.heaPorAir,data_bus.port[2]) annotation (Line( -points={{ 250.0, 150.0 } ,{ 32.22994395567045, 150.0 } ,{ 32.22994395567045, -43.80755598134578 } ,{ -185.5401120886591, -43.80755598134578 } }, +points={{ 250.0, 150.0 } ,{ 178.2187453329171, 150.0 } ,{ 178.21874533291714, 171.46142182673717 } ,{ 106.43749066583423, 171.46142182673717 } }, thickness=0.05, smooth=Smooth.None)); connect(schema_space_002.ports[1],data_bus.port_a[2]) annotation (Line( -points={{ 250.0, 150.0 } ,{ 32.22994395567045, 150.0 } ,{ 32.22994395567045, -43.80755598134578 } ,{ -185.5401120886591, -43.80755598134578 } }, +points={{ 250.0, 150.0 } ,{ 178.2187453329171, 150.0 } ,{ 178.21874533291714, 171.46142182673717 } ,{ 106.43749066583423, 171.46142182673717 } }, thickness=0.05, smooth=Smooth.None)); connect(schema_space_003.heaPorAir,data_bus.port[3]) annotation (Line( -points={{ 500.0, 150.0 } ,{ 157.22994395567048, 150.0 } ,{ 157.22994395567042, -43.80755598134578 } ,{ -185.5401120886591, -43.80755598134578 } }, +points={{ 500.0, 150.0 } ,{ 303.21874533291714, 150.0 } ,{ 303.21874533291714, 171.46142182673717 } ,{ 106.43749066583423, 171.46142182673717 } }, thickness=0.05, smooth=Smooth.None)); connect(schema_space_003.ports[1],data_bus.port_a[3]) annotation (Line( -points={{ 500.0, 150.0 } ,{ 157.22994395567048, 150.0 } ,{ 157.22994395567042, -43.80755598134578 } ,{ -185.5401120886591, -43.80755598134578 } }, +points={{ 500.0, 150.0 } ,{ 303.21874533291714, 150.0 } ,{ 303.21874533291714, 171.46142182673717 } ,{ 106.43749066583423, 171.46142182673717 } }, thickness=0.05, -smooth=Smooth.None));annotation (Diagram(coordinateSystem(extent={{-244.97822422381938,-325.0},{680.0,250.0}})), Icon( - coordinateSystem(extent={{-244.97822422381938,-325.0},{680.0,250.0}}))); +smooth=Smooth.None));annotation (Diagram(coordinateSystem(extent={{-238.1184310752261,-325.0},{680.0,250.0}})), Icon( + coordinateSystem(extent={{-238.1184310752261,-325.0},{680.0,250.0}}))); annotation ( - Documentation(info="Spaces

Spaces

Introduction

Introduction

nameschema_space_001
parameters
mSenFac1.0
AFlo100.0
hRoo2.5
linearizeRadiationtrue
m_flow_nominal0.01
T_start294.15
volume250.0
occupancy
nameoccupancy_1
parameters
emissions
nameparameters
system_007
nEle1
fraRad0.3
Q_flow_nominal2000.0
T_a_nominal363.15
T_b_nominal353.15
TAir_nominal293.15
TRad_nominal293.15
n1.9
deltaM0.01
from_dpfalse
dp_nominal1000.0
linearizedfalse
VWat0.116
mDry52.6
system_008
R7.0
delta00.01
dpFixed_nominal6000.0
l0.0001
from_dptrue
linearizedfalse
deltaM0.02
m_flow_nominal0.01
dpValve_nominal6000.0
external_boundaries
namesurfaceazimuthtiltconstruction
externalwall_17100.0180.0wall
nameconstruction_001
externalwall_18100.0180.0wall
nameconstruction_001
externalwall_19200.0180.0wall
nameconstruction_001
internal_elements
namesurfaceazimuthtiltconstruction
internal_schema_space_001_schema_space_00210.010.0wall
nameinternal_wall
internal_schema_space_001_schema_space_00310.010.0wall
nameinternal_wall
nameschema_space_002
parameters
mSenFac1.0
AFlo100.0
hRoo2.5
linearizeRadiationtrue
m_flow_nominal0.01
T_start294.15
volume250.0
occupancy
nameoccupancy_2
parameters
emissions
nameparameters
system_009
nEle1
fraRad0.3
Q_flow_nominal2000.0
T_a_nominal363.15
T_b_nominal353.15
TAir_nominal293.15
TRad_nominal293.15
n1.9
deltaM0.01
from_dpfalse
dp_nominal1000.0
linearizedfalse
VWat0.116
mDry52.6
system_010
R7.0
delta00.01
dpFixed_nominal6000.0
l0.0001
from_dptrue
linearizedfalse
deltaM0.02
m_flow_nominal0.01
dpValve_nominal6000.0
external_boundaries
namesurfaceazimuthtiltconstruction
externalwall_20100.0180.0wall
nameconstruction_001
externalwall_21100.0180.0wall
nameconstruction_001
externalwall_22200.0180.0wall
nameconstruction_001
internal_elements
namesurfaceazimuthtiltconstruction
internal_schema_space_001_schema_space_00210.010.0wall
nameinternal_wall
internal_schema_space_002_schema_space_00310.010.0wall
nameinternal_wall
nameschema_space_003
parameters
mSenFac1.0
AFlo100.0
hRoo2.5
linearizeRadiationtrue
m_flow_nominal0.01
T_start294.15
volume250.0
occupancy
nameoccupancy_3
parameters
emissions
nameparameters
system_011
nEle1
fraRad0.3
Q_flow_nominal2000.0
T_a_nominal363.15
T_b_nominal353.15
TAir_nominal293.15
TRad_nominal293.15
n1.9
deltaM0.01
from_dpfalse
dp_nominal1000.0
linearizedfalse
VWat0.116
mDry52.6
system_012
R7.0
delta00.01
dpFixed_nominal6000.0
l0.0001
from_dptrue
linearizedfalse
deltaM0.02
m_flow_nominal0.01
dpValve_nominal6000.0
external_boundaries
namesurfaceazimuthtiltconstruction
externalwall_23100.0180.0wall
nameconstruction_001
externalwall_24100.0180.0wall
nameconstruction_001
externalwall_25200.0180.0wall
nameconstruction_001
internal_elements
namesurfaceazimuthtiltconstruction
internal_schema_space_001_schema_space_00310.010.0wall
nameinternal_wall
internal_schema_space_002_schema_space_00310.010.0wall
nameinternal_wall

Conclusions

Conclusions

Spaces

Introduction

Introduction

nameinternal_wall
layers
materialthickness
namebrick
k0.89
c790.0
rho1920.0
epsLw0.85
epsSw0.65
0.2
nameconstruction_001
layers
materialthickness
namematerial_001
k0.035
c1000.0
rho2000.0
epsLw0.85
epsSw0.85
0.1
namematerial_002
k0.035
c1000.0
rho2000.0
epsLw0.85
epsSw0.85
0.1
namematerial_003
k0.035
c1000.0
rho2000.0
epsLw0.85
epsSw0.85
0.1

Conclusions

Conclusions

Spaces

Introduction

Introduction

namesystem_001
parameters
scaFacRad1.5
dTBoi_nominal20
dTRad_nominal10
a{0.9}
effCurBuildings.Fluid.Types.EfficiencyCurves.Constant
T_nominal353.15
fueBuildings.Fluid.Data.Fuels.HeatingOilLowerHeatingValue()
Q_flow_nominal2000
dp_nominal5000
linearizeFlowResistancefalse
deltaM0.1
show_Tfalse
VTan0.2
hTan2
nSeg4
dIns0.002
dp(3000 + 2000)*{2,1}
nominal_mass_flow_rate_boiler0.03571428571428571
nominal_mass_flow_radiator_loop0.07142857142857142
V_flow0.03571428571428571/1000*{0.5,1}

Conclusions

Conclusions

")); + Documentation(info="Spaces

Spaces

Introduction

Introduction

nameschema_space_001
parameters
mSenFac1.0
AFlo100.0
hRoo2.5
linearizeRadiationtrue
m_flow_nominal0.01
T_start294.15
volume250.0
occupancy
nameoccupancy_1
parameters
emissions
nameparameters
system_007
nEle1
fraRad0.3
Q_flow_nominal2000.0
T_a_nominal363.15
T_b_nominal353.15
TAir_nominal293.15
TRad_nominal293.15
n1.9
deltaM0.01
from_dpfalse
dp_nominal1000.0
linearizedfalse
VWat0.116
mDry52.6
system_008
R7.0
delta00.01
dpFixed_nominal6000.0
l0.0001
from_dptrue
linearizedfalse
deltaM0.02
m_flow_nominal0.01
dpValve_nominal6000.0
external_boundaries
namesurfaceazimuthtiltconstruction
externalwall_1710.0180.0wall
nameconstruction_001
externalwall_1810.090.0wall
nameconstruction_001
externalwall_1920.00.0wall
nameconstruction_001
window_71.0180.0wall
nameconstruction_011
flooronground_81.090.0floor
nameconstruction_001
internal_elements
namesurfaceazimuthtiltconstruction
internal_schema_space_001_schema_space_00210.010.0wall
nameinternal_wall
internal_schema_space_001_schema_space_00310.010.0wall
nameinternal_wall
nameschema_space_002
parameters
mSenFac1.0
AFlo100.0
hRoo2.5
linearizeRadiationtrue
m_flow_nominal0.01
T_start294.15
volume250.0
occupancy
nameoccupancy_2
parameters
emissions
nameparameters
system_009
nEle1
fraRad0.3
Q_flow_nominal2000.0
T_a_nominal363.15
T_b_nominal353.15
TAir_nominal293.15
TRad_nominal293.15
n1.9
deltaM0.01
from_dpfalse
dp_nominal1000.0
linearizedfalse
VWat0.116
mDry52.6
system_010
R7.0
delta00.01
dpFixed_nominal6000.0
l0.0001
from_dptrue
linearizedfalse
deltaM0.02
m_flow_nominal0.01
dpValve_nominal6000.0
external_boundaries
namesurfaceazimuthtiltconstruction
externalwall_20100.0180.0wall
nameconstruction_001
externalwall_21100.0180.0wall
nameconstruction_001
externalwall_22200.0180.0wall
nameconstruction_001
internal_elements
namesurfaceazimuthtiltconstruction
internal_schema_space_001_schema_space_00210.010.0wall
nameinternal_wall
internal_schema_space_002_schema_space_00310.010.0wall
nameinternal_wall
nameschema_space_003
parameters
mSenFac1.0
AFlo100.0
hRoo2.5
linearizeRadiationtrue
m_flow_nominal0.01
T_start294.15
volume250.0
occupancy
nameoccupancy_3
parameters
emissions
nameparameters
system_011
nEle1
fraRad0.3
Q_flow_nominal2000.0
T_a_nominal363.15
T_b_nominal353.15
TAir_nominal293.15
TRad_nominal293.15
n1.9
deltaM0.01
from_dpfalse
dp_nominal1000.0
linearizedfalse
VWat0.116
mDry52.6
system_012
R7.0
delta00.01
dpFixed_nominal6000.0
l0.0001
from_dptrue
linearizedfalse
deltaM0.02
m_flow_nominal0.01
dpValve_nominal6000.0
external_boundaries
namesurfaceazimuthtiltconstruction
externalwall_23100.0180.0wall
nameconstruction_001
externalwall_24100.0180.0wall
nameconstruction_001
externalwall_25200.0180.0wall
nameconstruction_001
internal_elements
namesurfaceazimuthtiltconstruction
internal_schema_space_001_schema_space_00310.010.0wall
nameinternal_wall
internal_schema_space_002_schema_space_00310.010.0wall
nameinternal_wall

Conclusions

Conclusions

Spaces

Introduction

Introduction

nameconstruction_001
layers
materialthickness
namematerial_001
k0.035
c1000.0
rho2000.0
epsLw0.85
epsSw0.85
0.1
namematerial_002
k0.035
c1000.0
rho2000.0
epsLw0.85
epsSw0.85
0.1
namematerial_003
k0.035
c1000.0
rho2000.0
epsLw0.85
epsSw0.85
0.1
nameconstruction_011
layers
thicknessmateriallayer_type
0.003
namematerial_005
k1.0
c840.0
rho2500.0
epsLw0.85
epsSw0.85
solar_transmittance
  • 0.486
solar_reflectance_outside_facing
  • 0.053
solar_reflectance_room_facing
  • 0.053
infrared_transmissivity0.0
infrared_absorptivity_outside_facing0.84
infrared_absorptivity_room_facing0.84
glass
0.0127
namematerial_004
k0.025
c1000.0
rho1.2
epsLw0.85
epsSw0.85
gas
0.003
namematerial_005
k1.0
c840.0
rho2500.0
epsLw0.85
epsSw0.85
solar_transmittance
  • 0.486
solar_reflectance_outside_facing
  • 0.053
solar_reflectance_room_facing
  • 0.053
infrared_transmissivity0.0
infrared_absorptivity_outside_facing0.84
infrared_absorptivity_room_facing0.84
glass
u_value_frame1.4
nameinternal_wall
layers
materialthickness
namebrick
k0.89
c790.0
rho1920.0
epsLw0.85
epsSw0.65
0.2

Conclusions

Conclusions

Spaces

Introduction

Introduction

namesystem_001
parameters
scaFacRad1.5
dTBoi_nominal20
dTRad_nominal10
a{0.9}
effCurBuildings.Fluid.Types.EfficiencyCurves.Constant
T_nominal353.15
fueBuildings.Fluid.Data.Fuels.HeatingOilLowerHeatingValue()
Q_flow_nominal2000
dp_nominal5000
linearizeFlowResistancefalse
deltaM0.1
show_Tfalse
VTan0.2
hTan2
nSeg4
dIns0.002
dp(3000 + 2000)*{2,1}
nominal_mass_flow_rate_boiler0.03571428571428571
nominal_mass_flow_radiator_loop0.07142857142857142
V_flow0.03571428571428571/1000*{0.5,1}

Conclusions

Conclusions

")); end building; diff --git a/tests/data/house_yaml.mo b/tests/data/house_yaml.mo deleted file mode 100644 index 2e16eea..0000000 --- a/tests/data/house_yaml.mo +++ /dev/null @@ -1,3261 +0,0 @@ -package house_yaml - -package Common - package Occupancy - - model SimpleOccupancy - - parameter Real occupancy[:]=3600*{7, 19} - "Occupancy table, each entry switching occupancy on or off"; - - parameter Real gain[:, :]=[35; 70; 30] - "Gain to convert from occupancy (per person) to radiant, convective and latent heat in [W/m2] "; - - parameter Real k=1/6/4 - "Heat gain if occupied"; - - Buildings.Controls.SetPoints.OccupancySchedule - occSch2(firstEntryOccupied=true, - occupancy=occupancy) - "Occupancy schedule" - annotation (Placement(transformation(extent={{-66,-22},{-46,-2}}))); - Buildings.Controls.OBC.CDL.Reals.Switch switch2 - annotation (Placement(transformation(extent={{-20,-12},{0,8}}))); - Modelica.Blocks.Math.MatrixGain gai2(K=gain) - "Gain to convert from occupancy (per person) to radiant, convective and latent heat in [W/m2] " - annotation (Placement(transformation(extent={{18,-12},{38,8}}))); - extends Modelica.Blocks.Interfaces.MO(final nout=3); - Buildings.Controls.OBC.CDL.Reals.Sources.Constant occ2(k=k) - "Heat gain if occupied in room 2" - annotation (Placement(transformation(extent={{-66,28},{-46,48}}))); - Buildings.Controls.OBC.CDL.Reals.Sources.Constant zero(k=0) - "Heat gain if occupied in room 2" - annotation (Placement(transformation(extent={{-62,-68},{-42,-48}}))); -equation - connect(occSch2.occupied,switch2. u2) annotation (Line( - points={{-45,-18},{-28,-18},{-28,-2},{-22,-2}}, - color={255,0,255}, - smooth=Smooth.None)); - connect(switch2.y,gai2. u[1]) annotation (Line( - points={{2,-2},{16,-2}}, - color={0,0,127}, - smooth=Smooth.None)); - connect(occ2.y,switch2. u1) annotation (Line(points={{-44,38},{-40,38},{-40,6}, - {-22,6}}, color={0,0,127})); - connect(zero.y, switch2.u3) - annotation (Line(points={{-40,-58},{-22,-58},{-22,-10}}, color={0,0,127})); - connect(gai2.y, y) annotation (Line(points={{39,-2},{96,-2},{96,0},{110,0}}, - color={0,0,127})); - annotation (Icon(coordinateSystem(preserveAspectRatio=false), graphics={ - Ellipse(extent={{10,70},{-26,34}}, lineColor={28,108,200}), - Line(points={{-8,34},{-8,-26}}, color={28,108,200}), - Line(points={{-8,-26},{-48,-68}}, color={28,108,200}), - Line(points={{-8,-26},{34,-70},{32,-70}}, color={28,108,200}), - Line(points={{-8,20},{-48,-8}}, color={28,108,200}), - Line(points={{-8,20},{44,-8}}, color={28,108,200})}), Diagram( - coordinateSystem(preserveAspectRatio=false))); -end SimpleOccupancy; - - end Occupancy; - - package Controls - package BaseClasses - expandable connector DataBus - extends Modelica.Icons.SignalBus; - annotation ( - Icon(coordinateSystem(preserveAspectRatio=true, extent={{-100,-100},{100, - 100}}), graphics={Rectangle( - extent={{-20,2},{22,-2}}, - lineColor={255,204,51}, - lineThickness=0.5)}), - Documentation(info=" -

-This connector defines the expandable connector ControlBus that -is used to connect control signals. -Note, this connector is empty. When using it, the actual content is -constructed by the signals connected to this bus. -

-")); - end DataBus; - annotation ( - Icon(graphics={ Rectangle(lineColor = {200, 200, 200}, fillColor = {248, 248, 248}, - fillPattern = FillPattern.HorizontalCylinder, extent = {{-100, -100}, {100, 100}}, radius = 25), Rectangle(lineColor = {128, 128, 128}, extent = {{-100, -100}, {100, 100}}, radius = 25), Ellipse(lineColor = {128, 128, 128}, fillColor = {255, 255, 255}, - fillPattern = FillPattern.Solid, extent = {{-30, -30}, {30, 30}})})); - end BaseClasses; - - package Interfaces - partial model BaseSpaceControl - Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a port annotation ( - Placement(transformation(extent = {{-110, -10}, {-90, 10}}), iconTransformation(extent = {{-110, -10}, {-90, 10}}))); - Modelica.Blocks.Interfaces.RealOutput y annotation ( - Placement(transformation(origin = {106, 0}, extent = {{-10, -10}, {10, 10}}), iconTransformation(origin = {106, 0}, extent = {{-10, -10}, {10, 10}}))); - equation - - annotation ( - Icon, - Diagram); - end BaseSpaceControl; - - partial model BaseSubstanceSpaceControl - replaceable package Medium = Modelica.Media.Interfaces.PartialMedium - "Medium model" annotation (choicesAllMatching=true); - Modelica.Fluid.Interfaces.FluidPort_a port_a( - redeclare final package Medium = Medium) - "Fluid connector a (positive design flow direction is from port_a to port_b)" - annotation (Placement(transformation(extent={{-116,-16},{-82,16}}), - iconTransformation(extent={{-110,-9},{-90,9}}))); - Modelica.Blocks.Interfaces.RealOutput y annotation ( - Placement(transformation(origin = {106, 0}, extent = {{-10, -10}, {10, 10}}), iconTransformation(origin = {106, 0}, extent = {{-10, -10}, {10, 10}}))); - equation - - annotation ( - Icon, - Diagram); - end BaseSubstanceSpaceControl; - annotation ( - Icon(graphics={ Rectangle(lineColor = {200, 200, 200}, fillColor = {248, 248, 248}, - fillPattern = FillPattern.HorizontalCylinder, extent = {{-100, -100}, {100, 100}}, radius = 25), Rectangle(lineColor = {128, 128, 128}, extent = {{-100, -100}, {100, 100}}, radius = 25), Polygon(origin = {20, 0}, lineColor = {64, 64, 64}, fillColor = {255, 255, 255}, - fillPattern = FillPattern.Solid, points = {{-10, 70}, {10, 70}, {40, 20}, {80, 20}, {80, -20}, {40, -20}, {10, -70}, {-10, -70}, {-10, 70}}), Polygon(fillColor = {102, 102, 102}, pattern = LinePattern.None, - fillPattern = FillPattern.Solid, points = {{-100, 20}, {-60, 20}, {-30, 70}, {-10, 70}, {-10, -70}, {-30, -70}, {-60, -20}, {-100, -20}, {-100, 20}})})); - end Interfaces; - - package SpaceControls - model PID - extends Common.Controls.Interfaces.BaseSpaceControl; - - parameter .Modelica.Blocks.Types.SimpleController controllerType= - .Modelica.Blocks.Types.SimpleController.PID "Type of controller"; - parameter Real k(min=0, unit="1") = 1 "Gain of controller"; - parameter Modelica.Units.SI.Time Ti(min=Modelica.Constants.small)=0.5 - "Time constant of Integrator block" annotation (Dialog(enable= - controllerType == .Modelica.Blocks.Types.SimpleController.PI or - controllerType == .Modelica.Blocks.Types.SimpleController.PID)); - parameter Modelica.Units.SI.Time Td(min=0)=0.1 - "Time constant of Derivative block" annotation (Dialog(enable= - controllerType == .Modelica.Blocks.Types.SimpleController.PD or - controllerType == .Modelica.Blocks.Types.SimpleController.PID)); - parameter Real yMax(start=1) "Upper limit of output"; - parameter Real yMin=-yMax "Lower limit of output"; - parameter Modelica.Units.SI.Temperature setPoint; - Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor TRoo annotation ( - Placement(transformation(origin = {-542, -226}, extent = {{480, 216}, {500, 236}}))); - Modelica.Blocks.Continuous.LimPID conRoo(yMax = yMax, yMin = yMin, controllerType = controllerType, k = k, Ti = Ti, Td = Td) annotation ( - Placement(transformation(origin = {50, 0}, extent = {{-10, -10}, {10, 10}}))); - Modelica.Blocks.Sources.RealExpression realExpression(y=setPoint) - annotation (Placement(transformation(extent={{-42,36},{-22,56}}))); - equation - connect(port, TRoo.port) annotation ( - Line(points = {{-100, 0}, {-62, 0}}, color = {191, 0, 0})); - connect(conRoo.y, y) annotation ( - Line(points={{61,0},{106,0}}, color = {0, 0, 127})); - connect(TRoo.T, conRoo.u_m) annotation ( - Line(points={{-41,0},{4,0},{4,-36},{50,-36},{50,-12}}, color = {0, 0, 127})); - connect(realExpression.y, conRoo.u_s) annotation (Line(points={{-21,46},{32,46}, - {32,0},{38,0}}, color={0,0,127})); - annotation ( - Icon(graphics={ Rectangle(lineColor = {0, 0, 127}, fillColor = {255, 255, 255}, - fillPattern = FillPattern.Solid, extent = {{-100, -100}, {100, 100}}), Line(points = {{-80, 78}, {-80, -90}}, color = {192, 192, 192}), Polygon(lineColor = {192, 192, 192}, fillColor = {192, 192, 192}, - fillPattern = FillPattern.Solid, points = {{-80, 90}, {-88, 68}, {-72, 68}, {-80, 90}}), Line(points = {{-90, -80}, {82, -80}}, color = {192, 192, 192}), Polygon(lineColor = {192, 192, 192}, fillColor = {192, 192, 192}, - fillPattern = FillPattern.Solid, points = {{90, -80}, {68, -72}, {68, -88}, {90, -80}}), Line(points = {{-80, -80}, {-80, -20}, {60, 80}}, color = {0, 0, 127}), Text(textColor = {192, 192, 192}, extent = {{-20, -60}, {80, -20}}, textString = "PID")})); - end PID; - - model PIDSubstance - - replaceable package Medium = Modelica.Media.Interfaces.PartialMedium - "Medium model" annotation (choicesAllMatching=true); - extends Common.Controls.Interfaces.BaseSubstanceSpaceControl; - - parameter .Modelica.Blocks.Types.SimpleController controllerType= - .Modelica.Blocks.Types.SimpleController.PID "Type of controller"; - parameter Real k(min=0, unit="1") = 1 "Gain of controller"; - parameter Modelica.Units.SI.Time Ti(min=Modelica.Constants.small)=0.5 - "Time constant of Integrator block" annotation (Dialog(enable= - controllerType == .Modelica.Blocks.Types.SimpleController.PI or - controllerType == .Modelica.Blocks.Types.SimpleController.PID)); - parameter Modelica.Units.SI.Time Td(min=0)=0.1 - "Time constant of Derivative block" annotation (Dialog(enable= - controllerType == .Modelica.Blocks.Types.SimpleController.PD or - controllerType == .Modelica.Blocks.Types.SimpleController.PID)); - parameter Real yMax(start=1) "Upper limit of output"; - parameter Real yMin=-yMax "Lower limit of output"; - parameter Modelica.Units.SI.Temperature setPoint; - Buildings.Fluid.Sensors.PPM TRoo( redeclare - package Medium = Medium) annotation ( - Placement(transformation(origin = {-542, -226}, extent = {{480, 216}, {500, 236}}))); - Modelica.Blocks.Continuous.LimPID conRoo(yMax = yMax, yMin = yMin, controllerType = controllerType, k = k, Ti = Ti, Td = Td) annotation ( - Placement(transformation(origin = {50, 0}, extent = {{-10, -10}, {10, 10}}))); - Modelica.Blocks.Sources.RealExpression realExpression(y=setPoint) - annotation (Placement(transformation(extent={{-42,38},{-22,58}}))); - equation - connect(conRoo.y, y) annotation ( - Line(points={{61,0},{106,0}}, color = {0, 0, 127})); - connect(realExpression.y, conRoo.u_s) annotation (Line(points={{-21,48}, - {32,48},{32,0},{38,0}}, - color={0,0,127})); - connect(TRoo.ppm, conRoo.u_m) annotation (Line(points={{-41,0},{30,0},{30,-18}, - {50,-18},{50,-12}}, color={0,0,127})); - connect(port_a, TRoo.port) annotation (Line(points={{-99,0},{-68,0},{ - -68,-14},{-52,-14},{-52,-10}}, color={0,127,255})); - annotation ( - Icon(graphics={ Rectangle(lineColor = {0, 0, 127}, fillColor = {255, 255, 255}, - fillPattern = FillPattern.Solid, extent = {{-100, -100}, {100, 100}}), Line(points = {{-80, 78}, {-80, -90}}, color = {192, 192, 192}), Polygon(lineColor = {192, 192, 192}, fillColor = {192, 192, 192}, - fillPattern = FillPattern.Solid, points = {{-80, 90}, {-88, 68}, {-72, 68}, {-80, 90}}), Line(points = {{-90, -80}, {82, -80}}, color = {192, 192, 192}), Polygon(lineColor = {192, 192, 192}, fillColor = {192, 192, 192}, - fillPattern = FillPattern.Solid, points = {{90, -80}, {68, -72}, {68, -88}, {90, -80}}), Line(points = {{-80, -80}, {-80, -20}, {60, 80}}, color = {0, 0, 127}), Text(textColor = {192, 192, 192}, extent = {{-20, -60}, {80, -20}}, textString = "PID")})); - end PIDSubstance; - - - - annotation ( - Icon(graphics={ Rectangle(lineColor = {200, 200, 200}, fillColor = {248, 248, 248}, - fillPattern = FillPattern.HorizontalCylinder, extent = {{-100, -100}, {100, 100}}, radius = 25)})); - end SpaceControls; - annotation ( - Icon(graphics={ Rectangle(lineColor = {200, 200, 200}, fillColor = {248, 248, 248}, - fillPattern = FillPattern.HorizontalCylinder, extent = {{-100, -100}, {100, 100}}, radius = 25), Rectangle(lineColor = {200, 200, 200}, fillColor = {248, 248, 248}, - fillPattern = FillPattern.HorizontalCylinder, extent = {{-100, -100}, {100, 100}}, radius = 25), Rectangle(lineColor = {128, 128, 128}, extent = {{-100, -100}, {100, 100}}, radius = 25), Rectangle(origin = {0, 35.1488}, fillColor = {255, 255, 255}, extent = {{-30, -20.1488}, {30, 20.1488}}), Rectangle(origin = {0, -34.8512}, fillColor = {255, 255, 255}, extent = {{-30, -20.1488}, {30, 20.1488}}), Line(origin = {-51.25, 0}, points = {{21.25, -35}, {-13.75, -35}, {-13.75, 35}, {6.25, 35}}), Polygon(origin = {-40, 35}, pattern = LinePattern.None, - fillPattern = FillPattern.Solid, points = {{10, 0}, {-5, 5}, {-5, -5}, {10, 0}}), Line(origin = {51.25, 0}, points = {{-21.25, 35}, {13.75, 35}, {13.75, -35}, {-6.25, -35}}), Polygon(origin = {40, -35}, pattern = LinePattern.None, - fillPattern = FillPattern.Solid, points = {{-10, 0}, {5, 5}, {5, -5}, {-10, 0}})})); - - - package ventilation - model AHU_G36 - parameter Real VUncDesOutAir_flow=0.03; - parameter Real VDesTotOutAir_flow=0.03; - Buildings.Controls.OBC.ASHRAE.G36.AHUs.MultiZone.VAV.Controller - mulAHUCon( - eneStd=Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1, - - venStd=Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1, - - ashCliZon=Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_1A, - - have_frePro=false, - minOADes=Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.DedicatedDampersAirflow, - - buiPreCon=Buildings.Controls.OBC.ASHRAE.G36.Types.PressureControl.BarometricRelief, - - ecoHigLimCon=Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb, - - cooCoi=Buildings.Controls.OBC.ASHRAE.G36.Types.CoolingCoil.None, - heaCoi=Buildings.Controls.OBC.ASHRAE.G36.Types.HeatingCoil.None, - have_perZonRehBox=false, VUncDesOutAir_flow = VUncDesOutAir_flow, VDesTotOutAir_flow = VDesTotOutAir_flow) - annotation (Placement(transformation(extent={{-12,-14},{28,74}}))); - BaseClasses.DataBus dataBus annotation (Placement(transformation( - extent={{-120,-20},{-80,20}}), iconTransformation(extent={{ - -112,-10},{-92,10}}))); - equation - connect(mulAHUCon.ySupFan, dataBus.ySupFan) annotation (Line(points={ - {30,27.8},{36,27.8},{36,-20},{-74,-20},{-74,0},{-100,0}}, - color={0,0,127}), Text( - string="%second", - index=1, - extent={{-6,3},{-6,3}}, - horizontalAlignment=TextAlignment.Right)); - connect(mulAHUCon.y1SupFan, dataBus.y1SupFan) annotation (Line(points - ={{30,30},{38,30},{38,-22},{-76,-22},{-76,0},{-100,0}}, color={ - 255,0,255}), Text( - string="%second", - index=1, - extent={{-6,3},{-6,3}}, - horizontalAlignment=TextAlignment.Right)); - connect(mulAHUCon.yOutDam, dataBus.yOutDam) annotation (Line(points={ - {30,37},{36,37},{36,20},{34,20},{34,-18},{-70,-18},{-70,0},{ - -100,0}}, color={0,0,127}), Text( - string="%second", - index=1, - extent={{-6,3},{-6,3}}, - horizontalAlignment=TextAlignment.Right)); - connect(mulAHUCon.yRetDam, dataBus.yRetDam) annotation (Line(points={ - {30,43},{36,43},{36,78},{-74,78},{-74,0},{-100,0}}, color={0, - 0,127}), Text( - string="%second", - index=1, - extent={{-6,3},{-6,3}}, - horizontalAlignment=TextAlignment.Right)); - connect(mulAHUCon.yMinOutDam, dataBus.yMinOutDam) annotation (Line( - points={{30,49},{38,49},{38,80},{-78,80},{-78,24},{-76,24},{-76, - 0},{-100,0}}, color={0,0,127}), Text( - string="%second", - index=1, - extent={{-6,3},{-6,3}}, - horizontalAlignment=TextAlignment.Right)); - connect(mulAHUCon.VEffAirOut_flow_min, dataBus.VEffAirOut_flow_min) - annotation (Line(points={{30,53},{30,58},{34,58},{34,76},{-72,76},{ - -72,0},{-100,0}}, color={0,0,127}), Text( - string="%second", - index=1, - extent={{-6,3},{-6,3}}, - horizontalAlignment=TextAlignment.Right)); - connect(mulAHUCon.TAirSupSet, dataBus.TAirSupSet) annotation (Line( - points={{30,64},{34,64},{34,70},{32,70},{32,76},{-20,76},{-20,0}, - {-100,0}}, color={0,0,127}), Text( - string="%second", - index=1, - extent={{-6,3},{-6,3}}, - horizontalAlignment=TextAlignment.Right)); - connect(dataBus.VAirOut_flow, mulAHUCon.VAirOut_flow) annotation ( - Line( - points={{-100,0},{-22,0},{-22,37},{-14,37}}, - color={255,204,51}, - thickness=0.5), Text( - string="%first", - index=-1, - extent={{-6,3},{-6,3}}, - horizontalAlignment=TextAlignment.Right)); - connect(dataBus.uOutAirFra_max, mulAHUCon.uOutAirFra_max) annotation - (Line( - points={{-100,0},{-24,0},{-24,47},{-14,47}}, - color={255,204,51}, - thickness=0.5), Text( - string="%first", - index=-1, - extent={{-6,3},{-6,3}}, - horizontalAlignment=TextAlignment.Right)); - connect(dataBus.VSumZonPri_flow, mulAHUCon.VSumZonPri_flow) - annotation (Line( - points={{-100,0},{-26,0},{-26,50},{-14,50}}, - color={255,204,51}, - thickness=0.5), Text( - string="%first", - index=-1, - extent={{-6,3},{-6,3}}, - horizontalAlignment=TextAlignment.Right)); - connect(dataBus.VSumAdjAreBreZon_flow, mulAHUCon.VSumAdjAreBreZon_flow) - annotation (Line( - points={{-100,0},{-28,0},{-28,53},{-14,53}}, - color={255,204,51}, - thickness=0.5), Text( - string="%first", - index=-1, - extent={{-6,3},{-6,3}}, - horizontalAlignment=TextAlignment.Right)); - connect(dataBus.TAirSup, mulAHUCon.TAirSup) annotation (Line( - points={{-100,0},{-30,0},{-30,58},{-14,58}}, - color={255,204,51}, - thickness=0.5), Text( - string="%first", - index=-1, - extent={{-6,3},{-6,3}}, - horizontalAlignment=TextAlignment.Right)); - connect(dataBus.u1SupFan, mulAHUCon.u1SupFan) annotation (Line( - points={{-100,0},{-32,0},{-32,61},{-14,61}}, - color={255,204,51}, - thickness=0.5), Text( - string="%first", - index=-1, - extent={{-6,3},{-6,3}}, - horizontalAlignment=TextAlignment.Right)); - connect(dataBus.uZonTemResReq, mulAHUCon.uZonTemResReq) annotation ( - Line( - points={{-100,0},{-34,0},{-34,63},{-14,63}}, - color={255,204,51}, - thickness=0.5), Text( - string="%first", - index=-1, - extent={{-6,3},{-6,3}}, - horizontalAlignment=TextAlignment.Right)); - connect(dataBus.TOut, mulAHUCon.TOut) annotation (Line( - points={{-100,0},{-36,0},{-36,66},{-14,66}}, - color={255,204,51}, - thickness=0.5), Text( - string="%first", - index=-1, - extent={{-6,3},{-6,3}}, - horizontalAlignment=TextAlignment.Right)); - connect(dataBus.dpDuc, mulAHUCon.dpDuc) annotation (Line( - points={{-100,0},{-38,0},{-38,68},{-14,68}}, - color={255,204,51}, - thickness=0.5), Text( - string="%first", - index=-1, - extent={{-6,3},{-6,3}}, - horizontalAlignment=TextAlignment.Right)); - connect(dataBus.uZonPreResReq, mulAHUCon.uZonPreResReq) annotation ( - Line( - points={{-100,0},{-40,0},{-40,71},{-14,71}}, - color={255,204,51}, - thickness=0.5), Text( - string="%first", - index=-1, - extent={{-6,3},{-6,3}}, - horizontalAlignment=TextAlignment.Right)); - connect(dataBus.uAhuOpeMod, mulAHUCon.uAhuOpeMod) annotation (Line( - points={{-100,0},{-42,0},{-42,73},{-14,73}}, - color={255,204,51}, - thickness=0.5), Text( - string="%first", - index=-1, - extent={{-6,3},{-6,3}}, - horizontalAlignment=TextAlignment.Right)); - connect(dataBus.VSumAdjPopBreZon_flow, mulAHUCon.VSumAdjPopBreZon_flow) - annotation (Line( - points={{-100,0},{-14,0},{-14,55}}, - color={255,204,51}, - thickness=0.5), Text( - string="%first", - index=-1, - extent={{-3,-6},{-3,-6}}, - horizontalAlignment=TextAlignment.Right)); - annotation (Icon(coordinateSystem(preserveAspectRatio=false), - graphics={Rectangle( - extent={{-100,98},{98,-100}}, - lineColor={28,108,200}, - fillColor={28,108,200}, - fillPattern=FillPattern.Solid)}), Diagram(coordinateSystem( - preserveAspectRatio=false))); - end AHU_G36; - model EmissionControlControl_007 - parameter Real schedule[:]=3600*{7,19}; - - parameter Modelica.Units.SI.Temperature THeaSet= 273.15+24; - parameter Modelica.Units.SI.Temperature THeaSetBack= 273.15+16; -Buildings.Controls.OBC.ASHRAE.G36.ThermalZones.ControlLoops -emissionControl( kCooCon=1.0, - TiCooCon=900, - kHeaCon=0.1, - TiHeaCon=900, - timChe=30, - dTHys=0.25, - looHys=0.01 -) -annotation (Placement(transformation(extent={{-36,-36},{28,38}}))); Modelica.Blocks.Interfaces.RealOutput y -annotation (Placement(transformation(extent={{100,-8},{120,12}}))); - - Buildings.Controls.SetPoints.OccupancySchedule - occSch2(firstEntryOccupied=true, occupancy= - schedule) - -annotation (Placement(transformation(extent={{-116,-36},{-96,-16}}))); - Buildings.Controls.OBC.CDL.Reals.Switch switch2 -annotation (Placement(transformation(extent={{-70,-26},{-50,-6}}))); - Buildings.Controls.OBC.CDL.Reals.Sources.Constant setpoint(k=THeaSet) - "Heat gain if occupied in room 2" - annotation (Placement(transformation(extent={{-116,14},{-96,34}}))); - Buildings.Controls.OBC.CDL.Reals.Sources.Constant setback(k=THeaSetBack) - "Heat gain if occupied in room 2" - annotation (Placement(transformation(extent={{-112,-82},{-92,-62}}))); -Controls.BaseClasses.DataBus dataBus - annotation (Placement(transformation( - extent={{-120,-18},{-80,22}}), iconTransformation(extent={{-120,62},{-78,98}}))); -equation -connect(emissionControl.yHea, y) annotation (Line(points={{34.4,-21.2},{96,-21.2}, -{96,2},{110,2}}, color={0,0,127})); - connect( -emissionControl.yHea, y) annotation (Line(points={{60.4,-21.2},{96,-21.2},{96,2}, - {110,2}}, color={0,0,127})); - connect(occSch2. - occupied, switch2.u2) annotation (Line( - points={{-95,-32},{-78,-32},{-78,-16},{-72,-16}}, - color={255,0,255}, - smooth=Smooth.None)); - connect(setpoint.y, switch2.u1) annotation (Line(points={{-94,24},{-90,24},{-90, - -8},{-72,-8}}, color={0,0,127})); - connect(setback.y, switch2.u3) - annotation (Line(points={{-90,-72},{-72,-72},{-72,-24}}, color={0,0,127})); - connect(switch2.y, emissionControl.THeaSet) annotation (Line(points={{-52,-22}, - {-52,-21.2},{-42.4,-21.2}}, color={0,0,127})); -connect(dataBus.TCooSetSchema_space_001, emissionControl.TCooSet); -connect(dataBus.TZonSchema_space_001, emissionControl.TZon); -connect(dataBus.yCooSystem_008, emissionControl.yCoo); -connect(dataBus.yHeaSystem_008, emissionControl.yHea); -end EmissionControlControl_007; - model OccupancyOccupancy_1 -extends house_yaml.Common.Occupancy.SimpleOccupancy ; -Controls.BaseClasses.DataBus dataBus - annotation (Placement(transformation( - extent={{-120,-18},{-80,22}}), iconTransformation(extent={{-120,62},{-78,98}}))); -equation -connect(dataBus.OccupiedSchema_space_001, occSch2.occupied); - end OccupancyOccupancy_1; - - model EmissionControlControl_006 - parameter Real schedule[:]=3600*{7,19}; - - parameter Modelica.Units.SI.Temperature THeaSet= 273.15+24; - parameter Modelica.Units.SI.Temperature THeaSetBack= 273.15+16; -Buildings.Controls.OBC.ASHRAE.G36.ThermalZones.ControlLoops -emissionControl( kCooCon=1.0, - TiCooCon=900, - kHeaCon=0.1, - TiHeaCon=900, - timChe=30, - dTHys=0.25, - looHys=0.01 -) -annotation (Placement(transformation(extent={{-36,-36},{28,38}}))); Modelica.Blocks.Interfaces.RealOutput y -annotation (Placement(transformation(extent={{100,-8},{120,12}}))); - - Buildings.Controls.SetPoints.OccupancySchedule - occSch2(firstEntryOccupied=true, occupancy= - schedule) - -annotation (Placement(transformation(extent={{-116,-36},{-96,-16}}))); - Buildings.Controls.OBC.CDL.Reals.Switch switch2 -annotation (Placement(transformation(extent={{-70,-26},{-50,-6}}))); - Buildings.Controls.OBC.CDL.Reals.Sources.Constant setpoint(k=THeaSet) - "Heat gain if occupied in room 2" - annotation (Placement(transformation(extent={{-116,14},{-96,34}}))); - Buildings.Controls.OBC.CDL.Reals.Sources.Constant setback(k=THeaSetBack) - "Heat gain if occupied in room 2" - annotation (Placement(transformation(extent={{-112,-82},{-92,-62}}))); -Controls.BaseClasses.DataBus dataBus - annotation (Placement(transformation( - extent={{-120,-18},{-80,22}}), iconTransformation(extent={{-120,62},{-78,98}}))); -equation -connect(emissionControl.yHea, y) annotation (Line(points={{34.4,-21.2},{96,-21.2}, -{96,2},{110,2}}, color={0,0,127})); - connect( -emissionControl.yHea, y) annotation (Line(points={{60.4,-21.2},{96,-21.2},{96,2}, - {110,2}}, color={0,0,127})); - connect(occSch2. - occupied, switch2.u2) annotation (Line( - points={{-95,-32},{-78,-32},{-78,-16},{-72,-16}}, - color={255,0,255}, - smooth=Smooth.None)); - connect(setpoint.y, switch2.u1) annotation (Line(points={{-94,24},{-90,24},{-90, - -8},{-72,-8}}, color={0,0,127})); - connect(setback.y, switch2.u3) - annotation (Line(points={{-90,-72},{-72,-72},{-72,-24}}, color={0,0,127})); - connect(switch2.y, emissionControl.THeaSet) annotation (Line(points={{-52,-22}, - {-52,-21.2},{-42.4,-21.2}}, color={0,0,127})); -connect(dataBus.TCooSetSchema_space_002, emissionControl.TCooSet); -connect(dataBus.TZonSchema_space_002, emissionControl.TZon); -connect(dataBus.yCooSystem_010, emissionControl.yCoo); -connect(dataBus.yHeaSystem_010, emissionControl.yHea); -end EmissionControlControl_006; - model OccupancyOccupancy_2 -extends house_yaml.Common.Occupancy.SimpleOccupancy ; -Controls.BaseClasses.DataBus dataBus - annotation (Placement(transformation( - extent={{-120,-18},{-80,22}}), iconTransformation(extent={{-120,62},{-78,98}}))); -equation -connect(dataBus.OccupiedSchema_space_002, occSch2.occupied); - end OccupancyOccupancy_2; - - model EmissionControlControl_005 - parameter Real schedule[:]=3600*{7,19}; - - parameter Modelica.Units.SI.Temperature THeaSet= 273.15+24; - parameter Modelica.Units.SI.Temperature THeaSetBack= 273.15+16; -Buildings.Controls.OBC.ASHRAE.G36.ThermalZones.ControlLoops -emissionControl( kCooCon=1.0, - TiCooCon=900, - kHeaCon=0.1, - TiHeaCon=900, - timChe=30, - dTHys=0.25, - looHys=0.01 -) -annotation (Placement(transformation(extent={{-36,-36},{28,38}}))); Modelica.Blocks.Interfaces.RealOutput y -annotation (Placement(transformation(extent={{100,-8},{120,12}}))); - - Buildings.Controls.SetPoints.OccupancySchedule - occSch2(firstEntryOccupied=true, occupancy= - schedule) - -annotation (Placement(transformation(extent={{-116,-36},{-96,-16}}))); - Buildings.Controls.OBC.CDL.Reals.Switch switch2 -annotation (Placement(transformation(extent={{-70,-26},{-50,-6}}))); - Buildings.Controls.OBC.CDL.Reals.Sources.Constant setpoint(k=THeaSet) - "Heat gain if occupied in room 2" - annotation (Placement(transformation(extent={{-116,14},{-96,34}}))); - Buildings.Controls.OBC.CDL.Reals.Sources.Constant setback(k=THeaSetBack) - "Heat gain if occupied in room 2" - annotation (Placement(transformation(extent={{-112,-82},{-92,-62}}))); -Controls.BaseClasses.DataBus dataBus - annotation (Placement(transformation( - extent={{-120,-18},{-80,22}}), iconTransformation(extent={{-120,62},{-78,98}}))); -equation -connect(emissionControl.yHea, y) annotation (Line(points={{34.4,-21.2},{96,-21.2}, -{96,2},{110,2}}, color={0,0,127})); - connect( -emissionControl.yHea, y) annotation (Line(points={{60.4,-21.2},{96,-21.2},{96,2}, - {110,2}}, color={0,0,127})); - connect(occSch2. - occupied, switch2.u2) annotation (Line( - points={{-95,-32},{-78,-32},{-78,-16},{-72,-16}}, - color={255,0,255}, - smooth=Smooth.None)); - connect(setpoint.y, switch2.u1) annotation (Line(points={{-94,24},{-90,24},{-90, - -8},{-72,-8}}, color={0,0,127})); - connect(setback.y, switch2.u3) - annotation (Line(points={{-90,-72},{-72,-72},{-72,-24}}, color={0,0,127})); - connect(switch2.y, emissionControl.THeaSet) annotation (Line(points={{-52,-22}, - {-52,-21.2},{-42.4,-21.2}}, color={0,0,127})); -connect(dataBus.TCooSetSchema_space_003, emissionControl.TCooSet); -connect(dataBus.TZonSchema_space_003, emissionControl.TZon); -connect(dataBus.yCooSystem_012, emissionControl.yCoo); -connect(dataBus.yHeaSystem_012, emissionControl.yHea); -end EmissionControlControl_005; - model OccupancyOccupancy_3 -extends house_yaml.Common.Occupancy.SimpleOccupancy ; -Controls.BaseClasses.DataBus dataBus - annotation (Placement(transformation( - extent={{-120,-18},{-80,22}}), iconTransformation(extent={{-120,62},{-78,98}}))); -equation -connect(dataBus.OccupiedSchema_space_003, occSch2.occupied); - end OccupancyOccupancy_3; - - model CollectorControlControl_002 -Buildings.Controls.OBC.CDL.Reals.PIDWithReset -conPum( controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PI, - k=1, - Ti=0.5, - Td=0.1, - r=1, - yMax=1, - yMin=0, - Ni=0.9, - Nd=10 -) "Controller for pump" -annotation (Placement(transformation(extent={{54,-10},{74,10}})));Buildings.Controls.OBC.CDL.Reals.MultiMax -mulMax(nin=3) -"Maximum radiator valve position" -annotation (Placement(transformation(extent={{-76,-10},{-56,10}})));Buildings.Controls.OBC.CDL.Reals.Hysteresis -hysPum(uLow=0.01, uHigh=0.5) -"Hysteresis for pump" -annotation (Placement(transformation(extent={{-26,-10},{-6,10}})));Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea -"Conversion from boolean to real signal" -annotation (Placement(transformation(extent={{14,-10},{34,10}})));Controls.BaseClasses.DataBus dataBus - annotation (Placement(transformation( - extent={{-120,-18},{-80,22}}), iconTransformation(extent={{-120,62},{-78,98}}))); -equation -connect(mulMax.y,hysPum. u) annotation (Line( -points={{-54,0},{-28,0}}, -color={0,0,127}, -smooth=Smooth.None));connect(hysPum.y,conPum. trigger) annotation (Line(points={{-4,0},{4,0},{4,-18}, -{58,-18},{58,-12}}, color={255,0,255}));connect(hysPum.y,booToRea. u) -annotation (Line(points={{-4,0},{12,0}}, color={255,0,255}));connect(booToRea.y,conPum. u_s) -annotation (Line(points={{36,0},{52,0}}, color={0,0,127}));annotation (Icon(coordinateSystem(preserveAspectRatio=false)), Diagram( -coordinateSystem(preserveAspectRatio=false)));connect(dataBus.y_gainSystem_002, conPum.u_m); -connect(dataBus.ySystem_002, conPum.y); -connect(dataBus.yBoiConSystem_002, mulMax.y); -connect(dataBus.yPumBoiSystem_002, mulMax.y); -connect(dataBus.yHeaSystem_008, mulMax.u[1]); -connect(dataBus.yHeaSystem_010, mulMax.u[2]); -connect(dataBus.yHeaSystem_012, mulMax.u[3]); -end CollectorControlControl_002; - model ThreeWayValveControlControl_003 - Buildings.Controls.OBC.CDL.Reals.PIDWithReset - conVal( - controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PI, - k=1, - Ti=0.5, - Td=0.1, - r=1, - yMax=1, - yMin=0, - Ni=0.9, - Nd=10 -) "Controller for pump" -annotation (Placement(transformation(extent={{-12,-10},{8,10}}))); Modelica.Blocks.Interfaces.RealOutput y -annotation (Placement(transformation(extent={{100,-10},{120,10}}))); Modelica.Blocks.Interfaces.RealInput u -annotation (Placement(transformation(extent={{-138,-20},{-98,20}}))); Controls.BaseClasses.DataBus dataBus - annotation (Placement(transformation( - extent={{-120,-18},{-80,22}}), iconTransformation(extent={{-120,62},{-78,98}}))); -equation -connect(dataBus.TColSetControl_003, conVal.u_s); -connect(dataBus.triggerControl_003, conVal.trigger); - connect(conVal.y, y) -annotation (Line(points={{10,0},{110,0}}, color={0,0,127})); connect(u, conVal.u_m) annotation (Line(points={{-118,0},{-22,0},{-22,-20},{0, - -20},{0,-16},{-2,-16},{-2,-12}}, color={0,0,127}));annotation (Icon(coordinateSystem(preserveAspectRatio=false)), Diagram( - coordinateSystem(preserveAspectRatio=false)));end ThreeWayValveControlControl_003; - model ThreeWayValveControlControl_004 - Buildings.Controls.OBC.CDL.Reals.PIDWithReset - conVal( - controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PI, - k=1, - Ti=0.5, - Td=0.1, - r=1, - yMax=1, - yMin=0, - Ni=0.9, - Nd=10 -) "Controller for pump" -annotation (Placement(transformation(extent={{-12,-10},{8,10}}))); Modelica.Blocks.Interfaces.RealOutput y -annotation (Placement(transformation(extent={{100,-10},{120,10}}))); Modelica.Blocks.Interfaces.RealInput u -annotation (Placement(transformation(extent={{-138,-20},{-98,20}}))); Controls.BaseClasses.DataBus dataBus - annotation (Placement(transformation( - extent={{-120,-18},{-80,22}}), iconTransformation(extent={{-120,62},{-78,98}}))); -equation -connect(dataBus.TColSetControl_004, conVal.u_s); -connect(dataBus.triggerControl_004, conVal.trigger); - connect(conVal.y, y) -annotation (Line(points={{10,0},{110,0}}, color={0,0,127})); connect(u, conVal.u_m) annotation (Line(points={{-118,0},{-22,0},{-22,-20},{0, - -20},{0,-16},{-2,-16},{-2,-12}}, color={0,0,127}));annotation (Icon(coordinateSystem(preserveAspectRatio=false)), Diagram( - coordinateSystem(preserveAspectRatio=false)));end ThreeWayValveControlControl_004; - model BoilerControlControl_001 - extends house_yaml.Common.Controls.ventilation.PartialBoilerControl; - Controls.BaseClasses.DataBus dataBus - annotation (Placement(transformation( - extent={{-120,-18},{-80,22}}), iconTransformation(extent={{-120,62},{-78,98}}))); - equation - connect(dataBus.TStoTopSystem_001, sub1.u1); -connect(dataBus.TStoBotSystem_001, greThr.u); -connect(dataBus.TAirOutSystem_001, lesThrTOut.u); -connect(dataBus.yBoiConSystem_001, booToReaBoi.y); -connect(dataBus.yPumBoiSystem_001, booToReaPum.y); - end BoilerControlControl_001; - - model DataServer -replaceable package Medium = Modelica.Media.Interfaces.PartialMedium; -Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor[3] -TRoo annotation ( -Placement(transformation(origin={-544,-226}, -extent = {{480, 216}, {500, 236}})));Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a[3] -port annotation ( -Placement(transformation(extent={{-112,-10},{-92,10}}), -iconTransformation(extent = {{-110, -10}, {-90, 10}})));Buildings.Fluid.Sensors.PPM[3] TRoo1(redeclare -package Medium = Medium)annotation ( -Placement(transformation(origin={-542,-268}, -extent = {{480, 216}, {500, 236}})));Modelica.Fluid.Interfaces.FluidPort_a[3] -port_a(redeclare package Medium -= Medium)annotation (Placement(transformation(extent={{-116,-58},{-82,-26}}), -iconTransformation(origin = {-2, -42}, extent = {{-110, -9}, {-90, 9}}))); Controls.BaseClasses.DataBus dataBus - annotation (Placement(transformation( - extent={{-120,-18},{-80,22}}), iconTransformation(extent={{-120,62},{-78,98}}))); -Modelica.Blocks.Sources.RealExpression - TCooSetControl_007 - (y=298.15); -Modelica.Blocks.Sources.RealExpression - TAirOutControl_001 - (y=0.0); -Modelica.Blocks.Sources.RealExpression - TCooSetControl_006 - (y=298.15); -Modelica.Blocks.Sources.RealExpression - TColSetControl_003 - (y=363.15); -Modelica.Blocks.Sources.RealExpression - TCooSetControl_005 - (y=298.15); -Modelica.Blocks.Sources.RealExpression - TColSetControl_004 - (y=363.15); -Modelica.Blocks.Sources.BooleanExpression - triggerControl_003 - (y=true); -Modelica.Blocks.Sources.BooleanExpression - triggerControl_004 - (y=true); -equation -connect(port[1],TRoo[1]. port); -connect(port_a[1], TRoo1[1].port); -connect(port[2],TRoo[2]. port); -connect(port_a[2], TRoo1[2].port); -connect(port[3],TRoo[3]. port); -connect(port_a[3], TRoo1[3].port); -connect(dataBus.TZonSchema_space_001, TRoo[1].T); -connect(dataBus.TZonSchema_space_002, TRoo[2].T); -connect(dataBus.TZonSchema_space_003, TRoo[3].T); -connect(dataBus.ppmCO2Schema_space_001, TRoo1[1].ppm); -connect(dataBus.ppmCO2Schema_space_002, TRoo1[2].ppm); -connect(dataBus.ppmCO2Schema_space_003, TRoo1[3].ppm); -connect(dataBus.TCooSetSchema_space_001, -TCooSetControl_007.y); -connect(dataBus.TAirOutSystem_001, -TAirOutControl_001.y); -connect(dataBus.TCooSetSchema_space_002, -TCooSetControl_006.y); -connect(dataBus.TColSetControl_003, -TColSetControl_003.y); -connect(dataBus.TCooSetSchema_space_003, -TCooSetControl_005.y); -connect(dataBus.TColSetControl_004, -TColSetControl_004.y); -connect(dataBus.triggerControl_003, -triggerControl_003.y); -connect(dataBus.triggerControl_004, -triggerControl_004.y); -end DataServer; - - - - partial model PartialBoilerControl - parameter Modelica.Units.SI.Temperature TSup_nominal=80 + 273.15 "Check for temperature at the bottom of the tank"; - parameter Modelica.Units.SI.Temperature threshold_outdoor_air_cutoff=15 + 273.15 "Output true if outdoor air is below heating cut-off limit"; - parameter Modelica.Units.SI.Temperature threshold_to_switch_off_boiler=15 + 273.15 "Threshold to switch boiler off"; - Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr(t= - TSup_nominal + 5) - "Check for temperature at the bottom of the tank" annotation ( - Placement(transformation(extent={{-114,-142},{-94,-122}}))); - Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToReaPum - "Signal converter for pump" annotation (Placement(transformation( - extent={{-94,-32},{-114,-12}}))); - Buildings.Controls.OBC.CDL.Reals.Greater lesThr - "Check for temperature at the top of the tank" annotation ( - Placement(transformation(extent={{-114,-80},{-94,-60}}))); - Modelica.Blocks.MathBoolean.Or pumOnSig(nu=3) - "Signal for pump being on" - annotation (Placement(transformation(extent={{146,-2},{166,18}}))); - Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToReaBoi - "Signal converter for boiler" - annotation (Placement(transformation(extent={{-94,-2},{-114,18}}))); - Buildings.Controls.OBC.CDL.Reals.Sources.Constant dTThr(k=1) - "Threshold to switch boiler off" annotation (Placement( - transformation(extent={{-204,-112},{-184,-92}}))); - Buildings.Controls.OBC.CDL.Reals.Subtract sub1 annotation (Placement( - transformation(extent={{-164,-88},{-144,-68}}))); - Modelica.Blocks.Logical.LessThreshold lesThrTOut(threshold=threshold_outdoor_air_cutoff) - "Output true if outdoor air is below heating cut-off limit" - annotation (Placement(transformation(extent={{-114,38},{-94,58}}))); - Buildings.Controls.OBC.CDL.Logical.And and1 - "Logical test to enable pump and subsequently the boiler" - annotation (Placement(transformation(extent={{-74,38},{-54,58}}))); - Modelica.StateGraph.InitialStep off(nIn=1, nOut=1) - "Pump and furnace off" - annotation (Placement(transformation(extent={{-74,78},{-54,98}}))); - Modelica.StateGraph.TransitionWithSignal T1 "Transition to pump on" - annotation (Placement(transformation(extent={{-44,78},{-24,98}}))); - Modelica.StateGraph.StepWithSignal pumOn(nIn=1, nOut=1) - "Pump on" - annotation (Placement(transformation(extent={{-14,78},{6,98}}))); - Modelica.StateGraph.Transition T3(enableTimer=true, waitTime=10) - "Transition to boiler on" - annotation (Placement(transformation(extent={{16,78},{36,98}}))); - Modelica.StateGraph.StepWithSignal boiOn(nIn=1, nOut=1) - "Boiler on" - annotation (Placement(transformation(extent={{46,78},{66,98}}))); - Modelica.StateGraph.TransitionWithSignal T2 - "Transition that switches boiler off" - annotation (Placement(transformation(extent={{76,78},{96,98}}))); - Modelica.StateGraph.StepWithSignal pumOn2(nIn=1, nOut=1) - "Pump on" - annotation (Placement(transformation(extent={{106,78},{126,98}}))); - Modelica.StateGraph.Transition T4(enableTimer=true, waitTime=10) - "Transition to boiler on" - annotation (Placement(transformation(extent={{136,78},{156,98}}))); - inner Modelica.StateGraph.StateGraphRoot stateGraphRoot - "Root of the state graph" annotation (Placement(transformation( - extent={{-134,98},{-114,118}}))); - Buildings.Controls.OBC.CDL.Reals.Sources.Constant dTThr1(k=threshold_to_switch_off_boiler) "Threshold to switch boiler off" annotation (Placement( - transformation(extent={{-208,-22},{-188,-2}}))); -equation - connect(booToReaPum.u, pumOnSig.y) - annotation (Line( - points={{-92,-22},{176,-22},{176,8},{167.5,8}}, - color={255,0,255}, - smooth=Smooth.None)); - connect(sub1.y, lesThr.u2) - annotation (Line( - points={{-142,-78},{-116,-78}}, - color={0,0,127}, - smooth=Smooth.None)); - connect(dTThr.y, sub1.u2) - annotation (Line( - points={{-182,-102},{-174,-102},{-174,-84},{-166,-84}}, - color={0,0,127}, - smooth=Smooth.None)); - connect(lesThr.y, and1.u2) - annotation (Line( - points={{-92,-70},{-84,-70},{-84,40},{-76,40}}, - color={255,0,255}, - smooth=Smooth.None)); - connect(lesThrTOut.y, and1.u1) - annotation (Line( - points={{-93,48},{-76,48}}, - color={255,0,255}, - smooth=Smooth.None)); - connect(and1.y, T1.condition) - annotation (Line(points={{-52,48},{-44,48},{-44,42},{-36, - 42},{-36,58},{-34,58},{-34,76}}, -color={255,0,255})); - connect(greThr.y, T2.condition) - annotation (Line(points={{-92,-132},{86,-132},{86,76}}, - color={255,0,255})); - connect(boiOn.active, booToReaBoi.u) - annotation (Line(points={{56,77},{56,8},{-92,8}}, - color={255,0,255})); - connect(pumOn2.active, pumOnSig.u[1]) - annotation (Line(points={{116,77},{116,5.66667}, - {146,5.66667}}, - color={255,0,255})); - connect(boiOn.active, pumOnSig.u[2]) - annotation (Line(points={{56,77},{56,8},{146,8}}, - color={255,0,255})); - connect(pumOn.active, pumOnSig.u[3]) - annotation (Line(points={{-4,77},{-4,10.3333},{146,10.3333}}, - color={255,0,255})); - connect(off.outPort[1], T1.inPort) - annotation (Line(points={{-53.5,88},{-38,88}}, color={0,0,0})); - connect(T1.outPort, pumOn.inPort[1]) - annotation (Line(points={{-32.5,88},{-15,88}}, color={0,0,0})); - connect(pumOn.outPort[1], T3.inPort) - annotation (Line(points={{6.5,88},{22,88}}, - color={0,0,0})); - connect(T3.outPort, boiOn.inPort[1]) - annotation (Line(points={{27.5,88},{45,88}}, color={0,0,0})); - connect(boiOn.outPort[1], T2.inPort) - annotation (Line(points={{66.5,88},{82,88}}, color={0,0,0})); - connect(T2.outPort, pumOn2.inPort[1]) - annotation (Line(points={{87.5,88},{105,88}}, color={0,0,0})); - connect(pumOn2.outPort[1], T4.inPort) - annotation (Line(points={{126.5,88},{142,88}}, color={0,0,0})); - connect(T4.outPort, off.inPort[1]) - annotation (Line(points={{147.5,88},{166,88},{166,118}, - {-94,118},{-94,88},{-75,88}}, - color={0,0,0})); - connect( - dTThr1.y, lesThr.u1) annotation (Line(points={{-186,-12},{-124,-12},{ - -124, - -70},{-116,-70}}, color={0,0,127})); - annotation (Icon(coordinateSystem(preserveAspectRatio=false, extent={ - {-260,-180},{260,160}})), Diagram(coordinateSystem( - preserveAspectRatio=false, extent={{-260,-180},{260,160}}))); -end PartialBoilerControl; - -end ventilation; - end Controls; - - package Fluid - package Boilers - model Simple - - extends Buildings.Fluid.Interfaces.PartialTwoPort; - Buildings.Fluid.Sources.Boundary_pT bou(use_T_in = true, nPorts = 2, redeclare - final package Medium = Medium) annotation ( - Placement(transformation(origin = {90, 188}, extent = {{-82, -180}, {-62, -160}}))); - Modelica.Blocks.Sources.Constant constant1(k = 273 + 70) annotation ( - Placement(transformation(origin = {-32, 20}, extent = {{-10, -10}, {10, 10}}))); - equation - connect(constant1.y, bou.T_in) annotation ( - Line(points = {{-20, 20}, {6, 20}, {6, 22}}, color = {0, 0, 127})); - connect(bou.ports[1], port_b) annotation ( - Line(points = {{28, 18}, {100, 18}, {100, 0}}, color = {0, 127, 255})); - connect(bou.ports[2], port_a) annotation ( - Line(points = {{28, 18}, {-100, 18}, {-100, 0}}, color = {0, 127, 255})); - annotation ( - Icon(graphics={ Rectangle(fillPattern = FillPattern.Solid, extent = {{-80, 80}, {80, -80}}), Rectangle(fillColor = {255, 255, 255}, - fillPattern = FillPattern.Solid, extent = {{-68, 70}, {70, -70}}), Polygon(lineColor = {0, 0, 255}, fillColor = {0, 0, 255}, - fillPattern = FillPattern.Solid, points = {{-68, 18}, {-68, 18}, {-54, 32}, {-28, 16}, {0, 30}, {26, 16}, {46, 32}, {70, 18}, {70, 18}, {70, -70}, {70, -70}, {-68, -70}, {-68, -70}, {-68, 18}}, smooth = Smooth.Bezier)})); - end Simple; - -partial model PartialBoilerWithStorage - replaceable package MediumW = Modelica.Media.Interfaces.PartialMedium - "Medium model" annotation (choicesAllMatching=true); - extends Buildings.Fluid.Interfaces.PartialTwoPort( - redeclare package Medium = MediumW); - - - parameter Real a[:]={0.9} "Coefficients for efficiency curve"; - parameter Buildings.Fluid.Types.EfficiencyCurves effCur=Buildings.Fluid.Types.EfficiencyCurves.Constant - "Curve used to compute the efficiency"; - parameter Modelica.Units.SI.Temperature T_nominal=353.15 - "Temperature used to compute nominal efficiency (only used if efficiency curve depends on temperature)" - annotation (Dialog(enable=(effCur == Buildings.Fluid.Types.EfficiencyCurves.QuadraticLinear))); - - - parameter Buildings.Fluid.Data.Fuels.Generic fue "Fuel type" - annotation (choicesAllMatching=true); - - parameter Modelica.Units.SI.Power Q_flow_nominal "Nominal heating power"; - parameter Boolean linearizeFlowResistance=false - "= true, use linear relation between m_flow and dp for any flow rate" - annotation (Dialog(enable=computeFlowResistance, - tab="Flow resistance")); - parameter Modelica.Units.SI.PressureDifference dp_nominal(min=0, displayUnit= -"Pa") "Pressure difference" annotation (Dialog(group="Nominal condition")); -parameter Modelica.Units.SI.Pressure dp[:]=(3000 + 2000)*{2,1} "Pressure"; -parameter Real V_flow[:] = 0.001/1000*{0.5,1}; - parameter Real deltaM=0.1 - "Fraction of nominal flow rate where flow transitions to laminar"; -parameter Modelica.Units.SI.MassFlowRate nominal_mass_flow_rate_boiler; -parameter Modelica.Units.SI.MassFlowRate nominal_mass_flow_radiator_loop; - parameter Boolean show_T=false; - - - parameter Modelica.Units.SI.Volume VTan "Tank volume"; - parameter Modelica.Units.SI.Length hTan "Height of tank (without insulation)"; - parameter Modelica.Units.SI.Length dIns "Thickness of insulation"; - parameter Modelica.Units.SI.ThermalConductivity kIns=0.04 - "Specific heat conductivity of insulation"; - parameter Integer nSeg(min=2) = 2 "Number of volume segments"; - - - Buildings.Fluid.Movers.SpeedControlled_y pumBoi( - redeclare package Medium = MediumW, -per(pressure(V_flow=V_flow, dp=dp)), - use_inputFilter=false, - energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState) - "Pump for boiler circuit" annotation (Placement(transformation(extent={{-10, - -10},{10,10}}, origin={-8,10}))); - - Buildings.Fluid.Boilers.BoilerPolynomial boi( - a=a, - effCur=effCur, - redeclare package Medium = MediumW, - Q_flow_nominal=Q_flow_nominal, - m_flow_nominal=nominal_mass_flow_rate_boiler, - fue=fue, - dp_nominal=dp_nominal, - energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, - T_start=293.15) "Boiler" - annotation (Placement(transformation(extent={{-74,0},{-54,20}}))); - Buildings.HeatTransfer.Sources.FixedTemperature TAmb(T=288.15) - "Ambient temperature in boiler room" - annotation (Placement(transformation(extent={{-14,74},{6,94}}))); - Buildings.Fluid.Storage.StratifiedEnhanced tan1( - m_flow_nominal=nominal_mass_flow_radiator_loop, - dIns=dIns, - redeclare package Medium = MediumW, - hTan=hTan, - nSeg=nSeg, - show_T=true, - VTan=VTan, - energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial) "Storage tank" - annotation (Placement(transformation(extent={{12,-72},{52,-32}}))); - Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor tanTemBot - "Tank temperature" - annotation (Placement(transformation(extent={{68,-66},{88,-46}}))); - Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor tanTemTop - "Tank temperature" - annotation (Placement(transformation(extent={{68,-34},{88,-14}}))); - Buildings.Fluid.Sources.Boundary_pT bou(nPorts=1, redeclare package Medium = -MediumW) "Fixed boundary condition, needed to provide a pressure in the system" - annotation (Placement(transformation(extent={{-74,68},{-54,88}}))); - Buildings.Fluid.FixedResistances.Junction splVal3( - dp_nominal={0,0,0}, - m_flow_nominal=nominal_mass_flow_rate_boiler*{-1,-1,1}, - redeclare package Medium = MediumW, - energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState) "Flow splitter" - annotation (Placement(transformation( -extent={{10,-10},{-10,10}}, -rotation=180, -origin={30,-98}))); - Buildings.Fluid.FixedResistances.Junction splVal4( - dp_nominal={0,0,0}, - m_flow_nominal=nominal_mass_flow_rate_boiler*{1,1,-1}, - redeclare package Medium = MediumW, - energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState) "Flow splitter" - annotation (Placement(transformation( -extent={{10,10},{-10,-10}}, -rotation=180, -origin={32,10}))); - Buildings.Fluid.Sensors.TemperatureTwoPort temperature_sensor1( - redeclare package Medium = MediumW, m_flow_nominal=nominal_mass_flow_rate_boiler) - "Radiator" annotation ( - Placement(transformation(origin={-36,11}, - extent = {{-10, -10}, {10, 10}}, - rotation=0))); - Buildings.Fluid.Sensors.TemperatureTwoPort temperature_sensor2( - redeclare package Medium = MediumW, m_flow_nominal=nominal_mass_flow_rate_boiler) - "Radiator" annotation ( - Placement(transformation(origin={66,-85}, - extent = {{-10, -10}, {10, 10}}, - rotation=0))); - Buildings.Fluid.Sensors.TemperatureTwoPort temperature_sensor3( - redeclare package Medium = MediumW, m_flow_nominal=nominal_mass_flow_rate_boiler) - "Radiator" annotation ( - Placement(transformation(origin={32,-16.5}, - extent={{-8.5,-8},{8.5,8}}, - rotation=-90))); - Buildings.Fluid.Sensors.TemperatureTwoPort temperature_sensor4( - redeclare package Medium = MediumW, m_flow_nominal=nominal_mass_flow_rate_boiler) - "Radiator" annotation ( - Placement(transformation(origin={-34,-97}, - extent = {{-10, -10}, {10, 10}}, - rotation=0))); - Buildings.Fluid.Sensors.MassFlowRate senMasFlo1(redeclare package Medium = - MediumW) - annotation (Placement(transformation(extent={{10,-10},{-10,10}}, - rotation=90, - origin={46,30}))); - Buildings.Fluid.Sensors.MassFlowRate senMasFlo2(redeclare package Medium = - MediumW) - annotation (Placement(transformation(extent={{-10,-10},{10,10}}, - rotation=90, - origin={-78,-46}))); - Buildings.Fluid.Sensors.MassFlowRate senMasFlo3(redeclare package Medium = - MediumW) - annotation (Placement(transformation(extent={{-6,-7},{6,7}}, - rotation=0, - origin={13,10}))); - Buildings.Fluid.Sensors.MassFlowRate senMasFlo4(redeclare package Medium = - MediumW) - annotation (Placement(transformation(extent={{-10,-10},{10,10}}, - rotation=0, - origin={94,-86}))); - Modelica.Blocks.Math.Gain gain(k=Q_flow_nominal) - annotation (Placement(transformation(extent={{-70,-22},{-58,-10}}))); - Modelica.Blocks.Continuous.Integrator integrator - annotation (Placement(transformation(extent={{-46,-26},{-30,-10}}))); - Modelica.Blocks.Math.Gain gain1(k=2.77778e-7) - annotation (Placement(transformation(extent={{-46,-52},{-26,-32}}))); - Modelica.Blocks.Math.Gain gain2(k=0.9*(1/11)) - annotation (Placement(transformation(extent={{-26,-80},{-6,-60}}))); - Modelica.Blocks.Routing.RealPassThrough Boiy - annotation (Placement(transformation(extent={{-122,36},{-104,54}}))); -equation - connect( - TAmb.port, boi.heatPort) - annotation (Line( - points={{6,84},{20,84},{20,30},{-64,30},{-64,17.2}}, - color={191,0,0}, - smooth=Smooth.None)); - connect( - tan1.heaPorVol[1], tanTemTop.port) - annotation (Line( - points={{32,-52.3},{32,-52},{64,-52},{64,-24},{68,-24}}, - color={191,0,0}, - smooth=Smooth.None)); - connect( - tanTemBot.port, tan1.heaPorVol[tan1.nSeg]) - annotation (Line( - points={{68,-56},{56,-56},{56,-52},{32,-52}}, - color={191,0,0}, - smooth=Smooth.None)); - connect( - tan1.heaPorTop, TAmb.port) - annotation (Line( - points={{36,-37.2},{62,-37.2},{62,84},{6,84}}, - color={191,0,0}, - smooth=Smooth.None)); - connect( - TAmb.port, tan1.heaPorSid) - annotation (Line( - points={{6,84},{62,84},{62,-50},{54,-50},{54,-52},{43.2,-52}}, - color={191,0,0}, - smooth=Smooth.None)); - connect( - TAmb.port, tan1.heaPorBot) - annotation (Line( - points={{6,84},{62,84},{62,-50},{54,-50},{54,-52},{8,-52},{8,-80},{36,-80}, - {36,-66.8}}, - color={191,0,0}, - smooth=Smooth.None)); - connect( - bou.ports[1], boi.port_a) - annotation (Line( - points={{-54,78},{-48,78},{-48,32},{-80,32},{-80,10},{-74,10}}, - color={0,127,255}, - smooth=Smooth.None)); - connect( - tan1.port_b, splVal3.port_3) annotation (Line(points={{32,-72},{32,-84},{30,-84}, - {30,-88}}, color={0,127,255})); - connect(boi.port_b, temperature_sensor1.port_a) annotation (Line(points={{-54, - 10},{-50,10},{-50,11},{-46,11}}, color={0,127,255})); - connect(temperature_sensor1.port_b, pumBoi.port_a) annotation (Line(points={{-26,11}, - {-23,11},{-23,10},{-18,10}}, color={0,127,255})); - connect(splVal3.port_2, temperature_sensor2.port_a) annotation (Line(points={{40,-98}, - {52,-98},{52,-85},{56,-85}}, color={0,127,255})); - connect(splVal4.port_3, temperature_sensor3.port_a) - annotation (Line(points={{32,0},{32,-8}}, color={0,127,255})); - connect(temperature_sensor3.port_b, tan1.port_a) - annotation (Line(points={{32,-25},{32,-32}}, color={0,127,255})); - connect(splVal3.port_1, temperature_sensor4.port_b) annotation (Line(points={{20,-98}, - {18,-97},{-24,-97}}, color={0,127,255})); - connect(senMasFlo1.port_b, splVal4.port_2) annotation (Line(points={{46,20},{46, - 16},{42,16},{42,10}}, color={0,127,255})); - connect(boi.port_a, senMasFlo2.port_b) - annotation (Line(points={{-74,10},{-78,10},{-78,-36}}, color={0,127,255})); - connect(temperature_sensor4.port_a, senMasFlo2.port_a) annotation (Line( - points={{-44,-97},{-44,-98},{-78,-98},{-78,-56}}, color={0,127,255})); - connect(splVal4.port_1, senMasFlo3.port_b) - annotation (Line(points={{22,10},{19,10}}, color={0,127,255})); - connect(senMasFlo3.port_a, pumBoi.port_b) - annotation (Line(points={{7,10},{2,10}}, color={0,127,255})); - connect(temperature_sensor2.port_b, senMasFlo4.port_a) annotation (Line( - points={{76,-85},{80,-85},{80,-86},{84,-86}}, color={0,127,255})); - connect(senMasFlo1.port_a, port_b) annotation (Line(points={{46,40},{46,44},{86, - 44},{86,0},{100,0}}, color={0,127,255})); - connect(port_a, senMasFlo4.port_b) annotation (Line(points={{-100,0},{-84,0},{ - -84,-32},{-96,-32},{-96,-114},{110,-114},{110,-86},{104,-86}}, color={ - 0,127,255})); - connect(gain.y, integrator.u) annotation (Line(points={{-57.4,-16},{-54,-16},{ - -54,-18},{-47.6,-18}}, color={0,0,127})); - connect(integrator.y, gain1.u) annotation (Line(points={{-29.2,-18},{-30,-18}, - {-30,-4},{-74,-4},{-74,-12},{-76,-12},{-76,-32},{-48,-32},{-48,-42}}, - color={0,0,127})); - connect(gain1.y, gain2.u) annotation (Line(points={{-25,-42},{-34,-42},{-34,-60}, - {-60,-60},{-60,-70},{-28,-70}}, color={0,0,127})); - connect(Boiy.y, boi.y) annotation (Line(points={{-103.1,45},{-84,45},{-84,18}, - {-76,18}}, color={0,0,127})); - connect(Boiy.y, gain.u) annotation (Line(points={{-103.1,45},{-84,45},{-84,2}, - {-82,2},{-82,-16},{-71.2,-16}}, color={0,0,127})); - annotation (Icon(coordinateSystem(extent={{-100,-120},{100,100}}), graphics={ -Rectangle(fillPattern=FillPattern.Solid, extent={{-80,80},{80,-80}}), -Rectangle( - fillColor={255,255,255}, - fillPattern=FillPattern.Solid, - extent={{-68,70},{70,-70}}), - Polygon( - lineColor={0,0,255}, - fillColor={0,0,255}, - fillPattern=FillPattern.Solid, - points={{-68,18},{-68,18},{-54,32},{-28,16},{0,30},{26,16},{46,32},{70, - 18},{70,18},{70,-70},{70,-70},{-68,-70},{-68,-70},{-68,18}}, - smooth=Smooth.Bezier)}), Diagram(coordinateSystem(extent={{-100,-120}, - {100,100}}))); -end PartialBoilerWithStorage; - - - model BoilerWithStorageSystem_001 - extends house_yaml.Common.Fluid.Boilers.PartialBoilerWithStorage; - Controls.BaseClasses.DataBus dataBus - annotation (Placement(transformation( - extent={{-120,-18},{-80,22}}), iconTransformation(extent={{-120,62},{-78,98}}))); - equation - connect(dataBus.yBoiConSystem_001, Boiy.y); -connect(dataBus.yPumBoiSystem_001, pumBoi.y); -connect(dataBus.TStoTopSystem_001, tanTemTop.T); -connect(dataBus.TStoBotSystem_001, tanTemBot.T); - end BoilerWithStorageSystem_001; - - - end Boilers; - - package Ventilation - model SimpleHVAC - - replaceable package Medium = Modelica.Media.Interfaces.PartialMedium - "Medium model" annotation (choicesAllMatching=true); - IDEAS.Fluid.Movers.FlowControlled_dp - fanSup( - energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, - inputType=IDEAS.Fluid.Types.InputType.Constant, - nominalValuesDefineDefaultPressureCurve=true, - redeclare package Medium = Medium, - dp_nominal=200, - m_flow_nominal=2*100*1.2/3600) "Supply fan" - annotation (Placement(transformation(extent={{4,6},{24,26}}))); - IDEAS.Fluid.Movers.FlowControlled_dp - fanRet( - energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, - inputType=IDEAS.Fluid.Types.InputType.Constant, - nominalValuesDefineDefaultPressureCurve=true, - redeclare package Medium = Medium, - dp_nominal=200, - m_flow_nominal=2*100*1.2/3600) "Return fan" - annotation (Placement(transformation(extent={{24,-34},{4,-14}}))); - IDEAS.Fluid.HeatExchangers.ConstantEffectiveness - hex( - redeclare package Medium1 = Medium, - redeclare package Medium2 = Medium, - m1_flow_nominal=2*100*1.2/3600, - m2_flow_nominal=2*100*1.2/3600, - dp1_nominal=100, - dp2_nominal=100) "Heat exchanger with constant heat recovery effectivity" - annotation (Placement(transformation(extent={{-26,-14},{-6,6}}))); - Modelica.Fluid.Interfaces.FluidPort_b port_b( - redeclare final package Medium = Medium) - "Fluid connector b (positive design flow direction is from port_a to port_b)" - annotation (Placement(transformation(extent={{118,1},{86,31}}), - iconTransformation(extent={{110,31},{90,49}}))); - - Modelica.Fluid.Interfaces.FluidPort_a port_a( - redeclare final package Medium = Medium) - "Fluid connector a (positive design flow direction is from port_a to port_b)" - annotation (Placement(transformation(extent={{84,-40},{118,-8}}), - iconTransformation(extent={{90,-49},{110,-31}}))); - IDEAS.Fluid.Sources.OutsideAir outsideAir( - azi=0, nPorts=2, redeclare package - Medium = Medium) annotation ( - Placement(transformation(origin = {-64, 2}, extent = {{-10, -10}, {10, 10}}))); - equation - connect(hex.port_b1, fanSup.port_a) annotation ( - Line(points = {{-6, 2}, {-6, 16}, {4, 16}}, color = {0, 127, 255})); - connect(hex.port_a2, fanRet.port_b) annotation ( - Line(points = {{-6, -10}, {-6, -24}, {4, -24}}, color = {0, 127, 255})); - connect(fanSup.port_b, port_b) annotation ( - Line(points = {{24, 16}, {102, 16}}, color = {0, 127, 255})); - connect(fanRet.port_a, port_a) annotation ( - Line(points = {{24, -24}, {101, -24}}, color = {0, 127, 255})); - connect( - outsideAir.ports[1], hex.port_a1) annotation ( - Line(points={{-54,4},{-40,4},{-40,2},{-26,2}}, - color = {0, 127, 255})); - connect( - outsideAir.ports[2], hex.port_b2) annotation ( - Line(points={{-54,0},{-26,0},{-26,-10}}, color = {0, 127, 255})); - annotation (Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-60}, - {100,60}}), graphics={Rectangle( - extent={{-100,60},{100,-60}}, - lineColor={255,128,0}, - fillColor={255,128,0}, - fillPattern=FillPattern.Forward)}), Diagram(coordinateSystem( - preserveAspectRatio=false, extent={{-100,-60},{100,60}}))); - end SimpleHVAC; - - model SimpleVAV - annotation (Icon(coordinateSystem(preserveAspectRatio=false)), Diagram( - coordinateSystem(preserveAspectRatio=false))); - end SimpleVAV; - - model SimpleHVACBuildings - - replaceable package Medium = Modelica.Media.Interfaces.PartialMedium - "Medium model" annotation (choicesAllMatching=true); - Buildings.Fluid.Movers.FlowControlled_dp - fanSup( - energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, - use_inputFilter=false, - inputType=Buildings.Fluid.Types.InputType.Constant, - nominalValuesDefineDefaultPressureCurve=true, - redeclare package Medium = Medium, - dp_nominal=200, - m_flow_nominal=2*100*1.2/3600) "Supply fan" - annotation (Placement(transformation(extent={{4,6},{24,26}}))); - Buildings.Fluid.Movers.FlowControlled_dp - fanRet( - energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, - use_inputFilter=false, - inputType=Buildings.Fluid.Types.InputType.Constant, - nominalValuesDefineDefaultPressureCurve=true, - redeclare package Medium = Medium, - dp_nominal=200, - m_flow_nominal=2*100*1.2/3600) "Return fan" - annotation (Placement(transformation(extent={{24,-34},{4,-14}}))); - Buildings.Fluid.HeatExchangers.ConstantEffectiveness - hex( - redeclare package Medium1 = Medium, - redeclare package Medium2 = Medium, - m1_flow_nominal=2*100*1.2/3600, - m2_flow_nominal=2*100*1.2/3600, - dp1_nominal=100, - dp2_nominal=100) "Heat exchanger with constant heat recovery effectivity" - annotation (Placement(transformation(extent={{-26,-14},{-6,6}}))); - Modelica.Fluid.Interfaces.FluidPort_b port_b( - redeclare final package Medium = Medium) - "Fluid connector b (positive design flow direction is from port_a to port_b)" - annotation (Placement(transformation(extent={{118,1},{86,31}}), - iconTransformation(extent={{110,31},{90,49}}))); - - Modelica.Fluid.Interfaces.FluidPort_a port_a( - redeclare final package Medium = Medium) - "Fluid connector a (positive design flow direction is from port_a to port_b)" - annotation (Placement(transformation(extent={{84,-40},{118,-8}}), - iconTransformation(extent={{90,-49},{110,-31}}))); - Buildings.Fluid.Sources.Boundary_pT bou(T=295.15, nPorts=2, redeclare - package Medium = Medium) - annotation (Placement(transformation(extent={{-78,-14},{-58,6}}))); - Buildings.Fluid.Sensors.TemperatureTwoPort TSup( - redeclare package Medium = Medium, - m_flow_nominal=2*100*1.2/3600, - allowFlowReversal=false) -annotation (Placement(transformation(extent={{48,6},{68,26}}))); - Controls.BaseClasses.DataBus dataBus annotation (Placement(transformation( - extent={{-120,22},{-80,62}}), iconTransformation(extent={{-208,22},{-188, - 42}}))); -equation - connect(hex.port_b1, fanSup.port_a) annotation ( - Line(points = {{-6, 2}, {-6, 16}, {4, 16}}, color = {0, 127, 255})); - connect(hex.port_a2, fanRet.port_b) annotation ( - Line(points = {{-6, -10}, {-6, -24}, {4, -24}}, color = {0, 127, 255})); - connect(fanRet.port_a, port_a) annotation ( - Line(points = {{24, -24}, {101, -24}}, color = {0, 127, 255})); - connect(bou.ports[1], hex.port_b2) annotation (Line(points={{-58,-2},{-32,-2}, - {-32,-10},{-26,-10}}, color={0,127,255})); - connect(bou.ports[2], hex.port_a1) annotation (Line(points={{-58,-6},{-32,-6}, - {-32,2},{-26,2}}, color={0,127,255})); - connect(fanSup.port_b, TSup.port_a) - annotation (Line(points={{24,16},{48,16}}, color={0,127,255})); - connect(TSup.port_b, port_b) - annotation (Line(points={{68,16},{102,16}}, color={0,127,255})); - connect(TSup.T, dataBus.TSupAhu) annotation (Line(points={{58,27},{58,42},{ - -100,42}}, color={0,0,127}), Text( - string="%second", - index=1, - extent={{-6,3},{-6,3}}, - horizontalAlignment=TextAlignment.Right)); - annotation (Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-60}, - {100,60}}), graphics={Rectangle( - extent={{-100,60},{100,-60}}, - lineColor={255,128,0}, - fillColor={255,128,0}, - fillPattern=FillPattern.Forward)}), Diagram(coordinateSystem( - preserveAspectRatio=false, extent={{-100,-60},{100,60}}))); -end SimpleHVACBuildings; - - model AhuWithEconomizer - replaceable package MediumA = Modelica.Media.Interfaces.PartialMedium - "Medium model" annotation (choicesAllMatching=true); - - constant Integer numZon(min=2)=2 "Total number of served VAV boxes"; - - parameter Modelica.Units.SI.Volume VRoo[numZon] "Room volume per zone"; - parameter Modelica.Units.SI.Area AFlo[numZon] "Floor area per zone"; - - final parameter Modelica.Units.SI.Area ATot=sum(AFlo) - "Total floor area for all zone"; - - constant Real conv=1.2/3600 "Conversion factor for nominal mass flow rate"; - - - parameter Modelica.Units.SI.HeatFlowRate QHeaAHU_flow_nominal(min=0) = mHeaAir_flow_nominal * Buildings.Utilities.Psychrometrics.Constants.cpAir * (THeaAirSup_nominal-THeaAirMix_nominal) - "Nominal heating heat flow rate of air handler unit coil"; - - parameter Modelica.Units.SI.HeatFlowRate QCooAHU_flow_nominal(max=0) = 1.3 * mCooAir_flow_nominal * Buildings.Utilities.Psychrometrics.Constants.cpAir *(TCooAirSup_nominal-TCooAirMix_nominal) - "Nominal total cooling heat flow rate of air handler unit coil (negative number)"; - - parameter Modelica.Units.SI.MassFlowRate mCooVAV_flow_nominal[numZon] - "Design mass flow rate per zone for cooling" - annotation (Dialog(group="Nominal mass flow rate")); - - parameter Modelica.Units.SI.MassFlowRate mHeaVAV_flow_nominal[numZon] = 0.3*mCooVAV_flow_nominal - "Design mass flow rate per zone for heating" - annotation (Dialog(group="Nominal mass flow rate")); - - parameter Modelica.Units.SI.MassFlowRate mAir_flow_nominal=0.01 - "Nominal mass flow rate for fan" - annotation (Dialog(group="Nominal mass flow rate")); - parameter Modelica.Units.SI.MassFlowRate mCooAir_flow_nominal=0.7*sum(mCooVAV_flow_nominal) - "Nominal mass flow rate for fan" - annotation (Dialog(group="Nominal mass flow rate")); - parameter Modelica.Units.SI.MassFlowRate mHeaAir_flow_nominal = 0.7*sum(mHeaVAV_flow_nominal) - "Nominal mass flow rate for fan" - annotation (Dialog(group="Nominal mass flow rate")); - - parameter Modelica.Units.SI.MassFlowRate mHeaWat_flow_nominal= - QHeaAHU_flow_nominal/Buildings.Utilities.Psychrometrics.Constants.cpWatLiq/10 - "Nominal water mass flow rate for heating coil in AHU" - annotation (Dialog(group="Nominal mass flow rate")); - parameter Modelica.Units.SI.MassFlowRate mCooWat_flow_nominal= - QCooAHU_flow_nominal/Buildings.Utilities.Psychrometrics.Constants.cpWatLiq/(-6) - "Nominal water mass flow rate for cooling coil" - annotation (Dialog(group="Nominal mass flow rate")); - - parameter Real ratOAFlo_A(final unit="m3/(s.m2)") = 0.3e-3 - "Outdoor airflow rate required per unit area"; - parameter Real ratOAFlo_P = 2.5e-3 - "Outdoor airflow rate required per person"; - parameter Real ratP_A = 5e-2 - "Occupant density"; - parameter Real effZ(final unit="1") = 0.8 - "Zone air distribution effectiveness (limiting value)"; - parameter Real divP(final unit="1") = 0.7 - "Occupant diversity ratio"; - - parameter Modelica.Units.SI.VolumeFlowRate VZonOA_flow_nominal[numZon]=( - ratOAFlo_P*ratP_A + ratOAFlo_A)*AFlo/effZ - "Zone outdoor air flow rate of each VAV box"; - - parameter Modelica.Units.SI.VolumeFlowRate Vou_flow_nominal=(divP*ratOAFlo_P* - ratP_A + ratOAFlo_A)*sum(AFlo) "System uncorrected outdoor air flow rate"; - parameter Real effVen(final unit="1") = if divP < 0.6 then - 0.88 * divP + 0.22 else 0.75 - "System ventilation efficiency"; - parameter Modelica.Units.SI.VolumeFlowRate Vot_flow_nominal=Vou_flow_nominal/ - effVen "System design outdoor air flow rate"; - - parameter Modelica.Units.SI.Temperature THeaOn=293.15 - "Heating setpoint during on" - annotation (Dialog(group="Room temperature setpoints")); - parameter Modelica.Units.SI.Temperature THeaOff=285.15 - "Heating setpoint during off" - annotation (Dialog(group="Room temperature setpoints")); - parameter Modelica.Units.SI.Temperature TCooOn=297.15 - "Cooling setpoint during on" - annotation (Dialog(group="Room temperature setpoints")); - parameter Modelica.Units.SI.Temperature TCooOff=303.15 - "Cooling setpoint during off" - annotation (Dialog(group="Room temperature setpoints")); - parameter Modelica.Units.SI.PressureDifference dpBuiStaSet(min=0) = 12 - "Building static pressure"; - parameter Real yFanMin = 0.1 "Minimum fan speed"; - - - parameter Modelica.Units.SI.Temperature TCooAirMix_nominal(displayUnit="degC")=303.15 - "Mixed air temperature during cooling nominal conditions (used to size cooling coil)" - annotation (Dialog(group="Air handler unit nominal temperatures and humidity")); - parameter Modelica.Units.SI.Temperature TCooAirSup_nominal(displayUnit="degC")=285.15 - "Supply air temperature during cooling nominal conditions (used to size cooling coil)" - annotation (Dialog(group="Air handler unit nominal temperatures and humidity")); - parameter Modelica.Units.SI.MassFraction wCooAirMix_nominal = 0.017 - "Humidity ratio of mixed air at a nominal conditions used to size cooling coil (in kg/kg dry total)" - annotation (Dialog(group="Air handler unit nominal temperatures and humidity")); - parameter Modelica.Units.SI.Temperature TCooWatInl_nominal(displayUnit="degC") = 279.15 - "Cooling coil nominal inlet water temperature" - annotation (Dialog(group="Air handler unit nominal temperatures and humidity")); - - - parameter Modelica.Units.SI.Temperature THeaAirMix_nominal(displayUnit="degC")=277.15 - "Mixed air temperature during heating nominal conditions (used to size heating coil)" - annotation (Dialog(group="Air handler unit nominal temperatures and humidity")); - parameter Modelica.Units.SI.Temperature THeaAirSup_nominal(displayUnit="degC")=285.15 - "Supply air temperature during heating nominal conditions (used to size heating coil)" - annotation (Dialog(group="Air handler unit nominal temperatures and humidity")); - parameter Modelica.Units.SI.Temperature THeaWatInl_nominal(displayUnit="degC") - "Reheat coil nominal inlet water temperature" - annotation (Dialog(group="Air handler unit nominal temperatures and humidity")); - - parameter Boolean allowFlowReversal=false - "= false to simplify equations, assuming, but not enforcing, no flow reversal" - annotation (Evaluate=true); - - - - Buildings.Fluid.Movers.Preconfigured.SpeedControlled_y fanSup( - redeclare package Medium = MediumA, - m_flow_nominal=mAir_flow_nominal, - dp_nominal=780 + 10 + dpBuiStaSet, - energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial) - "Supply air fan" - annotation (Placement(transformation(extent={{246,-82},{266,-62}}))); - Buildings.Fluid.Sensors.VolumeFlowRate senSupFlo(redeclare package Medium = - MediumA, m_flow_nominal=mAir_flow_nominal) - "Sensor for supply fan flow rate" - annotation (Placement(transformation(extent={{346,-82},{366,-62}}))); - Buildings.Fluid.Sensors.TemperatureTwoPort TSup( - redeclare package Medium = MediumA, - m_flow_nominal=mAir_flow_nominal, - allowFlowReversal=allowFlowReversal) - annotation (Placement(transformation(extent={{276,-82},{296,-62}}))); - Buildings.Fluid.Sensors.TemperatureTwoPort TMix( - redeclare package Medium = MediumA, - m_flow_nominal=mAir_flow_nominal, - allowFlowReversal=allowFlowReversal, - transferHeat=true) "Mixed air temperature sensor" - annotation (Placement(transformation(extent={{82,-82},{102,-62}}))); - Buildings.Fluid.Sensors.VolumeFlowRate VOut1(redeclare package Medium = - MediumA, m_flow_nominal=mAir_flow_nominal) - "Outside air volume flow rate" - annotation (Placement(transformation(extent={{-68,-80},{-48,-60}}))); - Buildings.Fluid.Actuators.Dampers.Exponential - damRet( - redeclare package Medium = MediumA, - m_flow_nominal=mAir_flow_nominal, - from_dp=false, - riseTime=15, - dpDamper_nominal=5, - dpFixed_nominal=5) - "Return air damper" annotation (Placement(transformation( - origin={52,-6}, - extent={{10,-10},{-10,10}}, - rotation=90))); - Buildings.Fluid.Actuators.Dampers.Exponential - damOut( - redeclare package Medium = MediumA, - m_flow_nominal=mAir_flow_nominal, - from_dp=false, - riseTime=15, - dpDamper_nominal=5, - dpFixed_nominal=5) - "Outdoor air damper" - annotation (Placement(transformation(extent={{2,-80},{22,-60}}))); - Buildings.Fluid.FixedResistances.PressureDrop - dpSupDuc( - m_flow_nominal=mAir_flow_nominal, - redeclare package Medium = MediumA, - allowFlowReversal=allowFlowReversal, - dp_nominal=200 + 200 + 100 + 40) - "Pressure drop for supply duct" - annotation (Placement(transformation(extent={{196,-82},{216,-62}}))); - Buildings.Fluid.FixedResistances.Junction - splRetOut( - redeclare package Medium = MediumA, - tau=15, - m_flow_nominal=mAir_flow_nominal*{1,1,1}, - energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, - dp_nominal(each displayUnit="Pa") = {0,0,0}, - portFlowDirection_1=if allowFlowReversal then Modelica.Fluid.Types.PortFlowDirection.Bidirectional - else Modelica.Fluid.Types.PortFlowDirection.Entering, - portFlowDirection_2=if allowFlowReversal then Modelica.Fluid.Types.PortFlowDirection.Bidirectional - else Modelica.Fluid.Types.PortFlowDirection.Leaving, - portFlowDirection_3=if allowFlowReversal then Modelica.Fluid.Types.PortFlowDirection.Bidirectional - else Modelica.Fluid.Types.PortFlowDirection.Entering, - linearized=true) - "Flow splitter" - annotation (Placement(transformation( - extent={{-10,10},{10,-10}}, - rotation=0, - origin={52,-70}))); - Buildings.Fluid.Actuators.Dampers.Exponential damExh( - from_dp=false, - riseTime=15, - dpFixed_nominal=5, - redeclare package Medium = MediumA, - m_flow_nominal=mAir_flow_nominal, - dpDamper_nominal=5) - "Exhaust air damper" - annotation (Placement(transformation(extent={{-16,-14},{-36,6}}))); - Buildings.Fluid.FixedResistances.PressureDrop dpRetDuc( - m_flow_nominal=mAir_flow_nominal, - redeclare package Medium = MediumA, - allowFlowReversal=allowFlowReversal, - dp_nominal=40) - "Pressure drop for return duct" - annotation (Placement(transformation(extent={{368,0},{348,20}}))); - Buildings.Fluid.Sensors.VolumeFlowRate senRetFlo(redeclare package Medium = - MediumA, m_flow_nominal=mAir_flow_nominal) - "Sensor for return fan flow rate" - annotation (Placement(transformation(extent={{234,0},{214,20}}))); - Buildings.Fluid.Sensors.TemperatureTwoPort TRet( - redeclare package Medium = MediumA, - m_flow_nominal=mAir_flow_nominal, - allowFlowReversal=allowFlowReversal) - "Return air temperature sensor" - annotation (Placement(transformation(extent={{138,0},{118,20}}))); - Buildings.Fluid.Movers.Preconfigured.SpeedControlled_y fanSup1( - redeclare package Medium = MediumA, - m_flow_nominal=mAir_flow_nominal, - dp_nominal=780 + 10 + dpBuiStaSet, - energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial) - "Supply air fan" - annotation (Placement(transformation(extent={{278,0},{258,20}}))); - Modelica.Fluid.Interfaces.FluidPort_b port_b(redeclare final package Medium = - MediumA) - "Fluid connector b (positive design flow direction is from port_a to port_b)" - annotation (Placement(transformation(extent={{556,-5},{524,25}}), - iconTransformation(extent={{552,11},{532,29}}))); - Modelica.Fluid.Interfaces.FluidPort_a port_a(redeclare final package Medium = - MediumA) - "Fluid connector a (positive design flow direction is from port_a to port_b)" - annotation (Placement(transformation(extent={{522,-90},{556,-58}}), - iconTransformation(extent={{532,-69},{552,-51}}))); - Modelica.Fluid.Interfaces.FluidPorts_b ports[2](redeclare each package Medium = - MediumA, each m_flow(max=if flowDirection == Modelica.Fluid.Types.PortFlowDirection.Leaving - then 0 else +Modelica.Constants.inf, min=if flowDirection == - Modelica.Fluid.Types.PortFlowDirection.Entering then 0 else -Modelica.Constants.inf)) - "Fluid ports" - annotation (Placement(transformation(extent={{-110,26},{-90,-54}}), - iconTransformation(extent={{-110,26},{-90,-54}}))); - Controls.BaseClasses.DataBus dataBus annotation (Placement(transformation( - extent={{-90,78},{-50,118}}), iconTransformation(extent={{-84,54},{-34, - 96}}))); - Modelica.Blocks.Math.RealToBoolean u1SupFan(threshold=0.2) - "Convert real to integer" - annotation (Placement(transformation(extent={{316,30},{356,70}}))); - Buildings.Controls.OBC.CDL.Integers.Sources.Constant opeMod(final k=Buildings.Controls.OBC.ASHRAE.G36.Types.OperationModes.occupied) - "AHU operation mode is occupied" - annotation (Placement(transformation(extent={{-66,-170},{-46,-150}}))); - Buildings.Controls.OBC.CDL.Reals.Sources.Constant sumDesPopBreZon(final k=0.0125) - "Sum of the population component design breathing zone flow rate" - annotation (Placement(transformation(extent={{200,-160},{220,-140}}))); - Buildings.Controls.OBC.CDL.Reals.Sources.Constant sumDesAreBreZon(final k=0.03) - "Sum of the area component design breathing zone flow rate" - annotation (Placement(transformation(extent={{324,-160},{344,-140}}))); - Buildings.Fluid.Sensors.RelativePressure dpDisSupFan(redeclare package Medium = - MediumA) "Supply fan static discharge pressure" annotation (Placement( - transformation( - extent={{-18,22},{18,-22}}, - rotation=90, - origin={404,-28}))); - Buildings.Controls.OBC.CDL.Integers.Sources.Constant ducPreResReq(final k=2) - "AHU operation mode is occupied" - annotation (Placement(transformation(extent={{-64,-218},{-44,-198}}))); - Buildings.Fluid.Sensors.TemperatureTwoPort TOut( - redeclare package Medium = MediumA, - m_flow_nominal=mAir_flow_nominal, - allowFlowReversal=allowFlowReversal, - transferHeat=true) "Mixed air temperature sensor" - annotation (Placement(transformation(extent={{-32,-80},{-12,-60}}))); - Buildings.Controls.OBC.CDL.Reals.Sources.Constant sumDesPopBreZon1(final k=0.04) - "Sum of the population component design breathing zone flow rate" - annotation (Placement(transformation(extent={{264,-160},{284,-140}}))); - Buildings.Controls.OBC.CDL.Reals.Sources.Constant VSumZonPri_flow(final k=0.03) - "Sum of the area component design breathing zone flow rate" - annotation (Placement(transformation(extent={{444,-112},{464,-92}}))); - Buildings.Controls.OBC.CDL.Reals.Sources.Constant uOutAirFra_max(final k=0.5) - "Sum of the area component design breathing zone flow rate" - annotation (Placement(transformation(extent={{498,-122},{518,-102}}))); - Buildings.Controls.OBC.CDL.Integers.Sources.Constant maxSupResReq(final k=6) - "AHU operation mode is occupied" - annotation (Placement(transformation(extent={{-74,-268},{-54,-248}}))); - - protected - parameter Modelica.Fluid.Types.PortFlowDirection flowDirection=Modelica.Fluid.Types.PortFlowDirection.Bidirectional - "Allowed flow direction" annotation (Evaluate=true, Dialog(tab="Advanced")); -equation - connect(TSup.port_a,fanSup. port_b) annotation (Line( - points={{276,-72},{266,-72}}, - color={0,127,255}, - smooth=Smooth.None, - thickness=0.5)); - connect(TSup.port_b,senSupFlo. port_a) - annotation (Line(points={{296,-72},{346,-72}}, color={0,127,255})); - connect(dpSupDuc.port_b,fanSup. port_a) - annotation (Line(points={{216,-72},{246,-72}}, color={0,127,255})); - connect(damOut.port_b,splRetOut. port_1) - annotation (Line(points={{22,-70},{42,-70}}, color={0,127,255})); - connect(splRetOut.port_2,TMix. port_a) - annotation (Line(points={{62,-70},{72,-70},{72,-72},{82,-72}}, - color={0,127,255})); - connect(damRet.port_b,splRetOut. port_3) annotation (Line(points={{52,-16},{52, - -60}}, color={0,127,255})); - connect(dpSupDuc.port_a, TMix.port_b) annotation (Line(points={{196,-72},{102, - -72}}, color={0,127,255})); - connect(senRetFlo.port_b,TRet. port_a) annotation (Line(points={{214,10},{138, - 10}}, color={0,127,255})); - connect(TRet.port_b, damRet.port_a) annotation (Line(points={{118,10},{52,10}, - {52,4}}, color={0,127,255})); - connect(TRet.port_b, damExh.port_a) annotation (Line(points={{118,10},{-6,10}, - {-6,-4},{-16,-4}}, color= - {0,127,255})); - connect(senRetFlo.port_a, fanSup1.port_b) - annotation (Line(points={{234,10},{258,10}}, color={0,127,255})); - connect(fanSup1.port_a, dpRetDuc.port_b) - annotation (Line(points={{278,10},{348,10}}, color={0,127,255})); - connect(senSupFlo.port_b, port_a) annotation (Line(points={{366,-72},{516,-72}, - {516,-74},{539,-74}}, color={0,127,255})); - connect(dpRetDuc.port_a, port_b) - annotation (Line(points={{368,10},{540,10}}, color={0,127,255})); - connect(damExh.port_b, ports[1]) annotation (Line(points={{-36,-4},{-84,-4},{-84, - 6},{-100,6}}, color={0,127,255})); - connect(VOut1.port_a, ports[2]) annotation (Line(points={{-68,-70},{-84,-70},{ - -84,-34},{-100,-34}}, color={0,127,255})); - connect(dataBus.yRetDam, damRet.y) annotation (Line( - points={{-70,98},{-70,-24},{32,-24},{32,-6},{40,-6}}, - color={255,204,51}, - thickness=0.5), Text( - string="%first", - index=-1, - extent={{-6,3},{-6,3}}, - horizontalAlignment=TextAlignment.Right)); - connect(dataBus.yOutDam, damOut.y) annotation (Line( - points={{-70,98},{-70,-48},{12,-48},{12,-58}}, - color={255,204,51}, - thickness=0.5), Text( - string="%first", - index=-1, - extent={{-3,6},{-3,6}}, - horizontalAlignment=TextAlignment.Right)); - connect(dataBus.ySupFan, fanSup1.y) annotation (Line( - points={{-70,98},{-70,32},{268,32},{268,22}}, - color={255,204,51}, - thickness=0.5), Text( - string="%first", - index=-1, - extent={{-6,3},{-6,3}}, - horizontalAlignment=TextAlignment.Right)); - connect(dataBus.ySupFan, fanSup.y) annotation (Line( - points={{-70,98},{-70,32},{248,32},{248,-52},{256,-52},{256,-60}}, - color={255,204,51}, - thickness=0.5), Text( - string="%first", - index=-1, - extent={{-6,3},{-6,3}}, - horizontalAlignment=TextAlignment.Right)); - connect(dataBus.yOutDam, damExh.y) annotation (Line( - points={{-70,98},{-70,18},{-26,18},{-26,8}}, - color={255,204,51}, - thickness=0.5), Text( - string="%first", - index=-1, - extent={{-6,3},{-6,3}}, - horizontalAlignment=TextAlignment.Right)); - connect(opeMod.y, dataBus.uAhuOpeMod) annotation (Line(points={{-44,-160},{-34, - -160},{-34,-158},{-36,-158},{-36,-154},{-34,-154},{-34,-86},{-38,-86}, - {-38,-52},{-70,-52},{-70,98}}, color={255,127,0}), Text( - string="%second", - index=1, - extent={{6,3},{6,3}}, - horizontalAlignment=TextAlignment.Left)); - connect(dpDisSupFan.port_a, port_a) annotation (Line(points={{404,-46},{404,-72}, - {516,-72},{516,-74},{539,-74}}, color={0,127,255})); - connect(VOut1.port_a, dpDisSupFan.port_b) annotation (Line(points={{-68,-70},{ - -84,-70},{-84,-26},{376,-26},{376,0},{404,0},{404,-10}}, color={0,127, - 255})); - connect(dpDisSupFan.p_rel, dataBus.dpDuc) annotation (Line(points={{384.2,-28}, - {-70,-28},{-70,98}}, color={0,0,127}), Text( - string="%second", - index=1, - extent={{-6,3},{-6,3}}, - horizontalAlignment=TextAlignment.Right)); - connect(ducPreResReq.y, dataBus.uZonPreResReq) annotation (Line(points={{-42,-208}, - {-38,-208},{-38,-204},{-40,-204},{-40,-200},{-38,-200},{-38,-178},{-70, - -178},{-70,98}}, color={255,127,0}), Text( - string="%second", - index=1, - extent={{-6,3},{-6,3}}, - horizontalAlignment=TextAlignment.Right)); - connect(VOut1.port_b, TOut.port_a) - annotation (Line(points={{-48,-70},{-32,-70}}, color={0,127,255})); - connect(TOut.port_b, damOut.port_a) - annotation (Line(points={{-12,-70},{2,-70}}, color={0,127,255})); - connect(TSup.T, dataBus.TAirSup) annotation (Line(points={{286,-61},{136,-61}, - {136,38},{-70,38},{-70,98}}, color={0,0,127}), Text( - string="%second", - index=1, - extent={{-6,3},{-6,3}}, - horizontalAlignment=TextAlignment.Right)); - connect(dataBus.ySupFan, u1SupFan.u) annotation (Line( - points={{-70,98},{-70,50},{312,50}}, - color={255,204,51}, - thickness=0.5), Text( - string="%first", - index=-1, - extent={{-6,3},{-6,3}}, - horizontalAlignment=TextAlignment.Right)); - connect(u1SupFan.y, dataBus.u1SupFan) annotation (Line(points={{358,50},{366,50}, - {366,76},{-44,76},{-44,72},{-70,72},{-70,98}}, color={255,0,255}), - Text( - string="%second", - index=1, - extent={{-6,3},{-6,3}}, - horizontalAlignment=TextAlignment.Right)); - connect(sumDesPopBreZon.y, dataBus.VSumAdjPopBreZon_flow) annotation (Line( - points={{222,-150},{230,-150},{230,-6},{200,-6},{200,48},{-70,48},{-70,98}}, - color={0,0,127}), Text( - string="%second", - index=1, - extent={{-6,3},{-6,3}}, - horizontalAlignment=TextAlignment.Right)); - connect(sumDesAreBreZon.y, dataBus.VSumAdjAreBreZon_flow) annotation (Line( - points={{346,-150},{364,-150},{364,-26},{-70,-26},{-70,98}}, color={0,0, - 127}), Text( - string="%second", - index=1, - extent={{6,3},{6,3}}, - horizontalAlignment=TextAlignment.Left)); - connect(TOut.T, dataBus.TOut) annotation (Line(points={{-22,-59},{-22,-50},{-70, - -50},{-70,98}}, color={0,0,127}), Text( - string="%second", - index=1, - extent={{-3,6},{-3,6}}, - horizontalAlignment=TextAlignment.Right)); - connect(VOut1.V_flow, dataBus.VAirOut_flow) annotation (Line(points={{-58,-59}, - {-38,-59},{-38,98},{-70,98}}, color={0,0,127}), Text( - string="%second", - index=1, - extent={{6,3},{6,3}}, - horizontalAlignment=TextAlignment.Left)); - connect(VSumZonPri_flow.y, dataBus.VSumZonPri_flow) annotation (Line(points={{ - 466,-102},{200,-102},{200,98},{-70,98}}, color={0,0,127}), Text( - string="%second", - index=1, - extent={{-6,3},{-6,3}}, - horizontalAlignment=TextAlignment.Right)); - connect(uOutAirFra_max.y, dataBus.uOutAirFra_max) annotation (Line(points={{520, - -112},{226,-112},{226,98},{-70,98}}, color={0,0,127}), Text( - string="%second", - index=1, - extent={{-6,3},{-6,3}}, - horizontalAlignment=TextAlignment.Right)); - connect(maxSupResReq.y, dataBus.uZonTemResReq) annotation (Line(points={{-52,-258}, - {-44,-258},{-44,-224},{-70,-224},{-70,98}}, color={255,127,0}), Text( - string="%second", - index=1, - extent={{-6,3},{-6,3}}, - horizontalAlignment=TextAlignment.Right)); - annotation (Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-180}, - {540,100}}), graphics={Rectangle( - extent={{-98,102},{542,-138}}, - lineColor={28,108,200}, - fillColor={244,125,35}, - fillPattern=FillPattern.Solid)}), - Diagram(coordinateSystem( - preserveAspectRatio=false, extent={{-100,-180},{540,100}}))); -end AhuWithEconomizer; - partial model PartialAhu -replaceable package MediumA = Modelica.Media.Interfaces.PartialMedium -"Medium model" annotation (choicesAllMatching=true); - - constant Integer numZon(min=2)=2 "Total number of served VAV boxes"; - - parameter Modelica.Units.SI.Volume VRoo[numZon] "Room volume per zone"; - parameter Modelica.Units.SI.Area AFlo[numZon] "Floor area per zone"; - - final parameter Modelica.Units.SI.Area ATot=sum(AFlo) -"Total floor area for all zone"; - - constant Real conv=1.2/3600 "Conversion factor for nominal mass flow rate"; - - parameter Modelica.Units.SI.HeatFlowRate QHeaAHU_flow_nominal(min=0)= - mHeaAir_flow_nominal*Buildings.Utilities.Psychrometrics.Constants.cpAir*( - THeaAirSup_nominal - THeaAirMix_nominal) -"Nominal heating heat flow rate of air handler unit coil"; - - parameter Modelica.Units.SI.HeatFlowRate QCooAHU_flow_nominal(max=0) = 1.3* - mCooAir_flow_nominal*Buildings.Utilities.Psychrometrics.Constants.cpAir*( - TCooAirSup_nominal - TCooAirMix_nominal) -"Nominal total cooling heat flow rate of air handler unit coil (negative number)"; - - parameter Modelica.Units.SI.MassFlowRate mCooVAV_flow_nominal[numZon] -"Design mass flow rate per zone for cooling" -annotation (Dialog(group="Nominal mass flow rate")); - - parameter Modelica.Units.SI.MassFlowRate mHeaVAV_flow_nominal[numZon]=0.3* - mCooVAV_flow_nominal -"Design mass flow rate per zone for heating" -annotation (Dialog(group="Nominal mass flow rate")); - - parameter Modelica.Units.SI.MassFlowRate mAir_flow_nominal= - 0.01 -"Nominal mass flow rate for fan" -annotation (Dialog(group="Nominal mass flow rate")); - parameter Modelica.Units.SI.MassFlowRate mCooAir_flow_nominal=0.7*sum( - mCooVAV_flow_nominal) -"Nominal mass flow rate for fan" -annotation (Dialog(group="Nominal mass flow rate")); - parameter Modelica.Units.SI.MassFlowRate mHeaAir_flow_nominal=0.7*sum( - mHeaVAV_flow_nominal) -"Nominal mass flow rate for fan" -annotation (Dialog(group="Nominal mass flow rate")); - - parameter Modelica.Units.SI.MassFlowRate mHeaWat_flow_nominal= - QHeaAHU_flow_nominal/Buildings.Utilities.Psychrometrics.Constants.cpWatLiq/10 -"Nominal water mass flow rate for heating coil in AHU" -annotation (Dialog(group="Nominal mass flow rate")); - parameter Modelica.Units.SI.MassFlowRate mCooWat_flow_nominal= - QCooAHU_flow_nominal/Buildings.Utilities.Psychrometrics.Constants.cpWatLiq/(-6) -"Nominal water mass flow rate for cooling coil" -annotation (Dialog(group="Nominal mass flow rate")); - - parameter Real ratOAFlo_A(final unit="m3/(s.m2)") = 0.3e-3 -"Outdoor airflow rate required per unit area"; - parameter Real ratOAFlo_P=2.5e-3 -"Outdoor airflow rate required per person"; - parameter Real ratP_A=5e-2 -"Occupant density"; - parameter Real effZ(final unit="1") = 0.8 -"Zone air distribution effectiveness (limiting value)"; - parameter Real divP(final unit="1") = 0.7 -"Occupant diversity ratio"; - - parameter Modelica.Units.SI.VolumeFlowRate VZonOA_flow_nominal[numZon]= - ( - ratOAFlo_P*ratP_A + ratOAFlo_A)*AFlo/effZ -"Zone outdoor air flow rate of each VAV box"; - - parameter Modelica.Units.SI.VolumeFlowRate Vou_flow_nominal= - (divP*ratOAFlo_P* - ratP_A + ratOAFlo_A)*sum(AFlo) "System uncorrected outdoor air flow rate"; - parameter Real effVen(final unit="1") = if divP < 0.6 then -0.88 * divP + 0.22 else 0.75 -"System ventilation efficiency"; - parameter Modelica.Units.SI.VolumeFlowRate Vot_flow_nominal=Vou_flow_nominal/ - effVen "System design outdoor air flow rate"; - - parameter Modelica.Units.SI.Temperature THeaOn=293.15 -"Heating setpoint during on" -annotation (Dialog(group="Room temperature setpoints")); - parameter Modelica.Units.SI.Temperature THeaOff=285.15 -"Heating setpoint during off" -annotation (Dialog(group="Room temperature setpoints")); - parameter Modelica.Units.SI.Temperature TCooOn=297.15 -"Cooling setpoint during on" -annotation (Dialog(group="Room temperature setpoints")); - parameter Modelica.Units.SI.Temperature TCooOff=303.15 -"Cooling setpoint during off" -annotation (Dialog(group="Room temperature setpoints")); - parameter Modelica.Units.SI.PressureDifference dpBuiStaSet(min=0) = 12 -"Building static pressure"; - parameter Real yFanMin=0.1 "Minimum fan speed"; - - parameter Modelica.Units.SI.Temperature TCooAirMix_nominal(displayUnit="degC")= - 303.15 -"Mixed air temperature during cooling nominal conditions (used to size cooling coil)" -annotation (Dialog(group="Air handler unit nominal temperatures and humidity")); - parameter Modelica.Units.SI.Temperature TCooAirSup_nominal(displayUnit="degC")= - 285.15 -"Supply air temperature during cooling nominal conditions (used to size cooling coil)" -annotation (Dialog(group="Air handler unit nominal temperatures and humidity")); - parameter Modelica.Units.SI.MassFraction wCooAirMix_nominal=0.017 -"Humidity ratio of mixed air at a nominal conditions used to size cooling coil (in kg/kg dry total)" -annotation (Dialog(group="Air handler unit nominal temperatures and humidity")); - parameter Modelica.Units.SI.Temperature TCooWatInl_nominal(displayUnit="degC")= - 279.15 -"Cooling coil nominal inlet water temperature" -annotation (Dialog(group="Air handler unit nominal temperatures and humidity")); - - parameter Modelica.Units.SI.Temperature THeaAirMix_nominal(displayUnit="degC")= - 277.15 -"Mixed air temperature during heating nominal conditions (used to size heating coil)" -annotation (Dialog(group="Air handler unit nominal temperatures and humidity")); - parameter Modelica.Units.SI.Temperature THeaAirSup_nominal(displayUnit="degC")= - 285.15 -"Supply air temperature during heating nominal conditions (used to size heating coil)" -annotation (Dialog(group="Air handler unit nominal temperatures and humidity")); - parameter Modelica.Units.SI.Temperature THeaWatInl_nominal(displayUnit="degC") -"Reheat coil nominal inlet water temperature" -annotation (Dialog(group="Air handler unit nominal temperatures and humidity")); - - parameter Boolean allowFlowReversal=false -"= false to simplify equations, assuming, but not enforcing, no flow reversal" -annotation (Evaluate=true); - - Buildings.Fluid.Movers.Preconfigured.SpeedControlled_y fanSup( - redeclare package Medium = MediumA, - m_flow_nominal=mAir_flow_nominal, - dp_nominal=780 + 10 + dpBuiStaSet, - energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial) - "Supply air fan" -annotation (Placement(transformation(extent={{246,-82},{266,-62}}))); - Buildings.Fluid.Sensors.VolumeFlowRate senSupFlo(redeclare package Medium = - MediumA, m_flow_nominal=mAir_flow_nominal) -"Sensor for supply fan flow rate" -annotation (Placement(transformation(extent={{346,-82},{366,-62}}))); - Buildings.Fluid.Sensors.TemperatureTwoPort TSup( - redeclare package Medium = MediumA, - m_flow_nominal=mAir_flow_nominal, - allowFlowReversal=allowFlowReversal) -annotation (Placement(transformation(extent={{276,-82},{296,-62}}))); - Buildings.Fluid.Sensors.TemperatureTwoPort TMix( - redeclare package Medium = MediumA, - m_flow_nominal=mAir_flow_nominal, - allowFlowReversal=allowFlowReversal, - transferHeat=true) "Mixed air temperature sensor" -annotation (Placement(transformation(extent={{82,-82},{102,-62}}))); - Buildings.Fluid.Sensors.VolumeFlowRate VOut1(redeclare package Medium = - MediumA, m_flow_nominal=mAir_flow_nominal) -"Outside air volume flow rate" -annotation (Placement(transformation(extent={{-68,-80},{-48,-60}}))); - Buildings.Fluid.Actuators.Dampers.Exponential - damRet( - redeclare package Medium = MediumA, - m_flow_nominal=mAir_flow_nominal, - from_dp=false, - riseTime=15, - dpDamper_nominal=5, - dpFixed_nominal=5) - "Return air damper" annotation (Placement(transformation( - origin={52,-6}, - extent={{10,-10},{-10,10}}, - rotation=90))); - Buildings.Fluid.Actuators.Dampers.Exponential - damOut( - redeclare package Medium = MediumA, - m_flow_nominal=mAir_flow_nominal, - from_dp=false, - riseTime=15, - dpDamper_nominal=5, - dpFixed_nominal=5) - "Outdoor air damper" -annotation (Placement(transformation(extent={{2,-80},{22,-60}}))); - Buildings.Fluid.FixedResistances.PressureDrop - dpSupDuc( - m_flow_nominal=mAir_flow_nominal, - redeclare package Medium = MediumA, - allowFlowReversal=allowFlowReversal, - dp_nominal=200 + 200 + 100 + 40) - "Pressure drop for supply duct" -annotation (Placement(transformation(extent={{196,-82},{216,-62}}))); - Buildings.Fluid.FixedResistances.Junction - splRetOut( - redeclare package Medium = MediumA, - tau=15, - m_flow_nominal=mAir_flow_nominal*{1,1,1}, - energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, - dp_nominal(each displayUnit="Pa") = {0,0,0}, - portFlowDirection_1=if allowFlowReversal then Modelica.Fluid.Types.PortFlowDirection.Bidirectional - else Modelica.Fluid.Types.PortFlowDirection.Entering, - portFlowDirection_2=if allowFlowReversal then Modelica.Fluid.Types.PortFlowDirection.Bidirectional - else Modelica.Fluid.Types.PortFlowDirection.Leaving, - portFlowDirection_3=if allowFlowReversal then Modelica.Fluid.Types.PortFlowDirection.Bidirectional - else Modelica.Fluid.Types.PortFlowDirection.Entering, - linearized=true) -"Flow splitter" -annotation (Placement(transformation( - extent={{-10,10},{10,-10}}, - rotation=0, - origin={52,-70}))); - Buildings.Fluid.Actuators.Dampers.Exponential damExh( - from_dp=false, - riseTime=15, - dpFixed_nominal=5, - redeclare package Medium = MediumA, - m_flow_nominal=mAir_flow_nominal, - dpDamper_nominal=5) - "Exhaust air damper" -annotation (Placement(transformation(extent={{-16,-14},{-36,6}}))); - Buildings.Fluid.FixedResistances.PressureDrop dpRetDuc( - m_flow_nominal=mAir_flow_nominal, - redeclare package Medium = MediumA, - allowFlowReversal=allowFlowReversal, - dp_nominal=40) - "Pressure drop for return duct" -annotation (Placement(transformation(extent={{368,0},{348,20}}))); - Buildings.Fluid.Sensors.VolumeFlowRate senRetFlo(redeclare package Medium = - MediumA, m_flow_nominal=mAir_flow_nominal) -"Sensor for return fan flow rate" -annotation (Placement(transformation(extent={{234,0},{214,20}}))); - Buildings.Fluid.Sensors.TemperatureTwoPort TRet( - redeclare package Medium = MediumA, - m_flow_nominal=mAir_flow_nominal, - allowFlowReversal=allowFlowReversal) - "Return air temperature sensor" -annotation (Placement(transformation(extent={{138,0},{118,20}}))); - Buildings.Fluid.Movers.Preconfigured.SpeedControlled_y fanSup1( - redeclare package Medium = MediumA, - m_flow_nominal=mAir_flow_nominal, - dp_nominal=780 + 10 + dpBuiStaSet, - energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial) - "Supply air fan" -annotation (Placement(transformation(extent={{278,0},{258,20}}))); - Modelica.Fluid.Interfaces.FluidPort_b port_b(redeclare final package Medium = - MediumA) -"Fluid connector b (positive design flow direction is from port_a to port_b)" -annotation (Placement(transformation(extent={{556,-5},{524,25}}), - iconTransformation(extent={{552,11},{532,29}}))); - Modelica.Fluid.Interfaces.FluidPort_a port_a(redeclare final package Medium = - MediumA) -"Fluid connector a (positive design flow direction is from port_a to port_b)" -annotation (Placement(transformation(extent={{522,-90},{556,-58}}), - iconTransformation(extent={{532,-69},{552,-51}}))); - Modelica.Fluid.Interfaces.FluidPorts_b ports[2](redeclare each package Medium = - MediumA, each m_flow(max=if flowDirection == Modelica.Fluid.Types.PortFlowDirection.Leaving - then 0 else +Modelica.Constants.inf, min=if flowDirection == - Modelica.Fluid.Types.PortFlowDirection.Entering then 0 else -Modelica.Constants.inf)) -"Fluid ports" -annotation (Placement(transformation(extent={{-110,26},{-90,-54}}), - iconTransformation(extent={{-110,26},{-90,-54}}))); - Buildings.Fluid.Sensors.RelativePressure dpDisSupFan(redeclare package Medium = - MediumA) "Supply fan static discharge pressure" annotation (Placement( - transformation( - extent={{-18,22},{18,-22}}, - rotation=90, - origin={404,-28}))); - Buildings.Fluid.Sensors.TemperatureTwoPort TOut( -redeclare package Medium = MediumA, -m_flow_nominal=mAir_flow_nominal, -allowFlowReversal=allowFlowReversal, -transferHeat=true) "Mixed air temperature sensor" -annotation (Placement(transformation(extent={{-32,-80},{-12,-60}}))); - -protected - parameter Modelica.Fluid.Types.PortFlowDirection flowDirection=Modelica.Fluid.Types.PortFlowDirection.Bidirectional -"Allowed flow direction" annotation (Evaluate=true, Dialog(tab="Advanced")); -equation - connect( - TSup.port_a,fanSup. port_b) annotation (Line( - points={{276,-72},{266,-72}}, - color={0,127,255}, - smooth=Smooth.None, - thickness=0.5)); - connect( - TSup.port_b,senSupFlo. port_a) -annotation (Line(points={{296,-72},{346,-72}}, color={0,127,255})); - connect( - dpSupDuc.port_b,fanSup. port_a) -annotation (Line(points={{216,-72},{246,-72}}, color={0,127,255})); - connect( - damOut.port_b,splRetOut. port_1) -annotation (Line(points={{22,-70},{42,-70}}, color={0,127,255})); - connect( - splRetOut.port_2,TMix. port_a) -annotation (Line(points={{62,-70},{72,-70},{72,-72},{82,-72}}, - color={0,127,255})); - connect( - damRet.port_b,splRetOut. port_3) annotation (Line(points={{52,-16},{52, - -60}}, color={0,127,255})); -connect(dpSupDuc.port_a, TMix.port_b) annotation (Line(points={{196,-72},{102, - -72}}, color={0,127,255})); - connect( - senRetFlo.port_b,TRet. port_a) annotation (Line(points={{214,10},{138, - 10}}, color={0,127,255})); -connect(TRet.port_b, damRet.port_a) annotation (Line(points={{118,10},{52,10}, - {52,4}}, color={0,127,255})); -connect(TRet.port_b, damExh.port_a) annotation (Line(points={{118,10},{-6,10}, - {-6,-4},{-16,-4}}, color= - {0,127,255})); -connect(senRetFlo.port_a, fanSup1.port_b) - annotation (Line(points={{234,10},{258,10}}, color={0,127,255})); -connect(fanSup1.port_a, dpRetDuc.port_b) - annotation (Line(points={{278,10},{348,10}}, color={0,127,255})); - connect( - senSupFlo.port_b, port_a) annotation (Line(points={{366,-72},{516,-72}, - {516,-74},{539,-74}}, color={0,127,255})); - connect( - dpRetDuc.port_a, port_b) -annotation (Line(points={{368,10},{540,10}}, color={0,127,255})); - connect( - damExh.port_b, ports[1]) annotation (Line(points={{-36,-4},{-84,-4},{-84, - 6},{-100,6}}, color={0,127,255})); - connect( - VOut1.port_a, ports[2]) annotation (Line(points={{-68,-70},{-84,-70},{ - -84,-34},{-100,-34}}, color={0,127,255})); - connect( - dpDisSupFan.port_a, port_a) annotation (Line(points={{404,-46},{404,-72}, - {516,-72},{516,-74},{539,-74}}, color={0,127,255})); - connect( - VOut1.port_a, dpDisSupFan.port_b) annotation (Line(points={{-68,-70},{ - -84,-70},{-84,-26},{376,-26},{376,0},{404,0},{404,-10}}, color={0,127, - 255})); - connect( - VOut1.port_b, TOut.port_a) -annotation (Line(points={{-48,-70},{-32,-70}}, color={0,127,255})); - connect( - TOut.port_b, damOut.port_a) -annotation (Line(points={{-12,-70},{2,-70}}, color={0,127,255})); -annotation (Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-180}, - {540,100}}), graphics={Rectangle( - extent={{-98,102},{542,-138}}, - lineColor={28,108,200}, - fillColor={244,125,35}, - fillPattern=FillPattern.Solid)}), - Diagram(coordinateSystem( - preserveAspectRatio=false, extent={{-100,-180},{540,100}}))); -end PartialAhu; -partial model PartialPump - replaceable package Medium = Modelica.Media.Interfaces.PartialMedium - "Medium model for air" annotation (choicesAllMatching=true); - - parameter Modelica.Units.SI.MassFlowRate m_flow_nominal - "Nominal mass flow rate of radiator loop"; - parameter Modelica.Units.SI.PressureDifference dp_nominal - "Pressure difference of loop"; - - Buildings.Fluid.Movers.Preconfigured.SpeedControlled_y pumRad( - redeclare package Medium = Medium, - m_flow_nominal=m_flow_nominal, - dp_nominal=dp_nominal, - energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState) - "Pump that serves the radiators" annotation (Placement(transformation( - extent={{-10,-10},{10,10}}, - rotation=0, - origin={-4,0}))); - Buildings.Fluid.Sensors.RelativePressure dpSen(redeclare package Medium = - Medium) - annotation (Placement(transformation(extent={{-10,-10},{10,10}}, - rotation=180, - origin={-6,32}))); - Buildings.Fluid.Sensors.TemperatureTwoPort temSup(redeclare package Medium = - Medium, m_flow_nominal=m_flow_nominal) - annotation (Placement(transformation(extent={{-10,-10},{10,10}}, - rotation=0, - origin={42,0}))); - Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter - gain(k=1/dp_nominal) - "Gain used to normalize pressure measurement signal" - annotation (Placement(transformation(extent={{10,-10},{-10,10}}, - rotation=-90, - origin={-6,76}))); - extends Buildings.Fluid.Interfaces.PartialTwoPort; -equation - connect(pumRad.port_b,dpSen. port_a) - annotation (Line( - points={{6,0},{14,0},{14,32},{4,32}}, - color={0,127,255}, - smooth=Smooth.None)); - connect(dpSen.port_b,pumRad. port_a) - annotation (Line( - points={{-16,32},{-22,32},{-22,0},{-14,0}}, - color={0,127,255}, - smooth=Smooth.None)); - connect(pumRad.port_b,temSup. port_a) annotation (Line( - points={{6,0},{32,0}}, - color={0,127,255}, - smooth=Smooth.None)); - connect(gain.u,dpSen. p_rel) annotation (Line( - points={{-6,64},{-6,41}}, - color={0,0,127}, - smooth=Smooth.None)); - connect(port_a, pumRad.port_a) - annotation (Line(points={{-100,0},{-14,0}}, color={0,127,255})); - connect(temSup.port_b, port_b) - annotation (Line(points={{52,0},{100,0}}, color={0,127,255})); - annotation (Icon(coordinateSystem(preserveAspectRatio=false), graphics={ - Rectangle( - extent={{-100,16},{100,-16}}, - lineColor={0,0,0}, - fillColor={0,127,255}, - fillPattern=FillPattern.HorizontalCylinder), - Ellipse( - extent={{-58,58},{58,-58}}, - lineColor={0,0,0}, - fillPattern=FillPattern.Sphere, - fillColor={0,100,199}), - Polygon( - points={{0,50},{0,-50},{54,0},{0,50}}, - lineColor={0,0,0}, - pattern=LinePattern.None, - fillPattern=FillPattern.HorizontalCylinder, - fillColor={255,255,255}), - Ellipse( - extent={{4,16},{36,-16}}, - lineColor={0,0,0}, - fillPattern=FillPattern.Sphere, - visible=energyDynamics <> Modelica.Fluid.Types.Dynamics.SteadyState, - fillColor={0,100,199})}), Diagram(coordinateSystem( - preserveAspectRatio=false))); -end PartialPump; - - - partial model PartialVAVBox - "Supply box of a VAV system with a hot water reheat coil" - extends - Modelica.Blocks.Icons.Block; - replaceable package MediumA = Modelica.Media.Interfaces.PartialMedium - "Medium model for air" annotation (choicesAllMatching=true); - - - parameter Boolean allowFlowReversal=true -"= false to simplify equations, assuming, but not enforcing, no flow reversal"; - parameter Modelica.Units.SI.MassFlowRate mCooAir_flow_nominal -"Nominal air mass flow rate from cooling sizing calculations"; - parameter Modelica.Units.SI.MassFlowRate mHeaAir_flow_nominal -"Nominal air mass flow rate from heating sizing calculations"; - final parameter Modelica.Units.SI.MassFlowRate mHeaWat_flow_nominal= - QHea_flow_nominal/(cpWatLiq*(THeaWatInl_nominal - THeaWatOut_nominal)) -"Nominal mass flow rate of hot water to reheat coil"; - parameter Modelica.Units.SI.Volume VRoo "Room volume"; - parameter Modelica.Units.SI.Temperature THeaWatInl_nominal(start=55 + 273.15, - displayUnit="degC") "Reheat coil nominal inlet water temperature"; - parameter Modelica.Units.SI.Temperature THeaWatOut_nominal(start= - THeaWatInl_nominal - 10, displayUnit="degC") -"Reheat coil nominal outlet water temperature"; - parameter Modelica.Units.SI.Temperature THeaAirInl_nominal(start=12 + 273.15, - displayUnit="degC") -"Inlet air nominal temperature into VAV box during heating"; - parameter Modelica.Units.SI.Temperature THeaAirDis_nominal(start=28 + 273.15, - displayUnit="degC") -"Discharge air temperature from VAV box during heating"; - parameter Modelica.Units.SI.HeatFlowRate QHea_flow_nominal= - mHeaAir_flow_nominal * cpAir * (THeaAirDis_nominal-THeaAirInl_nominal) -"Nominal heating heat flow rate"; - Modelica.Fluid.Interfaces.FluidPort_a port_aAir( -redeclare package Medium=MediumA) -"Fluid connector a1 (positive design flow direction is from port_a1 to port_b1)" -annotation (Placement(transformation(extent={{-10,-110},{10,-90}}), - iconTransformation(extent={{-10,-110},{10,-90}}))); - Modelica.Fluid.Interfaces.FluidPort_a port_bAir( -redeclare package Medium=MediumA) -"Fluid connector b (positive design flow direction is from port_a1 to port_b1)" -annotation (Placement(transformation(extent={{-10,90},{10,110}}), - iconTransformation(extent={{-10,90},{10,110}}))); - Buildings.Fluid.Actuators.Dampers.Exponential vav( -redeclare package Medium = MediumA, -m_flow_nominal=mCooAir_flow_nominal, -dpDamper_nominal=20, -allowFlowReversal=allowFlowReversal, -dpFixed_nominal=130) "VAV box for room" annotation (Placement( - transformation( - extent={{-10,-10},{10,10}}, - rotation=90, - origin={0,10}))); - - Buildings.Fluid.Sensors.TemperatureTwoPort senTem( -redeclare package Medium = MediumA, -initType=Modelica.Blocks.Types.Init.InitialState, -m_flow_nominal=mCooAir_flow_nominal, -allowFlowReversal=allowFlowReversal) "Supply air temperature sensor" -annotation (Placement(transformation( - extent={{-10,10},{10,-10}}, - rotation=90, - origin={0,40}))); - Buildings.Fluid.Sensors.VolumeFlowRate senVolFlo( -redeclare package Medium = MediumA, -initType=Modelica.Blocks.Types.Init.InitialState, -m_flow_nominal=mCooAir_flow_nominal, -allowFlowReversal=allowFlowReversal) -"Supply air volumetric flow rate sensor" annotation (Placement( - transformation( - extent={{-10,10},{10,-10}}, - rotation=90, - origin={0,80}))); -protected - constant Modelica.Units.SI.SpecificHeatCapacity cpAir=Buildings.Utilities.Psychrometrics.Constants.cpAir -"Air specific heat capacity"; - constant Modelica.Units.SI.SpecificHeatCapacity cpWatLiq=Buildings.Utilities.Psychrometrics.Constants.cpWatLiq -"Water specific heat capacity"; -equation - connect( - vav.port_b, senTem.port_a) annotation (Line(points={{6.66134e-16,20},{ - 0,20},{0,30},{-4.44089e-16,30}}, color={0,127,255})); - connect( - senTem.port_b, senVolFlo.port_a) -annotation (Line(points={{0,50},{0,70},{-6.66134e-16,70}}, - color={0,127,255})); - connect( - senVolFlo.port_b, port_bAir) -annotation (Line(points={{4.44089e-16,90},{0,90},{0,100}}, - color={0,127,255})); - connect( - vav.port_a, port_aAir) -annotation (Line(points={{-5.55112e-16,0},{0,-100}}, color={0,127,255})); - annotation (Icon( -graphics={ - Rectangle( - extent={{-108.07,-16.1286},{93.93,-20.1286}}, - lineColor={0,0,0}, - fillPattern=FillPattern.HorizontalCylinder, - fillColor={0,127,255}, - origin={-18.1286,6.07}, - rotation=90), - Rectangle( - extent={{100.8,-22},{128.8,-44}}, - lineColor={0,0,0}, - fillPattern=FillPattern.HorizontalCylinder, - fillColor={192,192,192}, - origin={-32,-76.8}, - rotation=90), - Rectangle( - extent={{102.2,-11.6667},{130.2,-25.6667}}, - lineColor={0,0,0}, - fillPattern=FillPattern.HorizontalCylinder, - fillColor={0,127,255}, - origin={-17.6667,-78.2}, - rotation=90), - Polygon( - points={{-12,32},{16,48},{16,46},{-12,30},{-12,32}}, - pattern=LinePattern.None, - smooth=Smooth.None, - fillColor={0,0,0}, - fillPattern=FillPattern.Solid, - lineColor={0,0,0}), - Line(points={{-100,80},{-38,80},{-38,38},{-10,38}}, color={255,255,0}, - thickness=1)})); -end PartialVAVBox; - model PumpSystem_002 -extends house_yaml.Common.Fluid.Ventilation.PartialPump; -Controls.BaseClasses.DataBus dataBus - annotation (Placement(transformation( - extent={{-120,-18},{-80,22}}), iconTransformation(extent={{-120,62},{-78,98}}))); -equation -connect(dataBus.ySystem_002, pumRad.y); -connect(dataBus.y_gainSystem_002, gain.y); -connect(dataBus.TControl_002, temSup.T); - end PumpSystem_002; - - - end Ventilation; - end Fluid; - - package HeatTransfer - package IdealHeatingSystem - model IdealHeatEmission - parameter Real frad=0.3 "radiative fraction"; - parameter Real power=2000 "heating power"; - Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a heatPortCon - "Heat port for convective heat transfer with room air temperature" - annotation (Placement(transformation(extent={{-30,62},{-10,82}}))); - Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a heatPortRad - "Heat port for radiative heat transfer with room radiation temperature" - annotation (Placement(transformation(extent={{10,62},{30,82}}))); - Modelica.Blocks.Interfaces.RealInput y - annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); - Modelica.Blocks.Math.Gain HeatingPower(k=power) - annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); - Modelica.Blocks.Math.Gain convectiveGain(k=1 - frad) - annotation (Placement(transformation(extent={{2,-60},{22,-40}}))); - Modelica.Blocks.Math.Gain radiativeGain(k=frad) - annotation (Placement(transformation(extent={{2,-90},{22,-70}}))); - Modelica.Blocks.Nonlinear.Limiter limiter(uMax=1, uMin=0) - annotation (Placement(transformation(extent={{-86,-10},{-66,10}}))); - protected - Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow preSumCon(final - alpha=0) - "Heat input into radiator from convective heat transfer" - annotation (Placement(transformation(extent={{52,-60},{72,-40}}))); - Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow preSumRad(final - alpha=0) - "Heat input into radiator from radiative heat transfer" - annotation (Placement(transformation(extent={{52,-90},{72,-70}}))); - equation - - connect(preSumCon.port,heatPortCon) annotation (Line( - points={{72,-50},{80,-50},{80,40},{-20,40},{-20,72}}, - color={191,0,0})); - connect(preSumRad.port,heatPortRad) annotation (Line( - points={{72,-80},{86,-80},{86,50},{20,50},{20,72}}, - color={191,0,0})); - connect(preSumCon.Q_flow, convectiveGain.y) - annotation (Line(points={{52,-50},{23,-50}}, color={0,0,127})); - connect(radiativeGain.y, preSumRad.Q_flow) - annotation (Line(points={{23,-80},{52,-80}}, color={0,0,127})); - connect(HeatingPower.y, convectiveGain.u) annotation (Line(points={{-19, - 0},{-6,0},{-6,-50},{0,-50}}, color={0,0,127})); - connect(HeatingPower.y, radiativeGain.u) annotation (Line(points={{-19, - 0},{-6,0},{-6,-80},{0,-80}}, color={0,0,127})); - connect(y, limiter.u) - annotation (Line(points={{-120,0},{-88,0}}, color={0,0,127})); - connect(limiter.y, HeatingPower.u) - annotation (Line(points={{-65,0},{-42,0}}, color={0,0,127})); - annotation (Icon(graphics={ - Ellipse( - extent={{-20,20},{20,-22}}, - fillColor={127,0,0}, - fillPattern=FillPattern.Solid, - pattern=LinePattern.None), - Ellipse( - extent={{-20,20},{20,-22}}, - fillColor={127,0,0}, - fillPattern=FillPattern.Solid, - pattern=LinePattern.None), - Rectangle( - extent={{-80,58},{80,-62}}, - lineColor={0,0,0}, - fillColor={127,0,0}, - fillPattern=FillPattern.Solid), - Line( - points={{-66,28},{66,28}}), - Line( - points={{-66,0},{66,0}}), - Line( - points={{-66,-32},{66,-32}}), - Line( - points={{-66,58},{-66,-62}}), - Line( - points={{66,58},{66,-62}})})); - end IdealHeatEmission; - end IdealHeatingSystem; - end HeatTransfer; - annotation (uses(Buildings(version = "11.0.0"), Modelica(version = "4.0.0"), - IDEAS(version="3.0.0")), - Icon(graphics={ Rectangle(lineColor = {200, 200, 200}, fillColor = {248, 248, 248}, - fillPattern = FillPattern.HorizontalCylinder, extent = {{-100, -100}, {100, 100}}, radius = 25), Rectangle(lineColor = {128, 128, 128}, extent = {{-100, -100}, {100, 100}}, radius = 25)})); -end Common; - -model building - parameter Buildings.HeatTransfer.Data.OpaqueConstructions.Generic - construction_001( - final nLay=3, - absIR_a=0.9, - absIR_b=0.9, - absSol_a=0.6, - absSol_b=0.6, - material={Buildings.HeatTransfer.Data.Solids.Generic( - x=0.1, - k=0.035, - c=1000.0, - d=2000.0),Buildings.HeatTransfer.Data.Solids.Generic( - x=0.1, - k=0.035, - c=1000.0, - d=2000.0),Buildings.HeatTransfer.Data.Solids.Generic( - x=0.1, - k=0.035, - c=1000.0, - d=2000.0) }, - roughness_a=Buildings.HeatTransfer.Types.SurfaceRoughness.Rough) - annotation (Placement(transformation(extent={{20,84},{34,98}}))); parameter Buildings.HeatTransfer.Data.OpaqueConstructions.Generic - internal_wall( - final nLay=1, - absIR_a=0.9, - absIR_b=0.9, - absSol_a=0.6, - absSol_b=0.6, - material={Buildings.HeatTransfer.Data.Solids.Generic( - x=0.2, - k=0.89, - c=790.0, - d=1920.0) }, - roughness_a=Buildings.HeatTransfer.Types.SurfaceRoughness.Rough) - annotation (Placement(transformation(extent={{20,84},{34,98}}))); - - - -package Medium = Buildings.Media.Air(extraPropertiesNames={"CO2"}) "Medium model"; -package MediumW = Buildings.Media.Water "Medium model"; -parameter Integer nRoo = 2 "Number of rooms"; - parameter Modelica.Units.SI.Volume VRoo=4*6*3 "Volume of one room"; - parameter Modelica.Units.SI.Power Q_flow_nominal=2200 - "Nominal power of heating plant"; - // Due to the night setback, in which the radiator do not provide heat input into the room, - // we scale the design power of the radiator loop - parameter Real scaFacRad = 1.5 - "Scaling factor to scale the power (and mass flow rate) of the radiator loop"; - parameter Modelica.Units.SI.Temperature TSup_nominal=273.15 + 50 + 5 - "Nominal supply temperature for radiators"; - parameter Modelica.Units.SI.Temperature TRet_nominal=273.15 + 40 + 5 - "Nominal return temperature for radiators"; - parameter Modelica.Units.SI.Temperature dTRad_nominal=TSup_nominal - - TRet_nominal "Nominal temperature difference for radiator loop"; - parameter Modelica.Units.SI.Temperature dTBoi_nominal=20 - "Nominal temperature difference for boiler loop"; - parameter Modelica.Units.SI.MassFlowRate mRad_flow_nominal=scaFacRad* - Q_flow_nominal/dTRad_nominal/4200 - "Nominal mass flow rate of radiator loop"; - parameter Modelica.Units.SI.MassFlowRate mBoi_flow_nominal=scaFacRad* - Q_flow_nominal/dTBoi_nominal/4200 "Nominal mass flow rate of boiler loop"; - parameter Modelica.Units.SI.PressureDifference dpPip_nominal=10000 - "Pressure difference of pipe (without valve)"; - parameter Modelica.Units.SI.PressureDifference dpVal_nominal=6000 - "Pressure difference of valve"; - parameter Modelica.Units.SI.PressureDifference dpRoo_nominal=6000 - "Pressure difference of flow leg that serves a room"; - parameter Modelica.Units.SI.PressureDifference dpThrWayVal_nominal=6000 - "Pressure difference of three-way valve"; - parameter Modelica.Units.SI.PressureDifference dp_nominal=dpPip_nominal + - dpVal_nominal + dpRoo_nominal + dpThrWayVal_nominal - "Pressure difference of loop"; - - - Buildings.ThermalZones.Detailed.MixedAir schema_space_001( - redeclare package Medium = Medium, - mSenFac=1, - AFlo=100.0, - hRoo=2.5, - linearizeRadiation=true, - m_flow_nominal=0.01, - T_start=294.15 -,nPorts = 3, nConExt=3, - datConExt( - layers={ construction_001, construction_001, construction_001 }, - A={ 100.0, 100.0, 200.0 }, - til={Buildings.Types.Tilt.Wall,Buildings.Types.Tilt.Wall,Buildings.Types.Tilt.Wall}, - azi={ 180.0, 180.0, 180.0 }), - nSurBou=2, - surBou( - A={ 10.0, 10.0 }, - til={Buildings.Types.Tilt.Wall,Buildings.Types.Tilt.Wall}), - nConBou=0, nConExtWin=0, nConPar=0, - energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial) annotation ( - Placement(transformation(origin = { 0, 0 }, - extent = {{-20, -20}, {20, 20}} -))); - Buildings.Fluid.HeatExchangers.Radiators. - RadiatorEN442_2 system_007( - nEle=1, - fraRad=0.3, - Q_flow_nominal=2000, - T_a_nominal=363.15, - T_b_nominal=353.15, - TAir_nominal=293.15, - TRad_nominal=293.15, - n=1.9, - deltaM=0.01, - from_dp=false, - dp_nominal=0, - linearized=false, - VWat=0.116, - mDry=52.6 -, - redeclare package Medium = MediumW, - energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial) "Radiator" annotation ( - Placement(transformation(origin = { 0, -75 }, - extent = {{-10, -10}, {10, 10}} -))); - Buildings.Fluid.Actuators.Valves.TwoWayEqualPercentage - system_008( - R=7.0, - delta0=0.01, - dpFixed_nominal=6000, - l=0.0001, - from_dp=true, - linearized=false, - deltaM=0.02, - m_flow_nominal=0.01, - dpValve_nominal=6000 -, - redeclare package Medium = MediumW - - ) "Radiator valve" annotation ( - Placement(transformation(origin = { 30, -75 }, - extent = {{-10, -10}, {10, 10}} -))); - house_yaml.Common.Controls.ventilation.EmissionControlControl_007 - control_007 annotation ( - Placement(transformation(origin = { 40.94379200966132, -191.9280233214194 }, - extent = {{-10, -10}, {10, 10}} -))); - house_yaml.Common.Controls.ventilation.OccupancyOccupancy_1 - occupancy_1( occupancy=3600*{7, 19}, - gain=[35; 70; 30], - k=1/6/4 -) annotation ( - Placement(transformation(origin = { -50, 0 }, - extent = {{-10, -10}, {10, 10}} -))); - Buildings.ThermalZones.Detailed.MixedAir schema_space_002( - redeclare package Medium = Medium, - mSenFac=1, - AFlo=100.0, - hRoo=2.5, - linearizeRadiation=true, - m_flow_nominal=0.01, - T_start=294.15 -,nPorts = 3, nConExt=3, - datConExt( - layers={ construction_001, construction_001, construction_001 }, - A={ 100.0, 100.0, 200.0 }, - til={Buildings.Types.Tilt.Wall,Buildings.Types.Tilt.Wall,Buildings.Types.Tilt.Wall}, - azi={ 180.0, 180.0, 180.0 }), - nSurBou=2, - surBou( - A={ 10.0, 10.0 }, - til={Buildings.Types.Tilt.Wall,Buildings.Types.Tilt.Wall}), - nConBou=0, nConExtWin=0, nConPar=0, - energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial) annotation ( - Placement(transformation(origin = { 250, 150 }, - extent = {{-20, -20}, {20, 20}} -))); - Buildings.Fluid.HeatExchangers.Radiators. - RadiatorEN442_2 system_009( - nEle=1, - fraRad=0.3, - Q_flow_nominal=2000, - T_a_nominal=363.15, - T_b_nominal=353.15, - TAir_nominal=293.15, - TRad_nominal=293.15, - n=1.9, - deltaM=0.01, - from_dp=false, - dp_nominal=0, - linearized=false, - VWat=0.116, - mDry=52.6 -, - redeclare package Medium = MediumW, - energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial) "Radiator" annotation ( - Placement(transformation(origin = { 250, 75 }, - extent = {{-10, -10}, {10, 10}} -))); - Buildings.Fluid.Actuators.Valves.TwoWayEqualPercentage - system_010( - R=7.0, - delta0=0.01, - dpFixed_nominal=6000, - l=0.0001, - from_dp=true, - linearized=false, - deltaM=0.02, - m_flow_nominal=0.01, - dpValve_nominal=6000 -, - redeclare package Medium = MediumW - - ) "Radiator valve" annotation ( - Placement(transformation(origin = { 280, 75 }, - extent = {{-10, -10}, {10, 10}} -))); - house_yaml.Common.Controls.ventilation.EmissionControlControl_006 - control_006 annotation ( - Placement(transformation(origin = { -128.8618891479775, -120.25668203575391 }, - extent = {{-10, -10}, {10, 10}} -))); - house_yaml.Common.Controls.ventilation.OccupancyOccupancy_2 - occupancy_2( occupancy=3600*{7, 19}, - gain=[35; 70; 30], - k=1/6/4 -) annotation ( - Placement(transformation(origin = { 200, 150 }, - extent = {{-10, -10}, {10, 10}} -))); - Buildings.ThermalZones.Detailed.MixedAir schema_space_003( - redeclare package Medium = Medium, - mSenFac=1, - AFlo=100.0, - hRoo=2.5, - linearizeRadiation=true, - m_flow_nominal=0.01, - T_start=294.15 -,nPorts = 3, nConExt=3, - datConExt( - layers={ construction_001, construction_001, construction_001 }, - A={ 100.0, 100.0, 200.0 }, - til={Buildings.Types.Tilt.Wall,Buildings.Types.Tilt.Wall,Buildings.Types.Tilt.Wall}, - azi={ 180.0, 180.0, 180.0 }), - nSurBou=2, - surBou( - A={ 10.0, 10.0 }, - til={Buildings.Types.Tilt.Wall,Buildings.Types.Tilt.Wall}), - nConBou=0, nConExtWin=0, nConPar=0, - energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial) annotation ( - Placement(transformation(origin = { 500, 150 }, - extent = {{-20, -20}, {20, 20}} -))); - Buildings.Fluid.HeatExchangers.Radiators. - RadiatorEN442_2 system_011( - nEle=1, - fraRad=0.3, - Q_flow_nominal=2000, - T_a_nominal=363.15, - T_b_nominal=353.15, - TAir_nominal=293.15, - TRad_nominal=293.15, - n=1.9, - deltaM=0.01, - from_dp=false, - dp_nominal=0, - linearized=false, - VWat=0.116, - mDry=52.6 -, - redeclare package Medium = MediumW, - energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial) "Radiator" annotation ( - Placement(transformation(origin = { 500, 75 }, - extent = {{-10, -10}, {10, 10}} -))); - Buildings.Fluid.Actuators.Valves.TwoWayEqualPercentage - system_012( - R=7.0, - delta0=0.01, - dpFixed_nominal=6000, - l=0.0001, - from_dp=true, - linearized=false, - deltaM=0.02, - m_flow_nominal=0.01, - dpValve_nominal=6000 -, - redeclare package Medium = MediumW - - ) "Radiator valve" annotation ( - Placement(transformation(origin = { 530, 75 }, - extent = {{-10, -10}, {10, 10}} -))); - house_yaml.Common.Controls.ventilation.EmissionControlControl_005 - control_005 annotation ( - Placement(transformation(origin = { 149.26594214819474, -144.0171506390989 }, - extent = {{-10, -10}, {10, 10}} -))); - house_yaml.Common.Controls.ventilation.OccupancyOccupancy_3 - occupancy_3( occupancy=3600*{7, 19}, - gain=[35; 70; 30], - k=1/6/4 -) annotation ( - Placement(transformation(origin = { 450, 150 }, - extent = {{-10, -10}, {10, 10}} -))); - Buildings.HeatTransfer.Conduction.MultiLayer - internal_schema_space_001_schema_space_002(A = - 10, layers = - internal_wall, stateAtSurface_a = true, stateAtSurface_b = true) - "Partition wall between the two - rooms" annotation ( - Placement(transformation(origin = { 125.0, 0 }, - extent = {{-10, -10}, {10, 10}} -))); - Buildings.HeatTransfer.Conduction.MultiLayer - internal_schema_space_001_schema_space_003(A = - 10, layers = - internal_wall, stateAtSurface_a = true, stateAtSurface_b = true) - "Partition wall between the two - rooms" annotation ( - Placement(transformation(origin = { 250.0, 0 }, - extent = {{-10, -10}, {10, 10}} -))); - Buildings.HeatTransfer.Conduction.MultiLayer - internal_schema_space_002_schema_space_003(A = - 10, layers = - internal_wall, stateAtSurface_a = true, stateAtSurface_b = true) - "Partition wall between the two - rooms" annotation ( - Placement(transformation(origin = { 375.0, 150 }, - extent = {{-10, -10}, {10, 10}} -))); - Buildings.BoundaryConditions.WeatherData.ReaderTMY3 - weather(filNam=Modelica.Utilities.Files.loadResource - ("modelica://Buildings/Resources/weatherdata/USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.mos")) - annotation ( - Placement(transformation(origin = { -100, 200 }, - extent = {{-10, -10}, {10, 10}} -))); - house_yaml.Common. - Fluid.Ventilation.PumpSystem_002 - system_002( - m_flow_nominal=0.008, - dp_nominal=10000 -, - redeclare package Medium = MediumW - - ) annotation ( - Placement(transformation(origin = { -39.70396230424323, -168.4720893482176 }, - extent = {{-10, -10}, {10, 10}} -))); - house_yaml.Common.Controls.ventilation.CollectorControlControl_002 - control_002 annotation ( - Placement(transformation(origin = { 69.99518355619206, -171.70371848552955 }, - extent = {{-10, -10}, {10, 10}} -))); - Buildings.Fluid.Actuators.Valves.ThreeWayEqualPercentageLinear - system_004( - redeclare package Medium = MediumW, - use_inputFilter=false, - R=50, - delta0=0.01, - dpFixed_nominal={100,0}, - fraK=0.7, - l={0.01,0.01}, - deltaM=0.02, - linearized={false, false}, - m_flow_nominal=0.0078, - dpValve_nominal=6000 -, - energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState) "Three-wayvalve" annotation ( - Placement(transformation(origin = { 30, -275 }, - extent = {{-10, -10}, {10, 10}} -))); - house_yaml.Common.Controls.ventilation. - ThreeWayValveControlControl_003 - control_003 annotation ( - Placement(transformation(origin = { -20, -275 }, - extent = {{-10, -10}, {10, 10}} -))); - Buildings.Fluid.Actuators.Valves.ThreeWayEqualPercentageLinear - system_006( - redeclare package Medium = MediumW, - use_inputFilter=false, - R=50, - delta0=0.01, - dpFixed_nominal={100,0}, - fraK=0.7, - l={0.01,0.01}, - deltaM=0.02, - linearized={false, false}, - m_flow_nominal=0.0078, - dpValve_nominal=6000 -, - energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState) "Three-wayvalve" annotation ( - Placement(transformation(origin = { 530, -125 }, - extent = {{-10, -10}, {10, 10}} -))); - house_yaml.Common.Controls.ventilation. - ThreeWayValveControlControl_004 - control_004 annotation ( - Placement(transformation(origin = { 480, -125 }, - extent = {{-10, -10}, {10, 10}} -))); - house_yaml.Common.Fluid.Boilers. -BoilerWithStorageSystem_001 system_001( - a={0.9}, - effCur=Buildings.Fluid.Types.EfficiencyCurves.Constant, - T_nominal=353.15, - fue=Buildings.Fluid.Data.Fuels.HeatingOilLowerHeatingValue(), - Q_flow_nominal=2000, - dp_nominal=5000, - linearizeFlowResistance=false, - deltaM=0.1, - show_T=false, - VTan=0.2, - hTan=2, - nSeg=4, - dIns=0.002, - dp=(3000 + 2000)*{2,1}, - nominal_mass_flow_rate_boiler=0.03571428571428571, - nominal_mass_flow_radiator_loop=0.07142857142857142, - V_flow=0.03571428571428571/1000*{0.5,1} -, -redeclare package MediumW = MediumW) "Boiler" annotation ( - Placement(transformation(origin = { -71.34067271596895, -182.8707008188481 }, - extent = {{-10, -10}, {10, 10}} -))); - house_yaml.Common.Controls.ventilation.BoilerControlControl_001 - control_001( TSup_nominal=353.15, - threshold_outdoor_air_cutoff=288.15, - threshold_to_switch_off_boiler=288.15 -) annotation ( - Placement(transformation(origin = { 142.07436993497487, 111.31779804961617 }, - extent = {{-10, -10}, {10, 10}} -))); - Buildings.Fluid.FixedResistances.Junction system_003 ( - m_flow_nominal=0.008*{1, -1, -1}, - dp_nominal={10000,-1,-1}, - deltaM=0.3, - linearized=false -, - redeclare package Medium = MediumW, - energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState) - "Flow splitter" annotation ( - Placement(transformation(origin = { 130, -175 }, - extent = {{-10, -10}, {10, 10}} -))); - Buildings.Fluid.Sensors.TemperatureTwoPort system_013( - redeclare package Medium = MediumW, - m_flow_nominal=mRad_flow_nominal) "Radiator" annotation ( - Placement(transformation(origin = { 150, -25 }, - extent = {{-10, -10}, {10, 10}} -))); - Buildings.Fluid.FixedResistances.Junction system_005 ( - m_flow_nominal=0.008*{1, -1, -1}, - dp_nominal={10000,-1,-1}, - deltaM=0.3, - linearized=false -, - redeclare package Medium = MediumW, - energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState) - "Flow splitter" annotation ( - Placement(transformation(origin = { 630, -25 }, - extent = {{-10, -10}, {10, 10}} -))); - Buildings.Fluid.Sensors.TemperatureTwoPort system_014( - redeclare package Medium = MediumW, - m_flow_nominal=mRad_flow_nominal) "Radiator" annotation ( - Placement(transformation(origin = { 400, -25 }, - extent = {{-10, -10}, {10, 10}} -))); - house_yaml.Common.Controls.ventilation.DataServer - data_bus (redeclare package - Medium = Medium) annotation ( - Placement(transformation(origin = { 192.3412392205387, -51.85447150145035 }, - extent = {{-10, -10}, {10, 10}} -))); - - -equation connect(schema_space_001.heaPorAir,system_007.heatPortCon) -annotation (Line( -points={{ 0.0, 0.0 } ,{ 0.0, 0.0 } ,{ 0.0, -75.0 } ,{ 0.0, -75.0 } }, -color={255,204,51}, -thickness=0.5, -smooth=Smooth.None)); connect(schema_space_001.heaPorRad,system_007.heatPortRad) -annotation (Line( -points={{ 0.0, 0.0 } ,{ 0.0, 0.0 } ,{ 0.0, -75.0 } ,{ 0.0, -75.0 } }, -color={255,204,51}, -thickness=0.5, -smooth=Smooth.None)); connect(schema_space_001.qGai_flow,occupancy_1.y) -annotation (Line( -points={{ 0.0, 0.0 } ,{ -25.0, 0.0 } ,{ -25.0, 0.0 } ,{ -50.0, 0.0 } }, -color={255,204,51}, -thickness=0.5, -smooth=Smooth.None)); connect(schema_space_001.surf_surBou[1],internal_schema_space_001_schema_space_002.port_a) -annotation (Line( -points={{ 0.0, 0.0 } ,{ 62.5, 0.0 } ,{ 62.5, 0.0 } ,{ 125.0, 0.0 } }, -color={191,0,0}, -thickness=0.1, -smooth=Smooth.None)); connect(schema_space_001.surf_surBou[2],internal_schema_space_001_schema_space_003.port_a) -annotation (Line( -points={{ 0.0, 0.0 } ,{ 125.0, 0.0 } ,{ 125.0, 0.0 } ,{ 250.0, 0.0 } }, -color={191,0,0}, -thickness=0.1, -smooth=Smooth.None)); connect(schema_space_001.weaBus,weather.weaBus) -annotation (Line( -points={{ 0.0, 0.0 } ,{ -50.0, 0.0 } ,{ -50.0, 200.0 } ,{ -100.0, 200.0 } }, -thickness=0.05, -smooth=Smooth.None)); connect(system_007.port_b,system_008.port_a) -annotation (Line( -points={{ 0.0, -75.0 } ,{ 15.0, -75.0 } ,{ 15.0, -75.0 } ,{ 30.0, -75.0 } }, -color={255,204,51}, -thickness=0.5, -smooth=Smooth.None)); connect(system_008.y,control_007.y) -annotation (Line( -points={{ 30.0, -75.0 } ,{ 35.47189600483066, -75.0 } ,{ 35.47189600483066, -191.9280233214194 } ,{ 40.94379200966132, -191.9280233214194 } }, -color={255,204,51}, -thickness=0.5, -smooth=Smooth.None)); connect(system_008.port_b,system_003.port_1) -annotation (Line( -points={{ 30.0, -75.0 } ,{ 80.0, -75.0 } ,{ 80.0, -175.0 } ,{ 130.0, -175.0 } }, -color={255,204,51}, -thickness=0.5, -smooth=Smooth.None)); connect(schema_space_002.heaPorAir,system_009.heatPortCon) -annotation (Line( -points={{ 250.0, 150.0 } ,{ 250.0, 150.0 } ,{ 250.0, 75.0 } ,{ 250.0, 75.0 } }, -color={255,204,51}, -thickness=0.5, -smooth=Smooth.None)); connect(schema_space_002.heaPorRad,system_009.heatPortRad) -annotation (Line( -points={{ 250.0, 150.0 } ,{ 250.0, 150.0 } ,{ 250.0, 75.0 } ,{ 250.0, 75.0 } }, -color={255,204,51}, -thickness=0.5, -smooth=Smooth.None)); connect(schema_space_002.qGai_flow,occupancy_2.y) -annotation (Line( -points={{ 250.0, 150.0 } ,{ 225.0, 150.0 } ,{ 225.0, 150.0 } ,{ 200.0, 150.0 } }, -color={255,204,51}, -thickness=0.5, -smooth=Smooth.None)); connect(schema_space_002.surf_surBou[1],internal_schema_space_001_schema_space_002.port_b) -annotation (Line( -points={{ 250.0, 150.0 } ,{ 187.5, 150.0 } ,{ 187.5, 0.0 } ,{ 125.0, 0.0 } }, -color={191,0,0}, -thickness=0.1, -smooth=Smooth.None)); connect(schema_space_002.surf_surBou[2],internal_schema_space_002_schema_space_003.port_a) -annotation (Line( -points={{ 250.0, 150.0 } ,{ 312.5, 150.0 } ,{ 312.5, 150.0 } ,{ 375.0, 150.0 } }, -color={191,0,0}, -thickness=0.1, -smooth=Smooth.None)); connect(schema_space_002.weaBus,weather.weaBus) -annotation (Line( -points={{ 250.0, 150.0 } ,{ 75.0, 150.0 } ,{ 75.0, 200.0 } ,{ -100.0, 200.0 } }, -thickness=0.05, -smooth=Smooth.None)); connect(system_009.port_b,system_010.port_a) -annotation (Line( -points={{ 250.0, 75.0 } ,{ 265.0, 75.0 } ,{ 265.0, 75.0 } ,{ 280.0, 75.0 } }, -color={255,204,51}, -thickness=0.5, -smooth=Smooth.None)); connect(system_010.y,control_006.y) -annotation (Line( -points={{ 280.0, 75.0 } ,{ 75.56905542601123, 75.0 } ,{ 75.56905542601126, -120.25668203575391 } ,{ -128.8618891479775, -120.25668203575391 } }, -color={255,204,51}, -thickness=0.5, -smooth=Smooth.None)); connect(system_010.port_b,system_003.port_1) -annotation (Line( -points={{ 280.0, 75.0 } ,{ 205.0, 75.0 } ,{ 205.0, -175.0 } ,{ 130.0, -175.0 } }, -color={255,204,51}, -thickness=0.5, -smooth=Smooth.None)); connect(schema_space_003.heaPorAir,system_011.heatPortCon) -annotation (Line( -points={{ 500.0, 150.0 } ,{ 500.0, 150.0 } ,{ 500.0, 75.0 } ,{ 500.0, 75.0 } }, -color={255,204,51}, -thickness=0.5, -smooth=Smooth.None)); connect(schema_space_003.heaPorRad,system_011.heatPortRad) -annotation (Line( -points={{ 500.0, 150.0 } ,{ 500.0, 150.0 } ,{ 500.0, 75.0 } ,{ 500.0, 75.0 } }, -color={255,204,51}, -thickness=0.5, -smooth=Smooth.None)); connect(schema_space_003.qGai_flow,occupancy_3.y) -annotation (Line( -points={{ 500.0, 150.0 } ,{ 475.0, 150.0 } ,{ 475.0, 150.0 } ,{ 450.0, 150.0 } }, -color={255,204,51}, -thickness=0.5, -smooth=Smooth.None)); connect(schema_space_003.surf_surBou[1],internal_schema_space_001_schema_space_003.port_b) -annotation (Line( -points={{ 500.0, 150.0 } ,{ 375.0, 150.0 } ,{ 375.0, 0.0 } ,{ 250.0, 0.0 } }, -color={191,0,0}, -thickness=0.1, -smooth=Smooth.None)); connect(schema_space_003.surf_surBou[2],internal_schema_space_002_schema_space_003.port_b) -annotation (Line( -points={{ 500.0, 150.0 } ,{ 437.5, 150.0 } ,{ 437.5, 150.0 } ,{ 375.0, 150.0 } }, -color={191,0,0}, -thickness=0.1, -smooth=Smooth.None)); connect(schema_space_003.weaBus,weather.weaBus) -annotation (Line( -points={{ 500.0, 150.0 } ,{ 200.0, 150.0 } ,{ 200.0, 200.0 } ,{ -100.0, 200.0 } }, -thickness=0.05, -smooth=Smooth.None)); connect(system_011.port_b,system_012.port_a) -annotation (Line( -points={{ 500.0, 75.0 } ,{ 515.0, 75.0 } ,{ 515.0, 75.0 } ,{ 530.0, 75.0 } }, -color={255,204,51}, -thickness=0.5, -smooth=Smooth.None)); connect(system_012.y,control_005.y) -annotation (Line( -points={{ 530.0, 75.0 } ,{ 339.6329710740974, 75.0 } ,{ 339.6329710740973, -144.0171506390989 } ,{ 149.26594214819474, -144.0171506390989 } }, -color={255,204,51}, -thickness=0.5, -smooth=Smooth.None)); connect(system_012.port_b,system_005.port_1) -annotation (Line( -points={{ 530.0, 75.0 } ,{ 580.0, 75.0 } ,{ 580.0, -25.0 } ,{ 630.0, -25.0 } }, -color={255,204,51}, -thickness=0.5, -smooth=Smooth.None)); connect(system_002.dataBus,control_002.dataBus) -annotation (Line( -points={{ -39.70396230424323, -168.4720893482176 } ,{ 15.14561062597442, -168.4720893482176 } ,{ 15.145610625974413, -171.70371848552955 } ,{ 69.99518355619206, -171.70371848552955 } }, -color={255,204,51}, -thickness=0.5, -smooth=Smooth.None)); connect(system_002.port_b,system_004.port_1) -annotation (Line( -points={{ -39.70396230424323, -168.4720893482176 } ,{ -4.851981152121617, -168.4720893482176 } ,{ -4.85198115212161, -275.0 } ,{ 30.0, -275.0 } }, -color={255,204,51}, -thickness=0.5, -smooth=Smooth.None)); connect(system_002.port_b,system_006.port_1) -annotation (Line( -points={{ -39.70396230424323, -168.4720893482176 } ,{ 245.14801884787838, -168.4720893482176 } ,{ 245.1480188478784, -125.0 } ,{ 530.0, -125.0 } }, -color={255,204,51}, -thickness=0.5, -smooth=Smooth.None)); connect(system_004.y,control_003.y) -annotation (Line( -points={{ 30.0, -275.0 } ,{ 5.0, -275.0 } ,{ 5.0, -275.0 } ,{ -20.0, -275.0 } }, -color={255,204,51}, -thickness=0.5, -smooth=Smooth.None)); connect(system_004.port_2,system_013.port_a) -annotation (Line( -points={{ 30.0, -275.0 } ,{ 90.0, -275.0 } ,{ 90.0, -25.0 } ,{ 150.0, -25.0 } }, -color={255,204,51}, -thickness=0.5, -smooth=Smooth.None)); connect(system_004.port_3,system_003.port_3) -annotation (Line( -points={{ 30.0, -275.0 } ,{ 80.0, -275.0 } ,{ 80.0, -175.0 } ,{ 130.0, -175.0 } }, -color={255,204,51}, -thickness=0.5, -smooth=Smooth.None)); connect(control_003.u,system_013.T) -annotation (Line( -points={{ -20.0, -275.0 } ,{ 65.0, -275.0 } ,{ 65.0, -25.0 } ,{ 150.0, -25.0 } }, -color={255,204,51}, -thickness=0.5, -smooth=Smooth.None)); connect(system_006.y,control_004.y) -annotation (Line( -points={{ 530.0, -125.0 } ,{ 505.0, -125.0 } ,{ 505.0, -125.0 } ,{ 480.0, -125.0 } }, -color={255,204,51}, -thickness=0.5, -smooth=Smooth.None)); connect(system_006.port_2,system_014.port_a) -annotation (Line( -points={{ 530.0, -125.0 } ,{ 465.0, -125.0 } ,{ 465.0, -25.0 } ,{ 400.0, -25.0 } }, -color={255,204,51}, -thickness=0.5, -smooth=Smooth.None)); connect(system_006.port_3,system_005.port_3) -annotation (Line( -points={{ 530.0, -125.0 } ,{ 580.0, -125.0 } ,{ 580.0, -25.0 } ,{ 630.0, -25.0 } }, -color={255,204,51}, -thickness=0.5, -smooth=Smooth.None)); connect(control_004.u,system_014.T) -annotation (Line( -points={{ 480.0, -125.0 } ,{ 440.0, -125.0 } ,{ 440.0, -25.0 } ,{ 400.0, -25.0 } }, -color={255,204,51}, -thickness=0.5, -smooth=Smooth.None)); connect(system_001.dataBus,control_001.dataBus) -annotation (Line( -points={{ -71.34067271596895, -182.8707008188481 } ,{ 35.36684860950295, -182.8707008188481 } ,{ 35.366848609502966, 111.31779804961617 } ,{ 142.07436993497487, 111.31779804961617 } }, -color={255,204,51}, -thickness=0.5, -smooth=Smooth.None)); connect(system_001.port_b,system_002.port_a) -annotation (Line( -points={{ -71.34067271596895, -182.8707008188481 } ,{ -55.52231751010609, -182.8707008188481 } ,{ -55.52231751010609, -168.4720893482176 } ,{ -39.70396230424323, -168.4720893482176 } }, -color={255,204,51}, -thickness=0.5, -smooth=Smooth.None)); connect(system_003.port_2,system_001.port_a) -annotation (Line( -points={{ 130.0, -175.0 } ,{ 29.329663642015532, -175.0 } ,{ 29.329663642015518, -182.8707008188481 } ,{ -71.34067271596895, -182.8707008188481 } }, -color={255,204,51}, -thickness=0.5, -smooth=Smooth.None)); connect(system_013.port_b,system_009.port_a) -annotation (Line( -points={{ 150.0, -25.0 } ,{ 200.0, -25.0 } ,{ 200.0, 75.0 } ,{ 250.0, 75.0 } }, -color={255,204,51}, -thickness=0.5, -smooth=Smooth.None)); connect(system_013.port_b,system_007.port_a) -annotation (Line( -points={{ 150.0, -25.0 } ,{ 75.0, -25.0 } ,{ 75.0, -75.0 } ,{ 0.0, -75.0 } }, -color={255,204,51}, -thickness=0.5, -smooth=Smooth.None)); connect(system_005.port_2,system_001.port_a) -annotation (Line( -points={{ 630.0, -25.0 } ,{ 279.32966364201553, -25.0 } ,{ 279.32966364201553, -182.8707008188481 } ,{ -71.34067271596895, -182.8707008188481 } }, -color={255,204,51}, -thickness=0.5, -smooth=Smooth.None)); connect(system_014.port_b,system_011.port_a) -annotation (Line( -points={{ 400.0, -25.0 } ,{ 450.0, -25.0 } ,{ 450.0, 75.0 } ,{ 500.0, 75.0 } }, -color={255,204,51}, -thickness=0.5, -smooth=Smooth.None)); connect(control_007.dataBus,data_bus.dataBus) -annotation (Line( -points={{ 40.94379200966132, -191.9280233214194 } ,{ 116.64251561510001, -191.9280233214194 } ,{ 116.64251561510002, -51.85447150145035 } ,{ 192.3412392205387, -51.85447150145035 } }, -thickness=0.05, -smooth=Smooth.None)); connect(occupancy_1.dataBus,data_bus.dataBus) -annotation (Line( -points={{ -50.0, 0.0 } ,{ 71.17061961026936, 0.0 } ,{ 71.17061961026936, -51.85447150145035 } ,{ 192.3412392205387, -51.85447150145035 } }, -thickness=0.05, -smooth=Smooth.None)); connect(control_006.dataBus,data_bus.dataBus) -annotation (Line( -points={{ -128.8618891479775, -120.25668203575391 } ,{ 31.7396750362806, -120.25668203575391 } ,{ 31.7396750362806, -51.85447150145035 } ,{ 192.3412392205387, -51.85447150145035 } }, -thickness=0.05, -smooth=Smooth.None)); connect(occupancy_2.dataBus,data_bus.dataBus) -annotation (Line( -points={{ 200.0, 150.0 } ,{ 196.17061961026934, 150.0 } ,{ 196.17061961026934, -51.85447150145035 } ,{ 192.3412392205387, -51.85447150145035 } }, -thickness=0.05, -smooth=Smooth.None)); connect(control_005.dataBus,data_bus.dataBus) -annotation (Line( -points={{ 149.26594214819474, -144.0171506390989 } ,{ 170.80359068436672, -144.0171506390989 } ,{ 170.80359068436672, -51.85447150145035 } ,{ 192.3412392205387, -51.85447150145035 } }, -thickness=0.05, -smooth=Smooth.None)); connect(occupancy_3.dataBus,data_bus.dataBus) -annotation (Line( -points={{ 450.0, 150.0 } ,{ 321.17061961026934, 150.0 } ,{ 321.17061961026934, -51.85447150145035 } ,{ 192.3412392205387, -51.85447150145035 } }, -thickness=0.05, -smooth=Smooth.None)); connect(control_002.dataBus,data_bus.dataBus) -annotation (Line( -points={{ 69.99518355619206, -171.70371848552955 } ,{ 131.1682113883654, -171.70371848552955 } ,{ 131.1682113883654, -51.85447150145035 } ,{ 192.3412392205387, -51.85447150145035 } }, -thickness=0.05, -smooth=Smooth.None)); connect(control_003.dataBus,data_bus.dataBus) -annotation (Line( -points={{ -20.0, -275.0 } ,{ 86.17061961026936, -275.0 } ,{ 86.17061961026936, -51.85447150145035 } ,{ 192.3412392205387, -51.85447150145035 } }, -thickness=0.05, -smooth=Smooth.None)); connect(control_004.dataBus,data_bus.dataBus) -annotation (Line( -points={{ 480.0, -125.0 } ,{ 336.17061961026934, -125.0 } ,{ 336.17061961026934, -51.85447150145035 } ,{ 192.3412392205387, -51.85447150145035 } }, -thickness=0.05, -smooth=Smooth.None)); connect(control_001.dataBus,data_bus.dataBus) -annotation (Line( -points={{ 142.07436993497487, 111.31779804961617 } ,{ 167.2078045777568, 111.31779804961617 } ,{ 167.2078045777568, -51.85447150145035 } ,{ 192.3412392205387, -51.85447150145035 } }, -thickness=0.05, -smooth=Smooth.None)); connect(schema_space_001.heaPorAir,data_bus.port[1]) -annotation (Line( -points={{ 0.0, 0.0 } ,{ 96.17061961026936, 0.0 } ,{ 96.17061961026936, -51.85447150145035 } ,{ 192.3412392205387, -51.85447150145035 } }, -thickness=0.05, -smooth=Smooth.None)); connect(schema_space_001.ports[1],data_bus.port_a[1]) -annotation (Line( -points={{ 0.0, 0.0 } ,{ 96.17061961026936, 0.0 } ,{ 96.17061961026936, -51.85447150145035 } ,{ 192.3412392205387, -51.85447150145035 } }, -thickness=0.05, -smooth=Smooth.None)); connect(schema_space_002.heaPorAir,data_bus.port[2]) -annotation (Line( -points={{ 250.0, 150.0 } ,{ 221.17061961026934, 150.0 } ,{ 221.17061961026934, -51.85447150145035 } ,{ 192.3412392205387, -51.85447150145035 } }, -thickness=0.05, -smooth=Smooth.None)); connect(schema_space_002.ports[1],data_bus.port_a[2]) -annotation (Line( -points={{ 250.0, 150.0 } ,{ 221.17061961026934, 150.0 } ,{ 221.17061961026934, -51.85447150145035 } ,{ 192.3412392205387, -51.85447150145035 } }, -thickness=0.05, -smooth=Smooth.None)); connect(schema_space_003.heaPorAir,data_bus.port[3]) -annotation (Line( -points={{ 500.0, 150.0 } ,{ 346.17061961026934, 150.0 } ,{ 346.17061961026934, -51.85447150145035 } ,{ 192.3412392205387, -51.85447150145035 } }, -thickness=0.05, -smooth=Smooth.None)); connect(schema_space_003.ports[1],data_bus.port_a[3]) -annotation (Line( -points={{ 500.0, 150.0 } ,{ 346.17061961026934, 150.0 } ,{ 346.17061961026934, -51.85447150145035 } ,{ 192.3412392205387, -51.85447150145035 } }, -thickness=0.05, -smooth=Smooth.None));annotation (Diagram(coordinateSystem(extent={{-230.49320733407646,-325.0},{680.0,250.0}})), Icon( - coordinateSystem(extent={{-230.49320733407646,-325.0},{680.0,250.0}}))); - annotation ( - Documentation(info="Spaces

Spaces

Introduction

Introduction

nameschema_space_001
parameters
mSenFac1.0
AFlo100.0
hRoo2.5
linearizeRadiationtrue
m_flow_nominal0.01
T_start294.15
volume250.0
occupancy
nameoccupancy_1
parameters
emissions
nameparameters
system_007
nEle1
fraRad0.3
Q_flow_nominal2000.0
T_a_nominal363.15
T_b_nominal353.15
TAir_nominal293.15
TRad_nominal293.15
n1.9
deltaM0.01
from_dpfalse
dp_nominal0.0
linearizedfalse
VWat0.116
mDry52.6
system_008
R7.0
delta00.01
dpFixed_nominal6000.0
l0.0001
from_dptrue
linearizedfalse
deltaM0.02
m_flow_nominal0.01
dpValve_nominal6000.0
external_boundaries
namesurfaceazimuthtiltconstruction
externalwall_17100.0180.0wall
nameconstruction_001
externalwall_18100.0180.0wall
nameconstruction_001
externalwall_19200.0180.0wall
nameconstruction_001
internal_elements
namesurfaceazimuthtiltconstruction
internal_schema_space_001_schema_space_00210.010.0wall
nameinternal_wall
internal_schema_space_001_schema_space_00310.010.0wall
nameinternal_wall
nameschema_space_002
parameters
mSenFac1.0
AFlo100.0
hRoo2.5
linearizeRadiationtrue
m_flow_nominal0.01
T_start294.15
volume250.0
occupancy
nameoccupancy_2
parameters
emissions
nameparameters
system_009
nEle1
fraRad0.3
Q_flow_nominal2000.0
T_a_nominal363.15
T_b_nominal353.15
TAir_nominal293.15
TRad_nominal293.15
n1.9
deltaM0.01
from_dpfalse
dp_nominal0.0
linearizedfalse
VWat0.116
mDry52.6
system_010
R7.0
delta00.01
dpFixed_nominal6000.0
l0.0001
from_dptrue
linearizedfalse
deltaM0.02
m_flow_nominal0.01
dpValve_nominal6000.0
external_boundaries
namesurfaceazimuthtiltconstruction
externalwall_20100.0180.0wall
nameconstruction_001
externalwall_21100.0180.0wall
nameconstruction_001
externalwall_22200.0180.0wall
nameconstruction_001
internal_elements
namesurfaceazimuthtiltconstruction
internal_schema_space_001_schema_space_00210.010.0wall
nameinternal_wall
internal_schema_space_002_schema_space_00310.010.0wall
nameinternal_wall
nameschema_space_003
parameters
mSenFac1.0
AFlo100.0
hRoo2.5
linearizeRadiationtrue
m_flow_nominal0.01
T_start294.15
volume250.0
occupancy
nameoccupancy_3
parameters
emissions
nameparameters
system_011
nEle1
fraRad0.3
Q_flow_nominal2000.0
T_a_nominal363.15
T_b_nominal353.15
TAir_nominal293.15
TRad_nominal293.15
n1.9
deltaM0.01
from_dpfalse
dp_nominal0.0
linearizedfalse
VWat0.116
mDry52.6
system_012
R7.0
delta00.01
dpFixed_nominal6000.0
l0.0001
from_dptrue
linearizedfalse
deltaM0.02
m_flow_nominal0.01
dpValve_nominal6000.0
external_boundaries
namesurfaceazimuthtiltconstruction
externalwall_23100.0180.0wall
nameconstruction_001
externalwall_24100.0180.0wall
nameconstruction_001
externalwall_25200.0180.0wall
nameconstruction_001
internal_elements
namesurfaceazimuthtiltconstruction
internal_schema_space_001_schema_space_00310.010.0wall
nameinternal_wall
internal_schema_space_002_schema_space_00310.010.0wall
nameinternal_wall

Conclusions

Conclusions

Spaces

Introduction

Introduction

nameinternal_wall
layers
materialthickness
namebrick
k0.89
c790.0
rho1920.0
epsLw0.85
epsSw0.65
0.2
nameconstruction_001
layers
materialthickness
namematerial_001
k0.035
c1000.0
rho2000.0
epsLw0.85
epsSw0.65
0.1
namematerial_002
k0.035
c1000.0
rho2000.0
epsLw0.85
epsSw0.65
0.1
namematerial_003
k0.035
c1000.0
rho2000.0
epsLw0.85
epsSw0.65
0.1

Conclusions

Conclusions

Spaces

Introduction

Introduction

namesystem_001
parameters
scaFacRad1.5
dTBoi_nominal20
dTRad_nominal10
a{0.9}
effCurBuildings.Fluid.Types.EfficiencyCurves.Constant
T_nominal353.15
fueBuildings.Fluid.Data.Fuels.HeatingOilLowerHeatingValue()
Q_flow_nominal2000
dp_nominal5000
linearizeFlowResistancefalse
deltaM0.1
show_Tfalse
VTan0.2
hTan2
nSeg4
dIns0.002
dp(3000 + 2000)*{2,1}
nominal_mass_flow_rate_boiler0.03571428571428571
nominal_mass_flow_radiator_loop0.07142857142857142
V_flow0.03571428571428571/1000*{0.5,1}

Conclusions

Conclusions

")); -end building; - - -end house_yaml; diff --git a/tests/house.json b/tests/house.json index 5162092..afb5ae2 100644 --- a/tests/house.json +++ b/tests/house.json @@ -25,6 +25,57 @@ "shortwave_emissivity": 0.85 } ], + "gas": [ + { + "id": "MATERIAL:004", + "thermal_conductivity": 0.035, + "specific_heat_capacity": 1000.0, + "density": 2000.0, + "longwave_emissivity": 0.85, + "shortwave_emissivity": 0.85 + } + ], + "glass": [ + { + "id": "MATERIAL:005", + "thermal_conductivity": 0.035, + "specific_heat_capacity": 1000.0, + "density": 2000.0, + "longwave_emissivity": 0.85, + "shortwave_emissivity": 0.85, + "solar_transmittance": [ + 0.84 + ], + "solar_reflectance_outside_facing": [ + 0.84 + ], + "solar_reflectance_room_facing": [ + 0.84 + ], + "infrared_transmissivity": 0.0, + "infrared_absorptivity_outside_facing": 0.84, + "infrared_absorptivity_room_facing": 0.84 + } + ], + "glazings": [ + { + "id": "CONSTRUCTION:011", + "layers": [ + { + "glass": "MATERIAL:004", + "thickness": 0.1 + }, + { + "gas": "MATERIAL:005", + "thickness": 0.1 + }, + { + "glass": "MATERIAL:004", + "thickness": 0.1 + } + ] + } + ], "constructions": [ { "id": "CONSTRUCTION:001", @@ -405,4 +456,4 @@ } ], "@type": "Building" -} \ No newline at end of file +} diff --git a/tests/house.yaml b/tests/house.yaml index dbf87ea..adee1fc 100644 --- a/tests/house.yaml +++ b/tests/house.yaml @@ -1,4 +1,4 @@ -materials: +material: - id: MATERIAL:001 thermal_conductivity: 0.035 density: 2000.0 @@ -11,7 +11,25 @@ materials: thermal_conductivity: 0.035 density: 2000.0 specific_heat_capacity: 1000.0 - +gas: + - id: MATERIAL:004 + thermal_conductivity: 0.025 + density: 1.2 + specific_heat_capacity: 1000.0 +glass_material: + - id: MATERIAL:005 + thermal_conductivity: 1 + density: 2500.0 + specific_heat_capacity: 840 +glazings: + - id: CONSTRUCTION:011 + layers: + - glass: MATERIAL:005 + thickness: 0.003 + - gas: MATERIAL:004 + thickness: 0.0127 + - glass: MATERIAL:005 + thickness: 0.003 constructions: - id: CONSTRUCTION:001 layers: @@ -31,18 +49,28 @@ spaces: average_room_height: 2.5 external_boundaries: external_walls: - - surface: 100.0 + - surface: 10.0 azimuth: 180.0 tilt: wall construction: CONSTRUCTION:001 - - surface: 100.0 - azimuth: 180.0 + - surface: 10.0 + azimuth: 90.0 tilt: wall construction: CONSTRUCTION:001 - - surface: 200.0 - azimuth: 180.0 + - surface: 20.0 + azimuth: 0.0 tilt: wall construction: CONSTRUCTION:001 + floor_on_grounds: + - surface: 1.0 + construction: CONSTRUCTION:001 + windows: + - surface: 1.0 + azimuth: 180.0 + tilt: wall + construction: CONSTRUCTION:011 + width: 1.0 + height: 1.0 emissions: - radiator: id: SYSTEM:007 diff --git a/tests/simplified_house.yaml b/tests/simplified_house.yaml index feb174e..c4e4330 100644 --- a/tests/simplified_house.yaml +++ b/tests/simplified_house.yaml @@ -1,4 +1,4 @@ -materials: +material: - id: MATERIAL:001 thermal_conductivity: 0.035 density: 2000.0 @@ -22,7 +22,7 @@ constructions: - material: MATERIAL:003 thickness: 0.1 spaces: - - occupancy: {} + - occupancy: parameters: floor_area: 100.0 average_room_height: 2.5 @@ -47,7 +47,7 @@ spaces: id: SYSTEM:008 control: emission_control: - - occupancy: {} + - occupancy: parameters: floor_area: 100.0 average_room_height: 2.5 @@ -72,7 +72,7 @@ spaces: id: SYSTEM:010 control: emission_control: - - occupancy: {} + - occupancy: parameters: floor_area: 100.0 average_room_height: 2.5 diff --git a/tests/test_schema.py b/tests/test_schema.py index ca236b0..c508608 100644 --- a/tests/test_schema.py +++ b/tests/test_schema.py @@ -1,52 +1,24 @@ -import os -import subprocess import tempfile from pathlib import Path -from typing import Optional import pytest from linkml.validator import validate_file from tests.conftest import _read, clean_model, is_success -from trano.data_models.conversion import convert_model, convert_network +from trano.data_models.conversion import convert, convert_model, convert_network from trano.simulate.simulate import SimulationOptions, simulate -def convert( - schema: Path, input_file: str, target: str, output: Optional[Path] = None -) -> bool: - root_path = Path(__file__).parents[1] - os.chdir(root_path) - input = root_path.joinpath("tests", input_file) - output = output or root_path.joinpath( - "tests", f"{input.stem}.{target.replace('-', '_')}" - ) - command = [ - "poetry", - "run", - "linkml-convert", - "-o", - f"{output}", - "-t", - target, - "-f", - "yaml", - "-C", - "Building", - "-s", - str(schema), - f"{input}", - ] - - process = subprocess.run(command, check=True, capture_output=True, text=True) - return process.returncode == 0 - - @pytest.fixture def schema() -> Path: return Path(__file__).parents[1].joinpath("trano", "data_models", "trano.yaml") +@pytest.fixture +def house() -> Path: + return Path(__file__).parents[1].joinpath("tests", "house.yaml") + + def test_validate_schema() -> None: house = Path(__file__).parents[1].joinpath("tests", "house.yaml") data_model_path = ( @@ -56,36 +28,29 @@ def test_validate_schema() -> None: assert report.results == [] -def test_convert_to_json(schema: Path) -> None: +def test_convert_to_json(schema: Path, house: Path) -> None: for target in ["ttl", "json", "rdf", "json-ld"]: with tempfile.NamedTemporaryFile() as temp: - assert convert(schema, "house.yaml", target, Path(temp.name)) - - -def test_convert_to_json_(schema: Path) -> None: - for target in ["json"]: - assert convert(schema, "house.yaml", target) + assert convert(schema, house, target, Path(temp.name)) -def test_create_model(schema: Path) -> None: +def test_create_model_json(schema: Path, house: Path) -> None: model_name = "house" with tempfile.NamedTemporaryFile(suffix=".json") as temp: - assert convert(schema, "house.yaml", "json", Path(temp.name)) + assert convert(schema, house, "json", Path(temp.name)) model_ = convert_model(model_name, Path(temp.name)) assert clean_model(model_, model_name) == set(_read(model_name)) -def test_create_model_yaml() -> None: - model_name = "house_yaml" - model_path = Path(__file__).parents[1].joinpath("tests", "house.yaml") - model_ = convert_model(model_name, model_path) +def test_create_model_yaml(schema: Path, house: Path) -> None: + model_name = "house" + model_ = convert_model(model_name, house) assert clean_model(model_, model_name) == set(_read(model_name)) -def test_simulate_model_yaml() -> None: - model_name = "house_yaml" - model_path = Path(__file__).parents[1].joinpath("tests", "house.yaml") - network = convert_network(model_name, model_path) +def test_simulate_model_yaml(house: Path) -> None: + model_name = "house" + network = convert_network(model_name, house) with tempfile.TemporaryDirectory(ignore_cleanup_errors=True) as project_path: results = simulate( Path(project_path), @@ -95,7 +60,7 @@ def test_simulate_model_yaml() -> None: assert is_success(results) -def test_simplified_yaml() -> None: +def test_simulate_simplified_yaml() -> None: model_path = Path(__file__).parents[1].joinpath("tests", "simplified_house.yaml") network = convert_network("simplified_yaml", model_path) with tempfile.TemporaryDirectory(ignore_cleanup_errors=True) as project_path: diff --git a/trano/data_models/conversion.py b/trano/data_models/conversion.py index 26fe0f6..af6b2b5 100644 --- a/trano/data_models/conversion.py +++ b/trano/data_models/conversion.py @@ -1,16 +1,19 @@ import copy import json +import os +import subprocess import tempfile from collections import Counter from pathlib import Path -from typing import Any, Dict +from typing import Any, Dict, List import yaml # type: ignore from linkml.validator import validate_file # type: ignore from pydantic import BaseModel from trano.construction import Construction, Layer -from trano.material import Material +from trano.glass import GasLayer, Glass, GlassLayer +from trano.material import Gas, GlassMaterial, Material from trano.models.elements.boiler import Boiler # noqa: F401 from trano.models.elements.controls.boiler import BoilerControl # noqa: F401 from trano.models.elements.controls.collector import CollectorControl # noqa: F401 @@ -19,6 +22,8 @@ ThreeWayValveControl, ) from trano.models.elements.envelope.external_wall import ExternalWall +from trano.models.elements.envelope.floor_on_ground import FloorOnGround +from trano.models.elements.envelope.window import Window from trano.models.elements.occupancy import Occupancy from trano.models.elements.pump import Pump # noqa: F401 from trano.models.elements.radiator import Radiator # noqa: F401 @@ -82,6 +87,30 @@ class EnrichedModel(BaseModel): path: Path +def convert(schema: Path, input_file: Path, target: str, output: Path) -> bool: + root_path = Path(__file__).parents[1] + os.chdir(root_path) + command = [ + "poetry", + "run", + "linkml-convert", + "-o", + f"{output}", + "-t", + target, + "-C", + "Building", + "-s", + str(schema), + f"{input_file}", + ] + + process = subprocess.run( + command, check=True, capture_output=True, text=True # noqa: S603 + ) + return process.returncode == 0 + + def load_and_enrich_model(model_path: Path) -> EnrichedModel: if model_path.suffix == ".yaml": load_function = yaml.safe_load @@ -98,11 +127,29 @@ def load_and_enrich_model(model_path: Path) -> EnrichedModel: mode="w+", suffix=model_path.suffix, delete=False ) as f: dump_function(data, f) - return EnrichedModel(path=Path(f.name), data=data) + with tempfile.NamedTemporaryFile( + mode="w+", suffix=model_path.suffix, delete=False + ) as f2: + enriched_path = Path(f2.name) + convert(DATA_MODEL_PATH, Path(f.name), model_path.suffix[1:], enriched_path) + return EnrichedModel( + path=enriched_path, data=load_function(enriched_path.read_text()) + ) + + +def _build_materials(data: Dict[str, Any]) -> Dict[str, Any]: + materials = {} + material_types = {"material": Material, "gas": Gas, "glass_material": GlassMaterial} + for material_type, material_class in material_types.items(): + for material in data.get(material_type, []): + materials[material["id"]] = material_class( + **(material | {"name": material["id"]}) + ) + return materials # TODO: reduce complexity -def convert_network(name: str, model_path: Path) -> Network: +def convert_network(name: str, model_path: Path) -> Network: # noqa: PLR0912, C901 network = Network(name=name) occupancy = None system_counter: Any = Counter() @@ -111,11 +158,8 @@ def convert_network(name: str, model_path: Path) -> Network: validate_model(enriched_model.path) data = enriched_model.data - materials = { - material["id"]: Material(**(material | {"name": material["id"]})) - for material in data["materials"] - } - constructions = {} + materials = _build_materials(data) + constructions: Dict[str, Construction | Glass] = {} for construction in data["constructions"]: layers = [ Layer(**(layer | {"material": materials[layer["material"]]})) @@ -124,13 +168,34 @@ def convert_network(name: str, model_path: Path) -> Network: constructions[construction["id"]] = Construction( name=construction["id"], layers=layers ) + for glazing in data.get("glazings", []): + glazing_layers: List[GasLayer | GlassLayer] = [] + for layer in glazing["layers"]: + if "gas" in layer: + glazing_layers.append( + GasLayer( + thickness=layer["thickness"], material=materials[layer["gas"]] + ) + ) + if "glass" in layer: + glazing_layers.append( + GlassLayer( + thickness=layer["thickness"], material=materials[layer["glass"]] + ) + ) + constructions[glazing["id"]] = Glass( + name=glazing["id"], + layers=glazing_layers, + u_value_frame=glazing["u_value_frame"], + ) + spaces = [] space_dict = {} systems = {} for space in data["spaces"]: external_boundaries = space["external_boundaries"] - external_walls = [] - for external_wall in external_boundaries["external_walls"]: + external_walls: List[ExternalWall | Window | FloorOnGround] = [] + for external_wall in external_boundaries.get("external_walls", []): external_wall_ = ExternalWall( **( external_wall @@ -138,6 +203,19 @@ def convert_network(name: str, model_path: Path) -> Network: ) ) external_walls.append(external_wall_) + for window in external_boundaries.get("windows", []): + window_ = Window( + **(window | {"construction": constructions[window["construction"]]}) + ) + external_walls.append(window_) + for floor_on_ground in external_boundaries.get("floor_on_grounds", []): + floor_on_ground_ = FloorOnGround( + **( + floor_on_ground + | {"construction": constructions[floor_on_ground["construction"]]} + ) + ) + external_walls.append(floor_on_ground_) if space.get("occupancy") is not None: system_counter.update(["occupancy"]) occupancy = Occupancy( @@ -193,9 +271,13 @@ def _parse(data: Dict[str, Any]) -> None: for i in v: if isinstance(i, dict): _parse(i) - elif v is None and "control" in k: - COUNTER.update(["control"]) # type: ignore - data[k] = {"id": f"CONTROL:{COUNTER['control']}"} + elif v is None: + if "control" in k: + COUNTER.update(["control"]) # type: ignore + data[k] = {"id": f"CONTROL:{COUNTER['control']}"} + if "occupancy" in k: + COUNTER.update(["occupancy"]) # type: ignore + data[k] = {"parameters": {"occupancy": "3600 * {7, 19}"}} def assign_space_id(data: Dict[str, Any]) -> Dict[str, Any]: diff --git a/trano/data_models/trano.yaml b/trano/data_models/trano.yaml index b97852a..16f7c6b 100644 --- a/trano/data_models/trano.yaml +++ b/trano/data_models/trano.yaml @@ -53,6 +53,26 @@ classes: - surface - azimuth - tilt + FloorOnGround: + attributes: + construction: + description: Construction + range: Construction + slots: + - surface + Window: + attributes: + construction: + description: Glazing + range: Glazing + width: + range: float + height: + range: float + slots: + - surface + - azimuth + - tilt ExternalBoundaries: attributes: external_walls: @@ -60,7 +80,11 @@ classes: multivalued: true inlined: true floor_on_grounds: - range: ExternalWall + range: FloorOnGround + multivalued: true + inlined: true + windows: + range: Window multivalued: true inlined: true @@ -85,6 +109,43 @@ classes: description: Shortwave emissivity [1] range: float ifabsent: float(0.85) + Gas: + is_a: Material + GlassMaterial: + is_a: Material + attributes: + solar_transmittance: + range: float + multivalued: true + ifabsent: float(0.486) + solar_reflectance_outside_facing: + range: float + multivalued: true + ifabsent: float(0.053) + solar_reflectance_room_facing: + range: float + multivalued: true + ifabsent: float(0.053) + infrared_transmissivity: + range: float + ifabsent: float(0.0) + infrared_absorptivity_outside_facing: + range: float + ifabsent: float(0.84) + infrared_absorptivity_room_facing: + range: float + ifabsent: float(0.84) + GlazingLayer: + attributes: + gas: + description: Gas + range: Gas + glass: + description: Glass + range: GlassMaterial + thickness: + description: Thickness [m] + range: float Layer: attributes: material: @@ -101,6 +162,18 @@ classes: description: Layers range: Layer multivalued: true + Glazing: + slots: + - id + attributes: + u_value_frame: + description: U-value of the frame [W/(m2.K)] + range: float + ifabsent: float(1.4) + layers: + description: Layers + range: GlazingLayer + multivalued: true Parameter: description: >- Represents Parameters @@ -672,11 +745,26 @@ classes: description: >- A holder for Space objects attributes: - materials: + material: range: Material inlined: true inlined_as_list: true multivalued: true + gas: + range: Gas + inlined: true + inlined_as_list: true + multivalued: true + glass_material: + range: GlassMaterial + inlined: true + inlined_as_list: true + multivalued: true + glazings: + range: Glazing + inlined: true + inlined_as_list: true + multivalued: true constructions: range: Construction inlined: true diff --git a/trano/glass.py b/trano/glass.py index 9848143..5d8cc72 100644 --- a/trano/glass.py +++ b/trano/glass.py @@ -1,4 +1,4 @@ -from pydantic import BaseModel, ConfigDict +from pydantic import BaseModel, ConfigDict, field_validator from trano.material import Gas, GlassMaterial @@ -114,6 +114,13 @@ class Glass(BaseModel): def __hash__(self) -> int: return hash(self.name) + @field_validator("name") + @classmethod + def clean_name(cls, value: str) -> str: + if ":" in value: + return value.lower().replace(":", "_") + return value + class Glasses: double_glazing: Glass = Glass(