{ "cells": [ { "cell_type": "markdown", "id": "810b42c4", "metadata": {}, "source": [ "# Tutorial 55: Compare Calculations" ] }, { "cell_type": "markdown", "id": "8c31d3d1", "metadata": {}, "source": [ "The Tutorial demonstrates how to execute calculations for the same model in adjusted valve states and view the individual results." ] }, { "cell_type": "markdown", "id": "0beed02a", "metadata": {}, "source": [ "# Imports" ] }, { "cell_type": "markdown", "id": "de9f2add", "metadata": {}, "source": [ "## SIR 3S Toolkit" ] }, { "cell_type": "markdown", "id": "a71a2b56", "metadata": {}, "source": [ "### Regular Import/Init" ] }, { "cell_type": "code", "execution_count": 2, "id": "f13370ef", "metadata": {}, "outputs": [], "source": [ "SIR3S_SIRGRAF_DIR = r\"C:\\3S\\SIR 3S\\SirGraf-90-15-00-24_Quebec-Upd2\" #change to local path" ] }, { "cell_type": "code", "execution_count": 3, "id": "c5be997b", "metadata": {}, "outputs": [], "source": [ "from sir3stoolkit.core import wrapper" ] }, { "cell_type": "code", "execution_count": 4, "id": "f1f7aaa6", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "wrapper" ] }, { "cell_type": "code", "execution_count": 5, "id": "dac0fa81", "metadata": {}, "outputs": [], "source": [ "wrapper.Initialize_Toolkit(SIR3S_SIRGRAF_DIR)" ] }, { "cell_type": "markdown", "id": "e907a22c", "metadata": {}, "source": [ "### Additional Import/Init for Dataframes class" ] }, { "cell_type": "code", "execution_count": 6, "id": "6988815d", "metadata": {}, "outputs": [], "source": [ "from sir3stoolkit.mantle.dataframes import SIR3S_Model_Dataframes" ] }, { "cell_type": "code", "execution_count": 7, "id": "2c1f9159", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Initialization complete\n" ] } ], "source": [ "s3s = SIR3S_Model_Dataframes()" ] }, { "cell_type": "markdown", "id": "359deefe", "metadata": {}, "source": [ "## Additional" ] }, { "cell_type": "code", "execution_count": 8, "id": "2b047a85", "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt" ] }, { "cell_type": "markdown", "id": "e61a092a", "metadata": {}, "source": [ "# Open Model" ] }, { "cell_type": "markdown", "id": "01bdb186", "metadata": {}, "source": [ "For the tutorial we have a simple hydraulic setup. A node with 4 t/h net outflow simulates some consumption. It is supplied by two pipes. The one from the left has a boundary pressure of 6 bar and a valve, we will control, the one from the right has a boundary pressure of 3 bar and no valve." ] }, { "cell_type": "code", "execution_count": 9, "id": "84f74bd8", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Model is open for further operation\n" ] } ], "source": [ "s3s.OpenModel(dbName=r\"Toolkit_Tutorial55_Model.db3\",\n", " providerType=s3s.ProviderTypes.SQLite,\n", " Mid=\"M-1-0-1\",\n", " saveCurrentlyOpenModel=False,\n", " namedInstance=\"\",\n", " userID=\"\",\n", " password=\"\")" ] }, { "cell_type": "markdown", "id": "6489461b", "metadata": {}, "source": [ "Valves:\n", "- 'bz.Indphi': -1: geschlossen, 0: offen, 1: Tabellenverweis, 2: variabel\n", "- 'bz.Phio': Stellung offen [%]\n", "- 'bz.Phig': Stellung geschlossen [%]\n", "- 'bz.Phisoll': Stellung variabel [%]\n", "- 'bz.Fkphi1',\n", "- 'bz.Tiv',\n", "- 'bz.IndPhiKonst',\n", "- 'bz.IndphiKlartext'" ] }, { "cell_type": "markdown", "id": "f10f0cc9", "metadata": {}, "source": [ "# Get Tk" ] }, { "cell_type": "code", "execution_count": 10, "id": "e5272b92", "metadata": {}, "outputs": [], "source": [ "valve = s3s.GetTksofElementType(s3s.ObjectTypes.Valve)[0]" ] }, { "cell_type": "markdown", "id": "a1f7c93d", "metadata": {}, "source": [ "# 1. Scenario: Valve open (100%)" ] }, { "cell_type": "code", "execution_count": 11, "id": "71d2912b", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Value is set\n" ] } ], "source": [ "s3s.SetValue(Tk=valve, propertyName=\"bz.Indphi\", Value=\"0\")" ] }, { "cell_type": "code", "execution_count": 12, "id": "ee2f5121", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Model Calculation is complete\n" ] } ], "source": [ "s3s.ExecCalculation(True)" ] }, { "cell_type": "code", "execution_count": 13, "id": "602ab580", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "[2026-03-18 13:51:20,968] INFO in sir3stoolkit.mantle.dataframes: [generate_element_dataframe] Generating df for element type: ObjectTypes.Node ...\n", "[2026-03-18 13:51:20,970] DEBUG in sir3stoolkit.mantle.dataframes: [generate_element_dataframe] Generating df_model_data for element type: ObjectTypes.Node ...\n", "[2026-03-18 13:51:21,044] INFO in sir3stoolkit.mantle.dataframes: [model_data] Generating model_data dataframe for element type: ObjectTypes.Node\n", "[2026-03-18 13:51:21,044] INFO in sir3stoolkit.mantle.dataframes: [model_data] Retrieved 4 element(s) of element type ObjectTypes.Node.\n", "[2026-03-18 13:51:21,061] INFO in sir3stoolkit.mantle.dataframes: [Resolving model_data Properties] No properties given → using ALL model_data properties for ObjectTypes.Node.\n", "[2026-03-18 13:51:21,061] INFO in sir3stoolkit.mantle.dataframes: [Resolving model_data Properties] Using 37 model_data properties.\n", "[2026-03-18 13:51:21,061] INFO in sir3stoolkit.mantle.dataframes: [model_data] Retrieving model_data properties ['Name', 'Ktyp', 'Zkor', 'QmEin', 'Lfakt', 'Fkpzon', 'Fkfstf', 'Fkutmp', 'Fkfqps', 'Fkcont', 'Fk2lknot', 'Beschreibung', 'Idreferenz', 'Iplanung', 'Kvr', 'Qakt', 'Xkor', 'Ykor', 'NodeNamePosition', 'ShowNodeName', 'KvrKlartext', 'NumberOfVERB', 'HasBlockConnection', 'Tk', 'Pk', 'InVariant', 'GeometriesDiffer', 'SymbolFactor', 'bz.Drakonz', 'bz.Fk', 'bz.Fkpvar', 'bz.Fkqvar', 'bz.Fklfkt', 'bz.PhEin', 'bz.Tm', 'bz.Te', 'bz.PhMin'], geometry...\n", "[2026-03-18 13:51:21,482] WARNING in sir3stoolkit.mantle.dataframes: [model_data] Spatial Reference Identifier (SRID) not defined in model. DataFrame cannot be transformed to GeoDataFrame but geometry column can be created independently of SRID. Returning regular DataFrame with a geometry column.\n", "[2026-03-18 13:51:21,482] INFO in sir3stoolkit.mantle.dataframes: [model_data] Done. Shape: (4, 39)\n", "[2026-03-18 13:51:21,493] DEBUG in sir3stoolkit.mantle.dataframes: [generate_element_dataframe] Generating df_results for element type: ObjectTypes.Node; at timestamp: 2026-03-18 10:16:50.000 +01:00 ...\n", "[2026-03-18 13:51:21,493] INFO in sir3stoolkit.mantle.dataframes: [results] Generating results dataframe for element type: ObjectTypes.Node\n", "[2026-03-18 13:51:21,511] INFO in sir3stoolkit.mantle.dataframes: [Resolving Timestamps] Only static timestamp 2026-03-18 10:16:50.000 +01:00 is used\n", "[2026-03-18 13:51:21,511] INFO in sir3stoolkit.mantle.dataframes: [Resolving Timestamps] 1 valid timestamp(s) will be used.\n", "[2026-03-18 13:51:21,519] INFO in sir3stoolkit.mantle.dataframes: [Resolving tks] Retrieved 4 element(s) of element type ObjectTypes.Node.\n", "[2026-03-18 13:51:21,522] INFO in sir3stoolkit.mantle.dataframes: [results] Using 73 result properties.\n", "[2026-03-18 13:51:21,527] INFO in sir3stoolkit.mantle.dataframes: [results] Retrieving result values...\n", "[2026-03-18 13:51:21,539] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'ESQUELLSP' at '2026-03-18 10:16:50.000 +01:00': \n", "[2026-03-18 13:51:21,555] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'FITT_SUBTYPE' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:21,557] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'FITT_VBTYPE1' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:21,557] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'FITT_VBTYPE2' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:21,559] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'FITT_VBTYPE3' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:21,561] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'FSTF_NAME' at '2026-03-18 10:16:50.000 +01:00': Standard \n", "[2026-03-18 13:51:21,565] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'LFKT' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:21,576] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'PVAR' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:21,577] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'QVAR' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:21,581] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'ESQUELLSP' at '2026-03-18 10:16:50.000 +01:00': \n", "[2026-03-18 13:51:21,581] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'FITT_SUBTYPE' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:21,581] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'FITT_VBTYPE1' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:21,581] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'FITT_VBTYPE2' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:21,584] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'FITT_VBTYPE3' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:21,584] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'FSTF_NAME' at '2026-03-18 10:16:50.000 +01:00': Standard \n", "[2026-03-18 13:51:21,588] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'LFKT' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:21,590] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'PVAR' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:21,591] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'QVAR' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:21,594] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'ESQUELLSP' at '2026-03-18 10:16:50.000 +01:00': \n", "[2026-03-18 13:51:21,595] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'FITT_SUBTYPE' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:21,595] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'FITT_VBTYPE1' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:21,596] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'FITT_VBTYPE2' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:21,598] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'FITT_VBTYPE3' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:21,599] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'FSTF_NAME' at '2026-03-18 10:16:50.000 +01:00': Standard \n", "[2026-03-18 13:51:21,600] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'LFKT' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:21,601] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'PVAR' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:21,603] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'QVAR' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:21,606] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'ESQUELLSP' at '2026-03-18 10:16:50.000 +01:00': \n", "[2026-03-18 13:51:21,608] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'FITT_SUBTYPE' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:21,608] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'FITT_VBTYPE1' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:21,610] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'FITT_VBTYPE2' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:21,611] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'FITT_VBTYPE3' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:21,611] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'FSTF_NAME' at '2026-03-18 10:16:50.000 +01:00': Standard \n", "[2026-03-18 13:51:21,613] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'LFKT' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:21,615] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'PVAR' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:21,617] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'QVAR' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:21,625] INFO in sir3stoolkit.mantle.dataframes: [results] 76 fully NaN columns dropped.\n", "[2026-03-18 13:51:21,632] INFO in sir3stoolkit.mantle.dataframes: [results] Done. Shape: (1, 216)\n", "[2026-03-18 13:51:21,632] DEBUG in sir3stoolkit.mantle.dataframes: [generate_element_dataframe] Merging df_model_data with df_results for element type: ObjectTypes.Node ...\n" ] } ], "source": [ "df_nodes_1 = s3s.generate_element_dataframe(s3s.ObjectTypes.Node)" ] }, { "cell_type": "code", "execution_count": 14, "id": "d6a10b1c", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
tkNameKtypZkorQmEinLfaktFkpzonFkfstfFkutmpFkfqpsFkcontFk2lknotBeschreibungIdreferenzIplanungKvrQaktXkorYkorNodeNamePositionShowNodeNameKvrKlartextNumberOfVERBHasBlockConnectionTkPkInVariantGeometriesDifferSymbolFactorbz.Drakonzbz.Fkbz.Fkpvarbz.Fkqvarbz.Fklfktbz.PhEinbz.Tmbz.Tebz.PhMingeometryBCINDBCIND_CALCBCIND_FLOWBCIND_MODELBCIND_SOURCEBCIND_TYPECPDPDPHDYNVISKOESQUELLSPFITT_ANGLEFITT_BASTYPEFITT_DP1FITT_DP2FITT_DP3FITT_STATEFITT_SUBTYPEFITT_VBTYPE1FITT_VBTYPE2FITT_VBTYPE3FITT_ZETA1FITT_ZETA2FITT_ZETA3FSTF_NAMEHHMAX_INSTHMIN_INSTIAKTIVLFAKTAKTLFKTMPPDAMPFPHPHMINMAXDIFPH_EINPH_MINPMAX_INSTPMIN_INSTPVARQ2QMQMABSQVARRHOTTETMAX_INSTTMIN_INSTTTRVOLDWALTERZHKNR
04627226928120134070NODE02QKON001-150359187571205037774966523102239983321-14744960050823542042-1Upstream of valve21104001FalseVorlauf0False46272269281201340704627226928120134070FalseFalse104627226928120134070-1-1-10000POINT Z (40 0 0)17.00.00.016.00.01.04.2074-3.333333e+32-3.333333e+320.001729NaN-3.333333e+32-333333333.0-3.333333e+32-3.333333e+32-3.333333e+32-333333333.0NaNNaNNaNNaN-3.333333e+32-3.333333e+32-3.333333e+32NaN3.1274043.1274043.1274040.01.0NaN0.0000004.1274040.00663.1274040.03.1274040.04.1274044.127404NaN-3.333333e+320.000000.00000NaN1000.50.00.00.00.00.0004790.0-3.333333e+320.0
14853856122080314724NODE03QKON0-41-150359187571205037774966523102239983321-14744960050823542042-1Downstream of valve311-48001FalseVorlauf0False48538561220803147244853856122080314724FalseFalse104853856122080314724-1-1-10000POINT Z (80 0 0)21.00.04.016.00.01.04.2074-3.333333e+32-3.333333e+320.001729NaN-3.333333e+32-333333333.0-3.333333e+32-3.333333e+32-3.333333e+32-333333333.0NaNNaNNaNNaN-3.333333e+32-3.333333e+32-3.333333e+32NaN3.0936943.0936943.0936940.01.0NaN-1.1111114.0936950.00663.0936940.03.0936940.04.0936954.093695NaN-3.333333e+32-4.000004.00000NaN1000.50.00.00.00.00.0004790.0-3.333333e+320.0
25631143277892559364NODE04PKON0-101-150359187571205037774966523102239983321-14744960050823542042-1Template Element for single Node Creation3S561243069288089233111012001FalseVorlauf0False56311432778925593645631143277892559364FalseFalse105631143277892559364-1-1-12000POINT Z (120 0 0)20.00.04.016.00.00.04.2074-3.333333e+32-3.333333e+320.001729NaN-3.333333e+32-333333333.0-3.333333e+32-3.333333e+32-3.333333e+32-333333333.0NaNNaNNaNNaN-3.333333e+32-3.333333e+32-3.333333e+32NaN2.0000002.0000002.0000000.01.0NaN-3.5595233.0000000.00662.0000000.02.0000000.03.0000003.000000NaN-3.333333e+32-12.8142812.81428NaN1000.50.00.00.00.00.0011060.0-3.333333e+320.0
35698868843196465579NODE01PKON001-150359187571205037774966523102239983321-14744960050823542042-1Upstream of valve1110001FalseVorlauf0False56988688431964655795698868843196465579FalseFalse105698868843196465579-1-1-15000POINT Z (0 0 0)24.00.08.016.00.00.04.2074-3.333333e+32-3.333333e+320.001729NaN-3.333333e+32-333333333.0-3.333333e+32-3.333333e+32-3.333333e+32-333333333.0NaNNaNNaNNaN-3.333333e+32-3.333333e+32-3.333333e+32NaN5.0000005.0000005.0000000.01.0NaN4.6706346.0000000.00665.0000000.05.0000000.06.0000006.000000NaN-3.333333e+3216.8142816.81428NaN1000.50.00.00.00.00.0000000.0-3.333333e+320.0
\n", "
" ], "text/plain": [ " tk Name Ktyp Zkor QmEin Lfakt Fkpzon \\\n", "0 4627226928120134070 NODE02 QKON 0 0 1 -1 \n", "1 4853856122080314724 NODE03 QKON 0 -4 1 -1 \n", "2 5631143277892559364 NODE04 PKON 0 -10 1 -1 \n", "3 5698868843196465579 NODE01 PKON 0 0 1 -1 \n", "\n", " Fkfstf Fkutmp Fkfqps Fkcont \\\n", "0 5035918757120503777 4966523102239983321 -1 4744960050823542042 \n", "1 5035918757120503777 4966523102239983321 -1 4744960050823542042 \n", "2 5035918757120503777 4966523102239983321 -1 4744960050823542042 \n", "3 5035918757120503777 4966523102239983321 -1 4744960050823542042 \n", "\n", " Fk2lknot Beschreibung Idreferenz \\\n", "0 -1 Upstream of valve 2 \n", "1 -1 Downstream of valve 3 \n", "2 -1 Template Element for single Node Creation 3S5612430692880892331 \n", "3 -1 Upstream of valve 1 \n", "\n", " Iplanung Kvr Qakt Xkor Ykor NodeNamePosition ShowNodeName KvrKlartext \\\n", "0 1 1 0 40 0 1 False Vorlauf \n", "1 1 1 -4 80 0 1 False Vorlauf \n", "2 1 1 0 120 0 1 False Vorlauf \n", "3 1 1 0 0 0 1 False Vorlauf \n", "\n", " NumberOfVERB HasBlockConnection Tk Pk \\\n", "0 0 False 4627226928120134070 4627226928120134070 \n", "1 0 False 4853856122080314724 4853856122080314724 \n", "2 0 False 5631143277892559364 5631143277892559364 \n", "3 0 False 5698868843196465579 5698868843196465579 \n", "\n", " InVariant GeometriesDiffer SymbolFactor bz.Drakonz bz.Fk \\\n", "0 False False 1 0 4627226928120134070 \n", "1 False False 1 0 4853856122080314724 \n", "2 False False 1 0 5631143277892559364 \n", "3 False False 1 0 5698868843196465579 \n", "\n", " bz.Fkpvar bz.Fkqvar bz.Fklfkt bz.PhEin bz.Tm bz.Te bz.PhMin \\\n", "0 -1 -1 -1 0 0 0 0 \n", "1 -1 -1 -1 0 0 0 0 \n", "2 -1 -1 -1 2 0 0 0 \n", "3 -1 -1 -1 5 0 0 0 \n", "\n", " geometry BCIND BCIND_CALC BCIND_FLOW BCIND_MODEL \\\n", "0 POINT Z (40 0 0) 17.0 0.0 0.0 16.0 \n", "1 POINT Z (80 0 0) 21.0 0.0 4.0 16.0 \n", "2 POINT Z (120 0 0) 20.0 0.0 4.0 16.0 \n", "3 POINT Z (0 0 0) 24.0 0.0 8.0 16.0 \n", "\n", " BCIND_SOURCE BCIND_TYPE CP DP DPH DYNVISKO \\\n", "0 0.0 1.0 4.2074 -3.333333e+32 -3.333333e+32 0.001729 \n", "1 0.0 1.0 4.2074 -3.333333e+32 -3.333333e+32 0.001729 \n", "2 0.0 0.0 4.2074 -3.333333e+32 -3.333333e+32 0.001729 \n", "3 0.0 0.0 4.2074 -3.333333e+32 -3.333333e+32 0.001729 \n", "\n", " ESQUELLSP FITT_ANGLE FITT_BASTYPE FITT_DP1 FITT_DP2 \\\n", "0 NaN -3.333333e+32 -333333333.0 -3.333333e+32 -3.333333e+32 \n", "1 NaN -3.333333e+32 -333333333.0 -3.333333e+32 -3.333333e+32 \n", "2 NaN -3.333333e+32 -333333333.0 -3.333333e+32 -3.333333e+32 \n", "3 NaN -3.333333e+32 -333333333.0 -3.333333e+32 -3.333333e+32 \n", "\n", " FITT_DP3 FITT_STATE FITT_SUBTYPE FITT_VBTYPE1 FITT_VBTYPE2 \\\n", "0 -3.333333e+32 -333333333.0 NaN NaN NaN \n", "1 -3.333333e+32 -333333333.0 NaN NaN NaN \n", "2 -3.333333e+32 -333333333.0 NaN NaN NaN \n", "3 -3.333333e+32 -333333333.0 NaN NaN NaN \n", "\n", " FITT_VBTYPE3 FITT_ZETA1 FITT_ZETA2 FITT_ZETA3 FSTF_NAME \\\n", "0 NaN -3.333333e+32 -3.333333e+32 -3.333333e+32 NaN \n", "1 NaN -3.333333e+32 -3.333333e+32 -3.333333e+32 NaN \n", "2 NaN -3.333333e+32 -3.333333e+32 -3.333333e+32 NaN \n", "3 NaN -3.333333e+32 -3.333333e+32 -3.333333e+32 NaN \n", "\n", " H HMAX_INST HMIN_INST IAKTIV LFAKTAKT LFKT M P \\\n", "0 3.127404 3.127404 3.127404 0.0 1.0 NaN 0.000000 4.127404 \n", "1 3.093694 3.093694 3.093694 0.0 1.0 NaN -1.111111 4.093695 \n", "2 2.000000 2.000000 2.000000 0.0 1.0 NaN -3.559523 3.000000 \n", "3 5.000000 5.000000 5.000000 0.0 1.0 NaN 4.670634 6.000000 \n", "\n", " PDAMPF PH PHMINMAXDIF PH_EIN PH_MIN PMAX_INST PMIN_INST \\\n", "0 0.0066 3.127404 0.0 3.127404 0.0 4.127404 4.127404 \n", "1 0.0066 3.093694 0.0 3.093694 0.0 4.093695 4.093695 \n", "2 0.0066 2.000000 0.0 2.000000 0.0 3.000000 3.000000 \n", "3 0.0066 5.000000 0.0 5.000000 0.0 6.000000 6.000000 \n", "\n", " PVAR Q2 QM QMABS QVAR RHO T TE TMAX_INST \\\n", "0 NaN -3.333333e+32 0.00000 0.00000 NaN 1000.5 0.0 0.0 0.0 \n", "1 NaN -3.333333e+32 -4.00000 4.00000 NaN 1000.5 0.0 0.0 0.0 \n", "2 NaN -3.333333e+32 -12.81428 12.81428 NaN 1000.5 0.0 0.0 0.0 \n", "3 NaN -3.333333e+32 16.81428 16.81428 NaN 1000.5 0.0 0.0 0.0 \n", "\n", " TMIN_INST TTR VOLD WALTER ZHKNR \n", "0 0.0 0.000479 0.0 -3.333333e+32 0.0 \n", "1 0.0 0.000479 0.0 -3.333333e+32 0.0 \n", "2 0.0 0.001106 0.0 -3.333333e+32 0.0 \n", "3 0.0 0.000000 0.0 -3.333333e+32 0.0 " ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_nodes_1" ] }, { "cell_type": "markdown", "id": "09fe97e3", "metadata": {}, "source": [ "# 2. Scenario: Valve closed (0%)" ] }, { "cell_type": "code", "execution_count": 15, "id": "39f8ecae", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Value is set\n" ] } ], "source": [ "s3s.SetValue(Tk=valve, propertyName=\"bz.Indphi\", Value=\"-1\")" ] }, { "cell_type": "code", "execution_count": 16, "id": "24e5a7d0", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Model Calculation is complete\n" ] } ], "source": [ "s3s.ExecCalculation(True)" ] }, { "cell_type": "code", "execution_count": 17, "id": "c98572f4", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "[2026-03-18 13:51:25,597] INFO in sir3stoolkit.mantle.dataframes: [generate_element_dataframe] Generating df for element type: ObjectTypes.Node ...\n", "[2026-03-18 13:51:25,597] DEBUG in sir3stoolkit.mantle.dataframes: [generate_element_dataframe] Generating df_model_data for element type: ObjectTypes.Node ...\n", "[2026-03-18 13:51:25,605] INFO in sir3stoolkit.mantle.dataframes: [model_data] Generating model_data dataframe for element type: ObjectTypes.Node\n", "[2026-03-18 13:51:25,607] INFO in sir3stoolkit.mantle.dataframes: [model_data] Retrieved 4 element(s) of element type ObjectTypes.Node.\n", "[2026-03-18 13:51:25,608] INFO in sir3stoolkit.mantle.dataframes: [Resolving model_data Properties] No properties given → using ALL model_data properties for ObjectTypes.Node.\n", "[2026-03-18 13:51:25,610] INFO in sir3stoolkit.mantle.dataframes: [Resolving model_data Properties] Using 37 model_data properties.\n", "[2026-03-18 13:51:25,610] INFO in sir3stoolkit.mantle.dataframes: [model_data] Retrieving model_data properties ['Name', 'Ktyp', 'Zkor', 'QmEin', 'Lfakt', 'Fkpzon', 'Fkfstf', 'Fkutmp', 'Fkfqps', 'Fkcont', 'Fk2lknot', 'Beschreibung', 'Idreferenz', 'Iplanung', 'Kvr', 'Qakt', 'Xkor', 'Ykor', 'NodeNamePosition', 'ShowNodeName', 'KvrKlartext', 'NumberOfVERB', 'HasBlockConnection', 'Tk', 'Pk', 'InVariant', 'GeometriesDiffer', 'SymbolFactor', 'bz.Drakonz', 'bz.Fk', 'bz.Fkpvar', 'bz.Fkqvar', 'bz.Fklfkt', 'bz.PhEin', 'bz.Tm', 'bz.Te', 'bz.PhMin'], geometry...\n", "[2026-03-18 13:51:25,661] WARNING in sir3stoolkit.mantle.dataframes: [model_data] Spatial Reference Identifier (SRID) not defined in model. DataFrame cannot be transformed to GeoDataFrame but geometry column can be created independently of SRID. Returning regular DataFrame with a geometry column.\n", "[2026-03-18 13:51:25,661] INFO in sir3stoolkit.mantle.dataframes: [model_data] Done. Shape: (4, 39)\n", "[2026-03-18 13:51:25,674] DEBUG in sir3stoolkit.mantle.dataframes: [generate_element_dataframe] Generating df_results for element type: ObjectTypes.Node; at timestamp: 2026-03-18 10:16:50.000 +01:00 ...\n", "[2026-03-18 13:51:25,674] INFO in sir3stoolkit.mantle.dataframes: [results] Generating results dataframe for element type: ObjectTypes.Node\n", "[2026-03-18 13:51:25,685] INFO in sir3stoolkit.mantle.dataframes: [Resolving Timestamps] Only static timestamp 2026-03-18 10:16:50.000 +01:00 is used\n", "[2026-03-18 13:51:25,688] INFO in sir3stoolkit.mantle.dataframes: [Resolving Timestamps] 1 valid timestamp(s) will be used.\n", "[2026-03-18 13:51:25,689] INFO in sir3stoolkit.mantle.dataframes: [Resolving tks] Retrieved 4 element(s) of element type ObjectTypes.Node.\n", "[2026-03-18 13:51:25,691] INFO in sir3stoolkit.mantle.dataframes: [results] Using 73 result properties.\n", "[2026-03-18 13:51:25,695] INFO in sir3stoolkit.mantle.dataframes: [results] Retrieving result values...\n", "[2026-03-18 13:51:25,696] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'ESQUELLSP' at '2026-03-18 10:16:50.000 +01:00': \n", "[2026-03-18 13:51:25,698] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'FITT_SUBTYPE' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:25,698] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'FITT_VBTYPE1' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:25,700] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'FITT_VBTYPE2' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:25,700] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'FITT_VBTYPE3' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:25,702] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'FSTF_NAME' at '2026-03-18 10:16:50.000 +01:00': Standard \n", "[2026-03-18 13:51:25,704] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'LFKT' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:25,705] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'PVAR' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:25,705] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'QVAR' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:25,710] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'ESQUELLSP' at '2026-03-18 10:16:50.000 +01:00': \n", "[2026-03-18 13:51:25,711] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'FITT_SUBTYPE' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:25,711] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'FITT_VBTYPE1' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:25,711] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'FITT_VBTYPE2' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:25,713] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'FITT_VBTYPE3' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:25,715] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'FSTF_NAME' at '2026-03-18 10:16:50.000 +01:00': Standard \n", "[2026-03-18 13:51:25,716] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'LFKT' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:25,718] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'PVAR' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:25,719] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'QVAR' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:25,720] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'ESQUELLSP' at '2026-03-18 10:16:50.000 +01:00': \n", "[2026-03-18 13:51:25,723] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'FITT_SUBTYPE' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:25,723] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'FITT_VBTYPE1' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:25,723] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'FITT_VBTYPE2' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:25,725] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'FITT_VBTYPE3' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:25,727] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'FSTF_NAME' at '2026-03-18 10:16:50.000 +01:00': Standard \n", "[2026-03-18 13:51:25,729] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'LFKT' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:25,730] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'PVAR' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:25,731] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'QVAR' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:25,733] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'ESQUELLSP' at '2026-03-18 10:16:50.000 +01:00': \n", "[2026-03-18 13:51:25,736] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'FITT_SUBTYPE' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:25,736] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'FITT_VBTYPE1' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:25,737] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'FITT_VBTYPE2' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:25,738] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'FITT_VBTYPE3' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:25,738] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'FSTF_NAME' at '2026-03-18 10:16:50.000 +01:00': Standard \n", "[2026-03-18 13:51:25,742] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'LFKT' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:25,743] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'PVAR' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:25,743] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'QVAR' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:25,748] INFO in sir3stoolkit.mantle.dataframes: [results] 76 fully NaN columns dropped.\n", "[2026-03-18 13:51:25,760] INFO in sir3stoolkit.mantle.dataframes: [results] Done. Shape: (1, 216)\n", "[2026-03-18 13:51:25,760] DEBUG in sir3stoolkit.mantle.dataframes: [generate_element_dataframe] Merging df_model_data with df_results for element type: ObjectTypes.Node ...\n" ] } ], "source": [ "df_nodes_2 = s3s.generate_element_dataframe(s3s.ObjectTypes.Node)" ] }, { "cell_type": "code", "execution_count": 18, "id": "1b554b44", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
tkNameKtypZkorQmEinLfaktFkpzonFkfstfFkutmpFkfqpsFkcontFk2lknotBeschreibungIdreferenzIplanungKvrQaktXkorYkorNodeNamePositionShowNodeNameKvrKlartextNumberOfVERBHasBlockConnectionTkPkInVariantGeometriesDifferSymbolFactorbz.Drakonzbz.Fkbz.Fkpvarbz.Fkqvarbz.Fklfktbz.PhEinbz.Tmbz.Tebz.PhMingeometryBCINDBCIND_CALCBCIND_FLOWBCIND_MODELBCIND_SOURCEBCIND_TYPECPDPDPHDYNVISKOESQUELLSPFITT_ANGLEFITT_BASTYPEFITT_DP1FITT_DP2FITT_DP3FITT_STATEFITT_SUBTYPEFITT_VBTYPE1FITT_VBTYPE2FITT_VBTYPE3FITT_ZETA1FITT_ZETA2FITT_ZETA3FSTF_NAMEHHMAX_INSTHMIN_INSTIAKTIVLFAKTAKTLFKTMPPDAMPFPHPHMINMAXDIFPH_EINPH_MINPMAX_INSTPMIN_INSTPVARQ2QMQMABSQVARRHOTTETMAX_INSTTMIN_INSTTTRVOLDWALTERZHKNR
04627226928120134070NODE02QKON001-150359187571205037774966523102239983321-14744960050823542042-1Upstream of valve21104001FalseVorlauf0False46272269281201340704627226928120134070FalseFalse104627226928120134070-1-1-10000POINT Z (40 0 0)17.00.00.016.00.01.04.2074-3.333333e+32-3.333333e+320.001729NaN-3.333333e+32-333333333.0-3.333333e+32-3.333333e+32-3.333333e+32-333333333.0NaNNaNNaNNaN-3.333333e+32-3.333333e+32-3.333333e+32NaN4.9999994.9999994.9999990.01.0NaN0.0000005.9999990.00664.9999990.04.9999990.05.9999995.999999NaN-3.333333e+320.0000000.000000NaN1000.50.00.00.00.010.0000000.0-3.333333e+320.0
14853856122080314724NODE03QKON0-41-150359187571205037774966523102239983321-14744960050823542042-1Downstream of valve311-48001FalseVorlauf0False48538561220803147244853856122080314724FalseFalse104853856122080314724-1-1-10000POINT Z (80 0 0)21.00.04.016.00.01.04.2074-3.333333e+32-3.333333e+320.001729NaN-3.333333e+32-333333333.0-3.333333e+32-3.333333e+32-3.333333e+32-333333333.0NaNNaNNaNNaN-3.333333e+32-3.333333e+32-3.333333e+32NaN1.8883481.8883481.8883480.01.0NaN-1.1111112.8883470.00661.8883480.01.8883480.02.8883472.888347NaN-3.333333e+32-4.0000004.000000NaN1000.50.00.00.00.00.0038180.0-3.333333e+321.0
25631143277892559364NODE04PKON0-101-150359187571205037774966523102239983321-14744960050823542042-1Template Element for single Node Creation3S561243069288089233111012001FalseVorlauf0False56311432778925593645631143277892559364FalseFalse105631143277892559364-1-1-12000POINT Z (120 0 0)24.00.08.016.00.00.04.2074-3.333333e+32-3.333333e+320.001729NaN-3.333333e+32-333333333.0-3.333333e+32-3.333333e+32-3.333333e+32-333333333.0NaNNaNNaNNaN-3.333333e+32-3.333333e+32-3.333333e+32NaN2.0000002.0000002.0000000.01.0NaN1.1109103.0000000.00662.0000000.02.0000000.03.0000003.000000NaN-3.333333e+323.9992783.999278NaN1000.50.00.00.00.00.0000000.0-3.333333e+321.0
35698868843196465579NODE01PKON001-150359187571205037774966523102239983321-14744960050823542042-1Upstream of valve1110001FalseVorlauf0False56988688431964655795698868843196465579FalseFalse105698868843196465579-1-1-15000POINT Z (0 0 0)24.00.08.016.00.00.04.2074-3.333333e+32-3.333333e+320.001729NaN-3.333333e+32-333333333.0-3.333333e+32-3.333333e+32-3.333333e+32-333333333.0NaNNaNNaNNaN-3.333333e+32-3.333333e+32-3.333333e+32NaN5.0000005.0000005.0000000.01.0NaN0.0002016.0000000.00665.0000000.05.0000000.06.0000006.000000NaN-3.333333e+320.0007220.000722NaN1000.50.00.00.00.00.0000000.0-3.333333e+320.0
\n", "
" ], "text/plain": [ " tk Name Ktyp Zkor QmEin Lfakt Fkpzon \\\n", "0 4627226928120134070 NODE02 QKON 0 0 1 -1 \n", "1 4853856122080314724 NODE03 QKON 0 -4 1 -1 \n", "2 5631143277892559364 NODE04 PKON 0 -10 1 -1 \n", "3 5698868843196465579 NODE01 PKON 0 0 1 -1 \n", "\n", " Fkfstf Fkutmp Fkfqps Fkcont \\\n", "0 5035918757120503777 4966523102239983321 -1 4744960050823542042 \n", "1 5035918757120503777 4966523102239983321 -1 4744960050823542042 \n", "2 5035918757120503777 4966523102239983321 -1 4744960050823542042 \n", "3 5035918757120503777 4966523102239983321 -1 4744960050823542042 \n", "\n", " Fk2lknot Beschreibung Idreferenz \\\n", "0 -1 Upstream of valve 2 \n", "1 -1 Downstream of valve 3 \n", "2 -1 Template Element for single Node Creation 3S5612430692880892331 \n", "3 -1 Upstream of valve 1 \n", "\n", " Iplanung Kvr Qakt Xkor Ykor NodeNamePosition ShowNodeName KvrKlartext \\\n", "0 1 1 0 40 0 1 False Vorlauf \n", "1 1 1 -4 80 0 1 False Vorlauf \n", "2 1 1 0 120 0 1 False Vorlauf \n", "3 1 1 0 0 0 1 False Vorlauf \n", "\n", " NumberOfVERB HasBlockConnection Tk Pk \\\n", "0 0 False 4627226928120134070 4627226928120134070 \n", "1 0 False 4853856122080314724 4853856122080314724 \n", "2 0 False 5631143277892559364 5631143277892559364 \n", "3 0 False 5698868843196465579 5698868843196465579 \n", "\n", " InVariant GeometriesDiffer SymbolFactor bz.Drakonz bz.Fk \\\n", "0 False False 1 0 4627226928120134070 \n", "1 False False 1 0 4853856122080314724 \n", "2 False False 1 0 5631143277892559364 \n", "3 False False 1 0 5698868843196465579 \n", "\n", " bz.Fkpvar bz.Fkqvar bz.Fklfkt bz.PhEin bz.Tm bz.Te bz.PhMin \\\n", "0 -1 -1 -1 0 0 0 0 \n", "1 -1 -1 -1 0 0 0 0 \n", "2 -1 -1 -1 2 0 0 0 \n", "3 -1 -1 -1 5 0 0 0 \n", "\n", " geometry BCIND BCIND_CALC BCIND_FLOW BCIND_MODEL \\\n", "0 POINT Z (40 0 0) 17.0 0.0 0.0 16.0 \n", "1 POINT Z (80 0 0) 21.0 0.0 4.0 16.0 \n", "2 POINT Z (120 0 0) 24.0 0.0 8.0 16.0 \n", "3 POINT Z (0 0 0) 24.0 0.0 8.0 16.0 \n", "\n", " BCIND_SOURCE BCIND_TYPE CP DP DPH DYNVISKO \\\n", "0 0.0 1.0 4.2074 -3.333333e+32 -3.333333e+32 0.001729 \n", "1 0.0 1.0 4.2074 -3.333333e+32 -3.333333e+32 0.001729 \n", "2 0.0 0.0 4.2074 -3.333333e+32 -3.333333e+32 0.001729 \n", "3 0.0 0.0 4.2074 -3.333333e+32 -3.333333e+32 0.001729 \n", "\n", " ESQUELLSP FITT_ANGLE FITT_BASTYPE FITT_DP1 FITT_DP2 \\\n", "0 NaN -3.333333e+32 -333333333.0 -3.333333e+32 -3.333333e+32 \n", "1 NaN -3.333333e+32 -333333333.0 -3.333333e+32 -3.333333e+32 \n", "2 NaN -3.333333e+32 -333333333.0 -3.333333e+32 -3.333333e+32 \n", "3 NaN -3.333333e+32 -333333333.0 -3.333333e+32 -3.333333e+32 \n", "\n", " FITT_DP3 FITT_STATE FITT_SUBTYPE FITT_VBTYPE1 FITT_VBTYPE2 \\\n", "0 -3.333333e+32 -333333333.0 NaN NaN NaN \n", "1 -3.333333e+32 -333333333.0 NaN NaN NaN \n", "2 -3.333333e+32 -333333333.0 NaN NaN NaN \n", "3 -3.333333e+32 -333333333.0 NaN NaN NaN \n", "\n", " FITT_VBTYPE3 FITT_ZETA1 FITT_ZETA2 FITT_ZETA3 FSTF_NAME \\\n", "0 NaN -3.333333e+32 -3.333333e+32 -3.333333e+32 NaN \n", "1 NaN -3.333333e+32 -3.333333e+32 -3.333333e+32 NaN \n", "2 NaN -3.333333e+32 -3.333333e+32 -3.333333e+32 NaN \n", "3 NaN -3.333333e+32 -3.333333e+32 -3.333333e+32 NaN \n", "\n", " H HMAX_INST HMIN_INST IAKTIV LFAKTAKT LFKT M P \\\n", "0 4.999999 4.999999 4.999999 0.0 1.0 NaN 0.000000 5.999999 \n", "1 1.888348 1.888348 1.888348 0.0 1.0 NaN -1.111111 2.888347 \n", "2 2.000000 2.000000 2.000000 0.0 1.0 NaN 1.110910 3.000000 \n", "3 5.000000 5.000000 5.000000 0.0 1.0 NaN 0.000201 6.000000 \n", "\n", " PDAMPF PH PHMINMAXDIF PH_EIN PH_MIN PMAX_INST PMIN_INST \\\n", "0 0.0066 4.999999 0.0 4.999999 0.0 5.999999 5.999999 \n", "1 0.0066 1.888348 0.0 1.888348 0.0 2.888347 2.888347 \n", "2 0.0066 2.000000 0.0 2.000000 0.0 3.000000 3.000000 \n", "3 0.0066 5.000000 0.0 5.000000 0.0 6.000000 6.000000 \n", "\n", " PVAR Q2 QM QMABS QVAR RHO T TE TMAX_INST \\\n", "0 NaN -3.333333e+32 0.000000 0.000000 NaN 1000.5 0.0 0.0 0.0 \n", "1 NaN -3.333333e+32 -4.000000 4.000000 NaN 1000.5 0.0 0.0 0.0 \n", "2 NaN -3.333333e+32 3.999278 3.999278 NaN 1000.5 0.0 0.0 0.0 \n", "3 NaN -3.333333e+32 0.000722 0.000722 NaN 1000.5 0.0 0.0 0.0 \n", "\n", " TMIN_INST TTR VOLD WALTER ZHKNR \n", "0 0.0 10.000000 0.0 -3.333333e+32 0.0 \n", "1 0.0 0.003818 0.0 -3.333333e+32 1.0 \n", "2 0.0 0.000000 0.0 -3.333333e+32 1.0 \n", "3 0.0 0.000000 0.0 -3.333333e+32 0.0 " ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_nodes_2" ] }, { "cell_type": "markdown", "id": "f10cf868", "metadata": {}, "source": [ "# 3. Scenario: Valve variable (55%)" ] }, { "cell_type": "code", "execution_count": 19, "id": "d2c495ad", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Value is set\n" ] } ], "source": [ "s3s.SetValue(Tk=valve, propertyName=\"bz.Indphi\", Value=\"2\")" ] }, { "cell_type": "code", "execution_count": 20, "id": "21c91c9f", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Model Calculation is complete\n" ] } ], "source": [ "s3s.ExecCalculation(True)" ] }, { "cell_type": "code", "execution_count": 21, "id": "91c6a0a6", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "[2026-03-18 13:51:29,715] INFO in sir3stoolkit.mantle.dataframes: [generate_element_dataframe] Generating df for element type: ObjectTypes.Node ...\n", "[2026-03-18 13:51:29,716] DEBUG in sir3stoolkit.mantle.dataframes: [generate_element_dataframe] Generating df_model_data for element type: ObjectTypes.Node ...\n", "[2026-03-18 13:51:29,722] INFO in sir3stoolkit.mantle.dataframes: [model_data] Generating model_data dataframe for element type: ObjectTypes.Node\n", "[2026-03-18 13:51:29,723] INFO in sir3stoolkit.mantle.dataframes: [model_data] Retrieved 4 element(s) of element type ObjectTypes.Node.\n", "[2026-03-18 13:51:29,726] INFO in sir3stoolkit.mantle.dataframes: [Resolving model_data Properties] No properties given → using ALL model_data properties for ObjectTypes.Node.\n", "[2026-03-18 13:51:29,726] INFO in sir3stoolkit.mantle.dataframes: [Resolving model_data Properties] Using 37 model_data properties.\n", "[2026-03-18 13:51:29,726] INFO in sir3stoolkit.mantle.dataframes: [model_data] Retrieving model_data properties ['Name', 'Ktyp', 'Zkor', 'QmEin', 'Lfakt', 'Fkpzon', 'Fkfstf', 'Fkutmp', 'Fkfqps', 'Fkcont', 'Fk2lknot', 'Beschreibung', 'Idreferenz', 'Iplanung', 'Kvr', 'Qakt', 'Xkor', 'Ykor', 'NodeNamePosition', 'ShowNodeName', 'KvrKlartext', 'NumberOfVERB', 'HasBlockConnection', 'Tk', 'Pk', 'InVariant', 'GeometriesDiffer', 'SymbolFactor', 'bz.Drakonz', 'bz.Fk', 'bz.Fkpvar', 'bz.Fkqvar', 'bz.Fklfkt', 'bz.PhEin', 'bz.Tm', 'bz.Te', 'bz.PhMin'], geometry...\n", "[2026-03-18 13:51:29,780] WARNING in sir3stoolkit.mantle.dataframes: [model_data] Spatial Reference Identifier (SRID) not defined in model. DataFrame cannot be transformed to GeoDataFrame but geometry column can be created independently of SRID. Returning regular DataFrame with a geometry column.\n", "[2026-03-18 13:51:29,781] INFO in sir3stoolkit.mantle.dataframes: [model_data] Done. Shape: (4, 39)\n", "[2026-03-18 13:51:29,793] DEBUG in sir3stoolkit.mantle.dataframes: [generate_element_dataframe] Generating df_results for element type: ObjectTypes.Node; at timestamp: 2026-03-18 10:16:50.000 +01:00 ...\n", "[2026-03-18 13:51:29,795] INFO in sir3stoolkit.mantle.dataframes: [results] Generating results dataframe for element type: ObjectTypes.Node\n", "[2026-03-18 13:51:29,808] INFO in sir3stoolkit.mantle.dataframes: [Resolving Timestamps] Only static timestamp 2026-03-18 10:16:50.000 +01:00 is used\n", "[2026-03-18 13:51:29,811] INFO in sir3stoolkit.mantle.dataframes: [Resolving Timestamps] 1 valid timestamp(s) will be used.\n", "[2026-03-18 13:51:29,811] INFO in sir3stoolkit.mantle.dataframes: [Resolving tks] Retrieved 4 element(s) of element type ObjectTypes.Node.\n", "[2026-03-18 13:51:29,814] INFO in sir3stoolkit.mantle.dataframes: [results] Using 73 result properties.\n", "[2026-03-18 13:51:29,815] INFO in sir3stoolkit.mantle.dataframes: [results] Retrieving result values...\n", "[2026-03-18 13:51:29,819] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'ESQUELLSP' at '2026-03-18 10:16:50.000 +01:00': \n", "[2026-03-18 13:51:29,821] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'FITT_SUBTYPE' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:29,822] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'FITT_VBTYPE1' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:29,824] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'FITT_VBTYPE2' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:29,826] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'FITT_VBTYPE3' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:29,827] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'FSTF_NAME' at '2026-03-18 10:16:50.000 +01:00': Standard \n", "[2026-03-18 13:51:29,829] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'LFKT' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:29,829] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'PVAR' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:29,832] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'QVAR' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:29,835] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'ESQUELLSP' at '2026-03-18 10:16:50.000 +01:00': \n", "[2026-03-18 13:51:29,836] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'FITT_SUBTYPE' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:29,838] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'FITT_VBTYPE1' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:29,839] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'FITT_VBTYPE2' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:29,840] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'FITT_VBTYPE3' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:29,841] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'FSTF_NAME' at '2026-03-18 10:16:50.000 +01:00': Standard \n", "[2026-03-18 13:51:29,844] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'LFKT' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:29,846] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'PVAR' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:29,846] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'QVAR' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:29,849] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'ESQUELLSP' at '2026-03-18 10:16:50.000 +01:00': \n", "[2026-03-18 13:51:29,849] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'FITT_SUBTYPE' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:29,851] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'FITT_VBTYPE1' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:29,853] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'FITT_VBTYPE2' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:29,853] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'FITT_VBTYPE3' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:29,855] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'FSTF_NAME' at '2026-03-18 10:16:50.000 +01:00': Standard \n", "[2026-03-18 13:51:29,857] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'LFKT' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:29,860] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'PVAR' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:29,861] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'QVAR' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:29,863] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'ESQUELLSP' at '2026-03-18 10:16:50.000 +01:00': \n", "[2026-03-18 13:51:29,865] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'FITT_SUBTYPE' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:29,866] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'FITT_VBTYPE1' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:29,867] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'FITT_VBTYPE2' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:29,867] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'FITT_VBTYPE3' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:29,869] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'FSTF_NAME' at '2026-03-18 10:16:50.000 +01:00': Standard \n", "[2026-03-18 13:51:29,871] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'LFKT' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:29,874] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'PVAR' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:29,875] WARNING in sir3stoolkit.mantle.dataframes: [results] Non-numeric value for 'QVAR' at '2026-03-18 10:16:50.000 +01:00': \u0000 \n", "[2026-03-18 13:51:29,880] INFO in sir3stoolkit.mantle.dataframes: [results] 76 fully NaN columns dropped.\n", "[2026-03-18 13:51:29,893] INFO in sir3stoolkit.mantle.dataframes: [results] Done. Shape: (1, 216)\n", "[2026-03-18 13:51:29,893] DEBUG in sir3stoolkit.mantle.dataframes: [generate_element_dataframe] Merging df_model_data with df_results for element type: ObjectTypes.Node ...\n" ] } ], "source": [ "df_nodes_3 = s3s.generate_element_dataframe(s3s.ObjectTypes.Node)" ] }, { "cell_type": "code", "execution_count": 22, "id": "8f53442b", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
tkNameKtypZkorQmEinLfaktFkpzonFkfstfFkutmpFkfqpsFkcontFk2lknotBeschreibungIdreferenzIplanungKvrQaktXkorYkorNodeNamePositionShowNodeNameKvrKlartextNumberOfVERBHasBlockConnectionTkPkInVariantGeometriesDifferSymbolFactorbz.Drakonzbz.Fkbz.Fkpvarbz.Fkqvarbz.Fklfktbz.PhEinbz.Tmbz.Tebz.PhMingeometryBCINDBCIND_CALCBCIND_FLOWBCIND_MODELBCIND_SOURCEBCIND_TYPECPDPDPHDYNVISKOESQUELLSPFITT_ANGLEFITT_BASTYPEFITT_DP1FITT_DP2FITT_DP3FITT_STATEFITT_SUBTYPEFITT_VBTYPE1FITT_VBTYPE2FITT_VBTYPE3FITT_ZETA1FITT_ZETA2FITT_ZETA3FSTF_NAMEHHMAX_INSTHMIN_INSTIAKTIVLFAKTAKTLFKTMPPDAMPFPHPHMINMAXDIFPH_EINPH_MINPMAX_INSTPMIN_INSTPVARQ2QMQMABSQVARRHOTTETMAX_INSTTMIN_INSTTTRVOLDWALTERZHKNR
04627226928120134070NODE02QKON001-150359187571205037774966523102239983321-14744960050823542042-1Upstream of valve21104001FalseVorlauf0False46272269281201340704627226928120134070FalseFalse104627226928120134070-1-1-10000POINT Z (40 0 0)17.00.00.016.00.01.04.2074-3.333333e+32-3.333333e+320.001729NaN-3.333333e+32-333333333.0-3.333333e+32-3.333333e+32-3.333333e+32-333333333.0NaNNaNNaNNaN-3.333333e+32-3.333333e+32-3.333333e+32NaN3.2391193.2391193.2391190.01.0NaN0.0000004.2391190.00663.2391190.03.2391190.04.2391194.239119NaN-3.333333e+320.000000.00000NaN1000.50.00.00.00.00.0004940.0-3.333333e+320.0
14853856122080314724NODE03QKON0-41-150359187571205037774966523102239983321-14744960050823542042-1Downstream of valve311-48001FalseVorlauf0False48538561220803147244853856122080314724FalseFalse104853856122080314724-1-1-10000POINT Z (80 0 0)21.00.04.016.00.01.04.2074-3.333333e+32-3.333333e+320.001729NaN-3.333333e+32-333333333.0-3.333333e+32-3.333333e+32-3.333333e+32-333333333.0NaNNaNNaNNaN-3.333333e+32-3.333333e+32-3.333333e+32NaN3.0087083.0087083.0087080.01.0NaN-1.1111114.0087080.00663.0087080.03.0087080.04.0087084.008708NaN-3.333333e+32-4.000004.00000NaN1000.50.00.00.00.00.0004940.0-3.333333e+320.0
25631143277892559364NODE04PKON0-101-150359187571205037774966523102239983321-14744960050823542042-1Template Element for single Node Creation3S561243069288089233111012001FalseVorlauf0False56311432778925593645631143277892559364FalseFalse105631143277892559364-1-1-12000POINT Z (120 0 0)20.00.04.016.00.00.04.2074-3.333333e+32-3.333333e+320.001729NaN-3.333333e+32-333333333.0-3.333333e+32-3.333333e+32-3.333333e+32-333333333.0NaNNaNNaNNaN-3.333333e+32-3.333333e+32-3.333333e+32NaN2.0000002.0000002.0000000.01.0NaN-3.4167753.0000000.00662.0000000.02.0000000.03.0000003.000000NaN-3.333333e+32-12.3003912.30039NaN1000.50.00.00.00.00.0011480.0-3.333333e+320.0
35698868843196465579NODE01PKON001-150359187571205037774966523102239983321-14744960050823542042-1Upstream of valve1110001FalseVorlauf0False56988688431964655795698868843196465579FalseFalse105698868843196465579-1-1-15000POINT Z (0 0 0)24.00.08.016.00.00.04.2074-3.333333e+32-3.333333e+320.001729NaN-3.333333e+32-333333333.0-3.333333e+32-3.333333e+32-3.333333e+32-333333333.0NaNNaNNaNNaN-3.333333e+32-3.333333e+32-3.333333e+32NaN5.0000005.0000005.0000000.01.0NaN4.5278876.0000000.00665.0000000.05.0000000.06.0000006.000000NaN-3.333333e+3216.3003916.30039NaN1000.50.00.00.00.00.0000000.0-3.333333e+320.0
\n", "
" ], "text/plain": [ " tk Name Ktyp Zkor QmEin Lfakt Fkpzon \\\n", "0 4627226928120134070 NODE02 QKON 0 0 1 -1 \n", "1 4853856122080314724 NODE03 QKON 0 -4 1 -1 \n", "2 5631143277892559364 NODE04 PKON 0 -10 1 -1 \n", "3 5698868843196465579 NODE01 PKON 0 0 1 -1 \n", "\n", " Fkfstf Fkutmp Fkfqps Fkcont \\\n", "0 5035918757120503777 4966523102239983321 -1 4744960050823542042 \n", "1 5035918757120503777 4966523102239983321 -1 4744960050823542042 \n", "2 5035918757120503777 4966523102239983321 -1 4744960050823542042 \n", "3 5035918757120503777 4966523102239983321 -1 4744960050823542042 \n", "\n", " Fk2lknot Beschreibung Idreferenz \\\n", "0 -1 Upstream of valve 2 \n", "1 -1 Downstream of valve 3 \n", "2 -1 Template Element for single Node Creation 3S5612430692880892331 \n", "3 -1 Upstream of valve 1 \n", "\n", " Iplanung Kvr Qakt Xkor Ykor NodeNamePosition ShowNodeName KvrKlartext \\\n", "0 1 1 0 40 0 1 False Vorlauf \n", "1 1 1 -4 80 0 1 False Vorlauf \n", "2 1 1 0 120 0 1 False Vorlauf \n", "3 1 1 0 0 0 1 False Vorlauf \n", "\n", " NumberOfVERB HasBlockConnection Tk Pk \\\n", "0 0 False 4627226928120134070 4627226928120134070 \n", "1 0 False 4853856122080314724 4853856122080314724 \n", "2 0 False 5631143277892559364 5631143277892559364 \n", "3 0 False 5698868843196465579 5698868843196465579 \n", "\n", " InVariant GeometriesDiffer SymbolFactor bz.Drakonz bz.Fk \\\n", "0 False False 1 0 4627226928120134070 \n", "1 False False 1 0 4853856122080314724 \n", "2 False False 1 0 5631143277892559364 \n", "3 False False 1 0 5698868843196465579 \n", "\n", " bz.Fkpvar bz.Fkqvar bz.Fklfkt bz.PhEin bz.Tm bz.Te bz.PhMin \\\n", "0 -1 -1 -1 0 0 0 0 \n", "1 -1 -1 -1 0 0 0 0 \n", "2 -1 -1 -1 2 0 0 0 \n", "3 -1 -1 -1 5 0 0 0 \n", "\n", " geometry BCIND BCIND_CALC BCIND_FLOW BCIND_MODEL \\\n", "0 POINT Z (40 0 0) 17.0 0.0 0.0 16.0 \n", "1 POINT Z (80 0 0) 21.0 0.0 4.0 16.0 \n", "2 POINT Z (120 0 0) 20.0 0.0 4.0 16.0 \n", "3 POINT Z (0 0 0) 24.0 0.0 8.0 16.0 \n", "\n", " BCIND_SOURCE BCIND_TYPE CP DP DPH DYNVISKO \\\n", "0 0.0 1.0 4.2074 -3.333333e+32 -3.333333e+32 0.001729 \n", "1 0.0 1.0 4.2074 -3.333333e+32 -3.333333e+32 0.001729 \n", "2 0.0 0.0 4.2074 -3.333333e+32 -3.333333e+32 0.001729 \n", "3 0.0 0.0 4.2074 -3.333333e+32 -3.333333e+32 0.001729 \n", "\n", " ESQUELLSP FITT_ANGLE FITT_BASTYPE FITT_DP1 FITT_DP2 \\\n", "0 NaN -3.333333e+32 -333333333.0 -3.333333e+32 -3.333333e+32 \n", "1 NaN -3.333333e+32 -333333333.0 -3.333333e+32 -3.333333e+32 \n", "2 NaN -3.333333e+32 -333333333.0 -3.333333e+32 -3.333333e+32 \n", "3 NaN -3.333333e+32 -333333333.0 -3.333333e+32 -3.333333e+32 \n", "\n", " FITT_DP3 FITT_STATE FITT_SUBTYPE FITT_VBTYPE1 FITT_VBTYPE2 \\\n", "0 -3.333333e+32 -333333333.0 NaN NaN NaN \n", "1 -3.333333e+32 -333333333.0 NaN NaN NaN \n", "2 -3.333333e+32 -333333333.0 NaN NaN NaN \n", "3 -3.333333e+32 -333333333.0 NaN NaN NaN \n", "\n", " FITT_VBTYPE3 FITT_ZETA1 FITT_ZETA2 FITT_ZETA3 FSTF_NAME \\\n", "0 NaN -3.333333e+32 -3.333333e+32 -3.333333e+32 NaN \n", "1 NaN -3.333333e+32 -3.333333e+32 -3.333333e+32 NaN \n", "2 NaN -3.333333e+32 -3.333333e+32 -3.333333e+32 NaN \n", "3 NaN -3.333333e+32 -3.333333e+32 -3.333333e+32 NaN \n", "\n", " H HMAX_INST HMIN_INST IAKTIV LFAKTAKT LFKT M P \\\n", "0 3.239119 3.239119 3.239119 0.0 1.0 NaN 0.000000 4.239119 \n", "1 3.008708 3.008708 3.008708 0.0 1.0 NaN -1.111111 4.008708 \n", "2 2.000000 2.000000 2.000000 0.0 1.0 NaN -3.416775 3.000000 \n", "3 5.000000 5.000000 5.000000 0.0 1.0 NaN 4.527887 6.000000 \n", "\n", " PDAMPF PH PHMINMAXDIF PH_EIN PH_MIN PMAX_INST PMIN_INST \\\n", "0 0.0066 3.239119 0.0 3.239119 0.0 4.239119 4.239119 \n", "1 0.0066 3.008708 0.0 3.008708 0.0 4.008708 4.008708 \n", "2 0.0066 2.000000 0.0 2.000000 0.0 3.000000 3.000000 \n", "3 0.0066 5.000000 0.0 5.000000 0.0 6.000000 6.000000 \n", "\n", " PVAR Q2 QM QMABS QVAR RHO T TE TMAX_INST \\\n", "0 NaN -3.333333e+32 0.00000 0.00000 NaN 1000.5 0.0 0.0 0.0 \n", "1 NaN -3.333333e+32 -4.00000 4.00000 NaN 1000.5 0.0 0.0 0.0 \n", "2 NaN -3.333333e+32 -12.30039 12.30039 NaN 1000.5 0.0 0.0 0.0 \n", "3 NaN -3.333333e+32 16.30039 16.30039 NaN 1000.5 0.0 0.0 0.0 \n", "\n", " TMIN_INST TTR VOLD WALTER ZHKNR \n", "0 0.0 0.000494 0.0 -3.333333e+32 0.0 \n", "1 0.0 0.000494 0.0 -3.333333e+32 0.0 \n", "2 0.0 0.001148 0.0 -3.333333e+32 0.0 \n", "3 0.0 0.000000 0.0 -3.333333e+32 0.0 " ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_nodes_3" ] }, { "cell_type": "markdown", "id": "ada2467d", "metadata": {}, "source": [ "# Pressure Comparison" ] }, { "cell_type": "code", "execution_count": 23, "id": "dc77ab70", "metadata": {}, "outputs": [], "source": [ "def plot_geometry_pressure(df, valve_percentage, geom_col=\"geometry\", p_col=\"P\"):\n", " \"\"\"\n", " Scatter plot of geometry points colored by P.\n", " Adds numeric pressure labels and ONE centered text box.\n", " \"\"\"\n", "\n", " xs = [pt.x for pt in df[geom_col]]\n", " ys = [pt.y for pt in df[geom_col]]\n", " P = df[p_col]\n", "\n", " plt.figure(figsize=(6, 5))\n", " sc = plt.scatter(xs, ys, c=P, cmap=\"viridis\", s=50)\n", "\n", " for x, y, p in zip(xs, ys, P):\n", " plt.annotate(\n", " f\"{p:.2f}\",\n", " xy=(x, y),\n", " xytext=(5, 5), # Offset: 5 px right, 5 px up\n", " textcoords=\"offset points\",\n", " fontsize=8,\n", " ha=\"left\",\n", " va=\"bottom\"\n", " )\n", "\n", " # colorbar = legend\n", " cbar = plt.colorbar(sc)\n", " cbar.set_label(p_col)\n", "\n", " plt.xlabel(\"x\")\n", " plt.ylabel(\"y\")\n", " plt.axis('off')\n", " plt.title(f\"Node Pressure Visualization — Valve {valve_percentage}%\")\n", "\n", " # very rudimentary just for tutorial\n", " plt.text(\n", " 0.5, 0.5,\n", " f\"- Pipe - - Valve - - Pipe - \",\n", " transform=plt.gca().transAxes, # use axes coordinates\n", " fontsize=12,\n", " color=\"black\",\n", " ha=\"center\",\n", " va=\"center\",\n", " )\n", "\n", " plt.tight_layout()\n", " plt.show()" ] }, { "cell_type": "code", "execution_count": 24, "id": "51ab71e9", "metadata": {}, "outputs": [ { "data": { "image/png": "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ExNz/GIuiN9++00+Pj665ZZb3PuWL1+u7777Ti+88ILKlSunMmXK6JdfflGzZs1UqVIlvfnmmypXrpzWrl2rESNG6NSpU5owYYIk6fXXX9fEiRP13HPPqWXLlkpPT9fu3bs9fuT69Omjn376Sa+88oqqV6+uc+fO6aefftLp06ev6Rgkady4cYqKitKsWbPk5eWlMmXKaMmSJerbt686d+6sRYsWydfXV7Nnz1a7du20du1aRUdH59pfmzZtVLlyZc2fP1//93//597vdDr13nvvqWnTprr99ttzfbyZx5iamqozZ85ozJgxioiIUFpamr766is98sgjWrBggfr27XtV/cXFxXncvnTpkvr06SOn06lSpUpJygyeatSooe7du6tUqVI6duyYZs6cqTvvvFO//PKLSpcurQ4dOujVV1/V+PHj9c477+iOO+6QJFWrVi3H572az4Ukbd26VaNHj9YzzzyjsmXL6t1339XAgQN16623qmXLlld1zGaoXr267r77bi1ZskSTJ092/4hLmYFRRESE2rVrJynzc9WzZ093sLd161a98sor2r17d56BXP/+/fXEE09o7969uu2229z7161bp6NHj7oDDJfLpc6dO+u7777T008/rWbNmunAgQOaMGGCWrVqpYSEBAUGBl73Me/YsUOSVK9evWz31atXT99//71H27CwMJUrVy5bu8v7aty4sf744w/NnDlTPXr00OTJkxUaGqoaNWrot99+U0xMjFavXu3xXgBuKkWciSp0WeWw+Ph4IzU11ahatarRuHFjw+VyGYaRvdS0Zs0aQ5Lx+uuve/Tz0UcfGZKMOXPmGIbxv7LKk08+6dHu/fffNyR5lDUGDx5sFC9e3Dhw4IBH2ylTphiSjJ07d+Z5DFljTE9PN9LT042jR48azzzzjCHJ6Natm7udJCMkJMQ4c+aMx+PbtWtnVKhQwTh//rzH/uHDhxsBAQHu9h07djQaNGiQ51iKFy9ujBw5Ms82uZV17rnnHuOee+5x396wYYMhyWjZsqVHu4sXLxqlSpUyOnXq5LHf6XQa9evXN5o0aZLn8xuGYUyYMMGQZPz000/ufV988YUhyZg7d6573/79+7OVE8w8xitlZGQY6enpxsCBA42GDRvm2WdOY7uyr86dOxvFixc3fvzxxzyf88KFC0ZQUJAxbdo09/68ymFXlnoK+rnIOo6AgACP9/ulS5eMUqVKGYMHD851nDda1nfBsmXL3Pt27NhhSDKeffbZHB/jdDqN9PR0Y/HixYa3t7fHZ+vK1+jUqVOGn5+fMX78eI8+Hn30UaNs2bLuktSHH35oSDJiY2M92mWVti4vU+Unr3JY1ndRXFxctvsef/xxw8/Pz327bdu2Ro0aNXJ8Dj8/P+Pxxx93354xY4bh5+fn/r75/PPPDcMwjDZt2hgDBw4s8NiBomDbcpgk+fn5KSYmRgkJCfr4449zbPPNN99IUrZSR7du3RQUFOQux2zYsEGS1KtXL492jz76qEfqWZJWrlyp1q1bq3z58srIyHBvDzzwgKTMyYv52blzp3x9feXr66vy5cvrzTffVK9evTR37lyPdvfee69HZiglJUVff/21Hn74YRUrVszj+du3b6+UlBRt3rxZktSkSRNt3bpVQ4cO1dq1a5WcnJxtHE2aNNHChQsVExOjzZs351siKIguXbp43P73v/+tM2fOqF+/fh7jdblcuv/++xUfH6+LFy/m2Wf//v3l5eXl8Zf7ggULFBQUpL/97W95PtbsY/zkk0/UvHlzFS9eXD4+PvL19dW8efO0a9eu6+p3+PDh+vLLL/XJJ5+4MzmSdOHCBY0dO1a33nqrfHx85OPjo+LFi+vixYvX/JwF/VxkadCggSpVquS+HRAQoOrVq+e4QvNyTqfT49/8ajYjn5VIjz76qEqUKOHxnpg/f74cDodHGWjLli168MEHFRoaKm9vb/n6+qpv375yOp369ddfc+0/NDRUnTp10qJFi9yrNs+ePavPP/9cffv2dX8vrFy5UiVLllSnTp08xt+gQQOVK1dOGzduzPM4rlZuk5Ov3J/XJObL7/vHP/6hM2fOaNeuXTp+/LgefPBBvffee9q2bZveeOMNnTlzRr169VJYWJiqVauW56o8oLDZOgiSpO7du+uOO+7Qs88+m+OP2+nTp+Xj46OwsDCP/Q6HQ+XKlXOXRLL+e2X62MfHR6GhoR77jh8/ri+++MIdxGRttWvXliSdOnUq33FXq1ZN8fHxSkhI0I4dO3Tu3DktWbJEISEhHu3Cw8OzHU9GRobeeuutbM+ftbIk6/nHjRunKVOmaPPmzXrggQcUGhqq6OhoJSQkuPv76KOP1K9fP7377ruKiopSqVKl1LdvXyUlJeV7DLm5cszHjx+XJHXt2jXbmF977TUZhqEzZ87k2WflypUVHR2tDz74QKmpqTp16pRWrlypbt26qUSJEnk+1sxjXLZsmR599FFFRERoyZIliouLU3x8vAYMGOCeR3EtYmJiNGvWLM2ePVv333+/x309e/bU22+/rb///e9au3atfvjhB8XHxyssLEyXLl26pucr6Ociy5WfAUny9/fP9/mjo6Oz/ZsXdMvvj4lixYqpe/fuWrNmjZKSkpSRkaElS5bonnvucZcBDx48qBYtWujIkSOaNm2avvvuO8XHx7vnz+U3/gEDBujIkSNav369pMz5RqmpqR7B4/Hjx3Xu3Dn5+fllO4akpKQCfR8URNa/QU5l3DNnzrjLp1ltc2p38eJFpaWlebSVpKCgIPd8ptOnT2v06NGaOnWqbrnlFj3xxBM6c+aM9u3bp6VLl2rMmDHuPxqBombbOUFZHA6HXnvtNbVt21Zz5szJdn9oaKgyMjJ08uRJjy98wzCUlJSkO++8091OypzvExER4W6XkZGR7cukdOnSqlevnl555ZUcx1S+fPl8xx0QEKDGjRsX6Pgud8stt8jb21t9+vTRsGHDcnxMZGSkpMwAbtSoURo1apTOnTunr776SuPHj1e7du106NAh93lGpk6dqqlTp+rgwYNasWKFnnnmGZ04ccI9eTIgICDb8lspM9gqXbp0vmPOavPWW2+padOmOY65bNmy+bwSmZNh169fr88//1xHjx5VWlqae4JsXsw8xiVLligyMlIfffSRx3Hm9NiCWrhwoZ5//nlNnDjRPZk3y/nz57Vy5UpNmDBBzzzzjMfz5Rc45qWgn4vrNXv27Gxz6gqqRo0a+bYZOHCg5s6dq8WLF6t69eo6ceKE3nzzTff9y5cv18WLF7Vs2TJVrlzZvf/nn38u0BjatWun8uXLa8GCBWrXrp0WLFigu+66y2MOWunSpRUaGprruazyC9ILKuv8Z9u3b8+2lH779u0e50erW7euli5dqqSkJI8/7LZv3+7RV05Gjx6tRo0aqUePHpKk1atXa8GCBQoJCdGdd96p++67T6tWrVLr1q1NOS7getg+CJIyJ862bdtWL730kipWrOhxX3R0tF5//XUtWbJETz75pHt/bGysLl686J6Qm7UC6P3331ejRo3c7T7++ONsK746duyoVatWqVq1ah6lqsJQrFgxtW7dWlu2bFG9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pk2bFBERoaFDh2rQoEG59h8XF6f77rvPY1+7du00b948paeny9fX15TjuBoEQQAAWERaWpqSTjh14McqCi5h3rTe5D9cqtwoUYcOHfK4ykFOWSAp8+zkM2fO1KhRozR+/Hj98MMPGjFihPz9/dW3b98cH5OUlJTtOo9ly5ZVRkaGTp06le3i2YWBIAgAAIspXsKh4iUc+TcsIJcy+woODs52qacc27tcaty4sV599VVJmZfp2blzp2bOnJlrECRlv0B21oycK/cXFlaHAQCAqxIeHp7tItq1atXSwYMHc31MuXLllJSU5LHvxIkT8vHxyfEahYWBTBAAABbjNFxymrisyWm4rqp98+bNtWfPHo99v/76qypXrpzrY6KiovTFF1947Fu3bp0aN25cJPOBJDJBAADgKj355JPavHmzXn31Ve3bt08ffPCB5syZo2HDhrnbjBs3zqM0NmTIEB04cECjRo3Srl27NH/+fM2bN09jxowpikOQRBAEAIDluGSYvl2NO++8U5999pk+/PBD1alTRy+//LKmTp2qXr16udscO3bMozwWGRmpVatWaePGjWrQoIFefvllTZ8+vcjOESRxniAAACwjOTlZISEhOrqngumrw8rXOKzz588XaGL0XwWZIAAAYEtMjAYAwGKchiGniYUcM/uyEjJBAADAlsgEAQBgMdcymTm//uyIIAgAAItxyZCTIOi6UQ4DAAC2RCYIAACLoRxmDjJBAADAlsgEAQBgMSyRNweZIAAAYEtkggAAsBjXfzcz+7MjgiAAACzGafISeTP7shLKYQAAwJbIBAEAYDFOI3Mzsz87IhMEAABsiUwQAAAWw8RocxAEAQBgMS455JTD1P7siHIYAACwJTJBAABYjMvI3Mzsz47IBAEAAFsiEwQAgMU4TZ4TZGZfVkImCAAA2BKZIAAALIZMkDkIggAAsBiX4ZDLMHGJvIl9WQnlMAAAYEtkggAAsBjKYeYgEwQAAGyJTBAAABbjlJecJuYxnKb1ZC1kggAAgC2RCQIAwGIMk1eHGTZdHUYQBACAxTAx2hyUwwAAgC2RCQIAwGKchpechokTo7mKPAAAgH2QCQIAwGJccshlYh7DJXumggiCAACwGCZGm4NyGAAAsCUyQQAAWIz5E6PtWQ4jEwQAAGyJTBAAABaTOTHavHk8ZvZlJWSCAACALZEJAgDA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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_geometry_pressure(df=df_nodes_1, valve_percentage=\"100\")" ] }, { "cell_type": "markdown", "id": "b0904325", "metadata": {}, "source": [ "Note that due to the simplicitiy of the model we consider, we will actually have some net outflow on the right most node." ] }, { "cell_type": "code", "execution_count": 25, "id": "0615dd44", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkEAAAHqCAYAAAADN5odAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAABJN0lEQVR4nO3deZxN9ePH8fedfYyZwRhmbGMosqaoDBGNUpZUVMoWvpbkq0KERKVSqR/KniVUWixpIVLkW+PbKJWE9M0WxlaZLLPd+/n94Tv32212jjGn83o+HudR99zP/ZzPue7c+cz78/mc4zLGGAEAADiM38VuAAAAwMVAJwgAADgSnSAAAOBIdIIAAIAj0QkCAACORCcIAAA4Ep0gAADgSHSCAACAI9EJAgAAjkQnKB8LFiyQy+VSSEiI9u7dm+P5Vq1aqX79+pYes3r16rr33nstq69Vq1ZyuVzeLTQ0VJdffrkmT54sj8dj2XH+DqZMmSKXy6XVq1fnWWbOnDlyuVxatmyZ9uzZI5fLpQULFhRfI/Pw18/NhW7bDz/8oPHjx2vPnj05nrv33ntVvXr1C3Lc4vbuu+/K5XJp5syZeZZZu3atXC6XXnzxxULXezHfoyNHjujee+9V+fLlVapUKSUkJGjdunU5ys2YMUPVq1dX2bJl1b17d/3+++8+z2dlZalRo0Z67LHHiqnlgPXoBBVCenq6Hn300YvdjHNWo0YNJSUlKSkpSW+++aYqV66shx56SKNGjbrYTStRunfvruDgYM2bNy/PMvPnz1d0dLQ6duyo2NhYJSUlqX379sXYysK50G374Ycf9Pjjj+faCRo7dqyWL19+QY5b3Nq3b6+YmJgCPxOBgYHq0aNHMbbs3KSnpysxMVHr1q3TlClT9O6776pixYq66aabtGHDBm+5zz77TP/85z/10EMPafHixfryyy81fPhwn7pefPFFnT59WmPGjCnu0wCsY5Cn+fPnG0nmpptuMn5+fuabb77xef66664z9erVs/SYcXFxplevXpbVl1sbMzIyTI0aNUypUqVMRkZGrq/zeDzm9OnTlrWjOGRkZJjMzMzzquPOO+80QUFB5tixYzme2759u5Fkhg0bdl7HuBCs/twU5O233zaSzKefflpsx7xYRowYYSSZrVu35njut99+MyEhIaZz585FqrNXr14mLi7OohYW3rRp04wk88UXX3j3ZWZmmrp165qrr77au2/EiBHmxhtv9D5+7bXXTMWKFb2Pf/75Z1OqVCnzySefFE/DgQuEJKgQRowYoaioKI0cObLAsmlpaRo1apTi4+MVFBSkypUr6/77788RJWdmZmrEiBGKiYlRqVKldO211+rLL7/Mtc6UlBQNGDBAVapUUVBQkOLj4/X4448rKyvrnM4nMDBQjRs31unTp3X06FFJksvl0uDBgzVz5kzVqVNHwcHBevXVVyVJu3bt0j333KMKFSooODhYderU0bRp03zq9Hg8mjBhgmrXrq3Q0FCVKVNGDRs21JQpU7xljh49qv79+6tq1aoKDg5WdHS0mjdvro8//thbJq/hwFatWqlVq1bex+vXr5fL5dKiRYs0bNgwVa5cWcHBwfrpp58kSR9//LESExMVERGhUqVKqXnz5rlG/n/Vt29fZWRk6PXXX8/x3Pz58yVJffr0kZT7kJOV55iWlqZhw4apUaNGioyMVLly5ZSQkKB33323wPPIrW1/Hhb965ad6GzevFldu3ZV9erVFRoaqurVq+vuu+/2GQ5esGCB7rjjDklS69atvXVkHyu3oZ7C/lxUr15dHTp00OrVq3XllVcqNDRUl112Wb5JzIXWt29fSf/79/+zN954Q2lpad7PxLRp09SyZUtVqFBBYWFhatCggZ577jllZmbme4wrrrhCLVq0yLHf7XarcuXKuv322737MjIyNGHCBF122WXez1jv3r29P8v5Wb58uWrXrq2EhATvvoCAAHXv3l1ffvmlDhw4IOnsv1dYWJi3TOnSpZWWluZ9fN999+muu+5S69atCzwmUJIFXOwG2EF4eLgeffRRPfDAA/rkk090/fXX51rOGKNbb71V69at06hRo9SiRQt99913GjdunHc4Kjg4WJLUr18/LVy4UMOHD9cNN9yg77//Xrfffrv++OMPnzpTUlJ09dVXy8/PT4899phq1qyppKQkTZgwQXv27Mn1i7kw/vOf/yggIEBly5b17luxYoU2btyoxx57TDExMapQoYJ++OEHNWvWTNWqVdMLL7ygmJgYffTRRxoyZIiOHTumcePGSZKee+45jR8/Xo8++qhatmypzMxM7dixw+eXXI8ePfT111/rqaeeUq1atfT777/r66+/1vHjx8/pHCRp1KhRSkhI0MyZM+Xn56cKFSpo8eLF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zxiTY9g5L9l/cEyePFkbN27U5s2bNWvWLJ8yHTp00JIlS+R2u3XNNdcU+Rxuu+02DRo0SP/+97+9r89Ota655po8/6h6+umnFRQU5L1WUPbw4alTpxQeHq7MzEylp6cXOKwIlDR0gs7Bs88+q8aNG+vIkSPeYSlJuuGGG9S2bVuNHDlSqampat68uXcVzBVXXOG9mFqdOnXUvXt3TZ48WYGBgWrTpo2+//57TZo0SRERET7HeuKJJ7R27Vo1a9ZMQ4YMUe3atZWWlqY9e/boww8/1MyZM1WlSpULdq5TpkzRtddeqxYtWui+++5T9erV9ccff+inn37Se++9553v0bFjR9WvX19NmjRRdHS09u7dq8mTJysuLk6XXnqpTpw4odatW+uee+7RZZddpvDwcCUnJ2v16tU+y3979Oih7t27a9CgQercubP27t2r5557LsdQSl5Kly6tl156Sb169dKvv/6qLl26qEKFCjp69Ki+/fZbHT16VDNmzCiwnuDgYHXr1k0vvfSSjDGaOHFiga+x+hw7dOigZcuWadCgQerSpYv279+vJ598UrGxsdq1a1eh3o9su3fv1h133KEaNWqod+/e3rlc2a644gpFRESoZcuWev7551W+fHlVr15dGzZs0Ny5c1WmTBmf8tmJwezZsxUeHq6QkBDFx8fnOpRV2J8LO+jTp4+GDh2qnTt3asCAAT4rsW644QYFBQXp7rvv1ogRI5SWlqYZM2bot99+K1L9zz77rO655x6FhobmmIPWtWtXvfbaa2rXrp0eeOABXX311QoMDNQvv/yiTz/9VJ06ddJtt92Wb/3Tpk3THXfcoYkTJ6pChQqaPn26du7c6XMZhz/bsWOHnnvuOX366afeuUm1a9dWXFyc7rvvPt1///168803FRAQkGf6CpRYF21Ktg38eXXYX91zzz1GUo4LEZ45c8aMHDnSxMXFmcDAQBMbG2vuu+8+89tvv/mUS09PN8OGDTMVKlQwISEhpmnTpiYpKSnXlUNHjx41Q4YMMfHx8SYwMNCUK1fONG7c2IwZM8acPHky33Mo7AUdJZn7778/1+d2795t+vTpYypXrmwCAwNNdHS0adasmZkwYYK3zAsvvGCaNWtmypcvb4KCgky1atVM3759zZ49e4wxxqSlpZmBAweahg0bmoiICBMaGmpq165txo0bZ06dOuWt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Kxo/Pz/de++9evzxx7VlyxZdccUVks7eWPHQoUPee1FJ/0uGpLNDPK1atZIxRlOmTNHYsWPzvPx+79699X//93968803fX5RLViwQI0bN1aDBg0knb1H1nfffad///vf3uGUxMREVa5cWV26dNHq1at18803W/4eXEjvvrxKfv5+8rjzvheTx+3RezPXqPtjXRQYZP9hR7fbraysLKWlpWnDhg2aMGGCwsPDdcstt+T7umPHjik5OVkVK1aUJLVr107169fXqFGj1KVLF0nS+PHj9dtvv2nbtm3eqx4nJiYqNDRUw4cP18MPP+zttNvJu7PWFfg5MR6jlXPW6Y6H2snf317rhFz632Rmq+o7X39dCLRgwQKfxyNGjDjnC4yePn1aDz/8sFasWKHMzEy1adNGU6dOVfny5c+xtWcVz796xhfK/xdbtnQpc2vBxSyWlZXlsxXmr+Pp06crMDBQQUFBqlOnjr744gs98cQTGjRoUIGv/WtH6Z577pEk7+X5sy/O1b17d592xcTE6PLLLy9wxdm5nE+JUNjPiTklZe684M3xHu6/Hd4/bwXp3bu3/Pz8fNKg+fPnKywszCf1++STT9SmTRtFRkbK399fgYGBeuyxx3T8+HEdOXIkz/obNGigxo0b+3Sitm/fri+//NI71Cad/SzVr19fjRo18ml/27ZtC1y9eC7nXRy++fT7fH+xZfvj15Pat/1AgeWKk8fj8Xk/izJ5NDAwUOHh4erQoYNiYmK0atUqb+cmL4mJiT5l/P39ddddd+mnn37SL7/8IunsZ6R169aqVKmST9uyO8cbNmyw/HwuNGOMvv9iZ6E+J7+mnFDKHnssvHCycePGacGCBWrfvr3uvvturV27Vvfdd99511tMXd/MIpQt3i/aPXv2KDAw0GfL74c+25133qnk5GRt3rxZO3fu1PHjxzV27NgCXxcQEJBjsmxMTIwkee9Pk30p9ooVK+Zo26ZNm3Ts2DHLz6dkKMrnpChlz8+GDRtyvKd/vjdQbuLi4pSYmKjXX39d6enpOnbsmN5//33dcccd3ntNffnll7rxxhslnV02//nnnys5OVljxoyRJJ05k/+clj59+igpKcl7ef758+crODhYd999t7fM4cOH9d133+Vof3h4uIwx+X6WXn311RyvKwmyMgv/i7YoZYvDE0884fN+FnZC88KFC5Wc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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_geometry_pressure(df=df_nodes_2, valve_percentage=\"0\")" ] }, { "cell_type": "markdown", "id": "d6401687", "metadata": {}, "source": [ "Now the left and right part are completley decoupled as the valve is shut." ] }, { "cell_type": "code", "execution_count": 26, "id": "d1388952", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkEAAAHpCAYAAACFo+izAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAABJ1ElEQVR4nO3de5yN5f7/8fea8zRmBmMwBjODQs6xc4rUKHJIRW2nFLYotoQIFTmkpP2lJIcckkp7R6JQOpDdHjV2OglRBmGcwkTNaa3r94c962eZgxluM+7u1/PxuB+17nWta133sg6f+Vyf675dxhgjAAAAh/Er6QEAAACUBIIgAADgSARBAADAkQiCAACAIxEEAQAARyIIAgAAjkQQBAAAHIkgCAAAOBJBEAAAcCSCoP9ZvHixXC6XQkJCtHfv3lz3t2nTRnXr1rX0OePj43X//fdb1l+bNm3kcrm8W2hoqBo0aKAZM2bI4/FY9jx/BjNnzpTL5dK6devybTN//ny5XC6tWLFCKSkpcrlcWrx4cfENMh/nv28u99h++OEHTZgwQSkpKbnuu//++xUfH39Znre4vfvuu3K5XJozZ06+bdavXy+Xy6V//OMfhe63pF6jnO+0vLbU1FSftud/d+Rs7du392l34sQJ9ejRQ2XKlFG1atU0b968XM/7xRdfKDQ0VNu3b7+sxwdYIaCkB3ClycjI0OOPP67XXnutpIdyUapVq6bXX39dknTkyBHNmTNHjzzyiA4dOqRnn322hEd35ejdu7dGjx6thQsX5vqiz7Fo0SJFR0erc+fO8ng8SkpKUvXq1Yt5pBcWExNzWcf2ww8/6KmnnlKbNm1y/Zg/8cQTevjhhy/L8xa3jh07qmLFilq4cKEGDRqUZ5tFixYpMDBQ9957bzGP7uItWrRItWrV8tkXFRWVq9253x05Spcu7XN7xIgR2rp1q5YuXaoff/xRDz74oGrXrq1WrVpJkrKzs/XAAw9o1KhRql27trUHAlwGBEHnad++vd544w2NHDlSDRo0KOnhFFloaKiaNWvmvX3bbbepVq1amjVrliZPnqzAwMBcjzHGKD09XaGhocU51EuSlZUll8ulgICLewtHRUWpS5cuWrlypY4fP57rR2HHjh1KSkrSiBEjvK/Zua/rlSQ4OLjExnYlBoUXKyAgQH369NG0adP0/fff58r8njx5Uu+8845uv/12RUdHl9Aoi65u3bpq0qTJBdud/92Rl/fff18zZsxQx44d1bFjR61du1bvv/++NwiaPn26MjIyNHbsWEvGDlxuTIedZ9SoUYqKitLo0aMv2DY9PV1jxoxRQkKCgoKCFBsbq8GDB+vkyZM+7bKysjRq1ChVrFhRV111lW644QZ9+eWXefaZmpqqgQMHqnLlygoKClJCQoKeeuopZWdnX9TxBAYGqnHjxvr999919OhRSZLL5dKQIUM0Z84c1a5dW8HBwXr11VclSbt27VLPnj1Vvnx5BQcHq3bt2nrppZd8+vR4PJo8ebJq1qyp0NBQlS5dWvXr19fMmTO9bY4ePaoHHnhAVapUUXBwsKKjo9WyZUt99NFH3jb5TQe2adNGbdq08d7esGGDXC6XXnvtNY0YMUKxsbEKDg7W7t27JUkfffSREhMTFRERoauuukotW7bUxx9/fMHXpn///srMzNQbb7yR675FixZJkvr16ycp7yknK48xPT1dI0aMUMOGDRUZGamyZcuqefPmevfddy94HHmNLb9pEJfL5Z3W2rJli7p37674+HiFhoYqPj5ePXr08JkOXrx4se6++25J0k033eTtI+e58prqKeznIj4+Xp06ddK6det03XXXKTQ0VLVq1dLChQsveMyXS//+/SX9/3//c7355ptKT0/3videeukltW7dWuXLl1dYWJjq1aunadOmKSsrq8DnaNSokTdoOJfb7VZsbKzuuusu777MzExNnjxZtWrV8r7H+vbt6/0sF7f09HSFhYV5b5cqVUrp6emSpJ9//lmTJk3S3LlzFRwcXCLjA4qKTNB5wsPD9fjjj+vhhx/WJ598optvvjnPdsYY3XHHHfr44481ZswYtWrVSt9++63Gjx+vpKQkJSUleb8IBgwYoCVLlmjkyJG65ZZb9P333+uuu+7Sb7/95tNnamqqrr/+evn5+enJJ59U9erVlZSUpMmTJyslJSXPL+bC+OmnnxQQEKAyZcp4961cuVKbNm3Sk08+qYoVK6p8+fL64Ycf1KJFC1WtWlXPP/+8KlasqA8++EBDhw7VsWPHNH78eEnStGnTNGHCBD3++ONq3bq1srKytGPHDp8fuXvvvVdfffWVpkyZomuuuUYnT57UV199pePHj1/UMUjSmDFj1Lx5c82ZM0d+fn4qX768li5dqj59+qhLly569dVXFRgYqLlz56pdu3b64IMPlJiYmG9/bdu2VVxcnBYuXKi///3v3v1ut1uvvfaamjVrpmuvvTbfx1t5jBkZGfr11181cuRIxcbGKjMzUx999JHuuusuLVq0SH369ClSf0lJST63//jjD917771yu90qW7aspLPBU82aNdW9e3eVLVtWhw4d0ssvv6y//OUv+uGHH1SuXDl17NhRTz/9tMaOHauXXnpJ1113naT8M0BF+VxI0jfffKMRI0boscceU4UKFfTKK6+of//+qlGjhlq3bl2kY7bCNddcoxtuuEFLly7VM88845M5XbRokWJjY9WuXTtJZz9XPXv29AZ733zzjaZMmaIdO3YUGMj17dtXDz/8sHbt2qWrr77au//DDz/UwYMH1bdvX0ln/9jo0qWLNm3apFGjRqlFixbau3evxo8frzZt2mjLli2Fyt526tRJR48eVWRkpNq0aaOJEyfmWd/4008/qWzZskpLS1NcXJy6d++uxx9/3Oc5WrRooVmzZqlZs2batWuXPvjgA+/30oMPPqju3bvrxhtvvOCYgCuGgTHGmEWLFhlJJjk52WRkZJhq1aqZJk2aGI/HY4wx5sYbbzR16tTxtl+3bp2RZKZNm+bTz1tvvWUkmXnz5hljjNm+fbuRZB555BGfdq+//rqRZO677z7vvoEDB5pSpUqZvXv3+rSdPn26kWS2bdtW4DHkjDErK8tkZWWZgwcPmscee8xIMnfffbe3nSQTGRlpfv31V5/Ht2vXzlSuXNmcOnXKZ/+QIUNMSEiIt32nTp1Mw4YNCxxLqVKlzLBhwwpsExcX53P85x7HjTfe6L396aefGkmmdevWPu3OnDljypYtazp37uyz3+12mwYNGpjrr7++wOc3xpjx48cbSearr77y7lu9erWRZObPn+/dt2fPHiPJLFq06LIc4/mys7NNVlaW6d+/v2nUqFGBfeY1tvP76tKliylVqpT573//W+Bznj592oSFhZmZM2d69//rX/8yksynn36a6zH33XefiYuL894u7Oci5zhCQkJ83u9//PGHKVu2rBk4cGC+47zccr4LVqxY4d33/fffG0lm3LhxeT7G7XabrKwss2TJEuPv7+/z2Tr/NTp27JgJCgoyY8eO9enjnnvuMRUqVDBZWVnGGGPefPNNI8ksX77cp11ycrKRZGbPnl3gcaxdu9aMGzfOrF692mzcuNHMmjXLVK5c2YSFhZmvv/7ap+24cePM7NmzzSeffGLef/99M2TIEBMQEGBat25t3G63t92OHTvM1VdfbSQZSaZfv37G4/GY1157zZQvX94cP368wDEBVxqCoP85Nwgyxpg33njDSDLLli0zxuQOgkaNGmUkmSNHjvj04/F4TFhYmPnrX/9qjDFm9uzZRpLZsmWLT7usrCwTEBDg82MWGxtrOnfu7A1icrZt27YV6kvvxhtv9H455WyBgYGmV69e5uTJk952ksydd97p89g//vjDBAQEmL///e+5nn/NmjVGklmzZo0xxpiJEycal8tlHnzwQbNu3bpcQZMxxtx8882mdOnSZtKkSSYpKclkZmbmalPUIOjcH2ZjjFm/fr2RZN5+++1cYx49erRxuVzm9OnTBb5mKSkpxs/PzwwZMsS776677jJhYWEmLS3Nuy+vQMPKYzTGmH/+85+mRYsWJiwszOffMCQkpMA+LxQEDRo0yAQEBJi1a9f67P/tt9/MqFGjTPXq1Y2/v7/Pcw4aNMjbrihBUGE/FznH0axZs1x9NmvWzLRv3z7PY8mREyRezJbzh01+zpw5Y8LDw02nTp28+4YPH25cLpfZvXu3d99XX31lOnfubMqWLZvrc7d58+Z8XyNjjOnatauJjY31Bhi//vqrCQ4ONo8++qi3Ta9evUzp0qVNZmZmrmOoWLGiueeeewo8jrzs2bPHlCpVytx+++0XbJvzx9e5waAxZwO+Xbt2maNHjxpjjDl+/LiJjo42r7/+ujHGmJdeeslUq1bNREVFmZ49e+b6Ywu4klATlI/u3bvruuuu07hx4/Kc4z9+/LgCAgJyFUi6XC5VrFjROyWS89+KFSv6tAsICMhVjHv48GGtXr1agYGBPludOnUkSceOHbvguKtXr67k5GRt2bJF33//vU6ePKmlS5cqMjLSp11MTEyu48nOztaLL76Y6/k7dOjg8/xjxozR9OnTtXnzZt12222KiopSYmKitmzZ4u3vrbfe0n333adXXnlFzZs3V9myZdWnT59cS3OL4vwxHz58WJLUrVu3XGN+9tlnZYzRr7/+WmCfcXFxSkxM1BtvvKGMjAwdO3ZM7733nu6++26Fh4cX+Fgrj3HFihW65557FBsbq6VLlyopKUnJycnq16+ft+biYkyePFlz5szR3Llzc62C69mzp2bNmqW//e1v+uCDD/Tll18qOTlZ0dHR+uOPPy7q+Qr7uciR1yql4ODgCz5/YmJirn/zwm4bN24ssO+rrrpK3bt317p165Samqrs7GwtXbpUN954o3cacN++fWrVqpUOHDigmTNnatOmTUpOTvbWz11o/P369dOBAwe0fv16SWfrjTIyMnzqxw4fPqyTJ08qKCgo1zGkpqYW6vvgfPHx8brhhhu0efPmC7bt3bu3JOVq6+fnpxo1aqhcuXKSpJEjR6pRo0bq2bOnPv74Y40ePVpvvfWWdu/eraNHj2rYsGFFHidQXKgJyofL5dKzzz6rW265Jc9zYURFRSk7O1tHjx71+cI3xig1NVV/+ctfvO2ks/U+sbGx3nbZ2dm5fhDKlSun+vXra8qUKXmOqVKlShccd0hISKFWgrhcLp/bZcqUkb+/v+69914NHjw4z8ckJCRIOhvADR8+XMOHD9fJkyf10UcfaezYsWrXrp3279+vq666SuXKldOMGTM0Y8YM7du3T6tWrdJjjz2mI0eOeM/NExISooyMjFzPc+zYMe8XbEFjzmnz4osv5ruqpUKFChd4Jc4Ww65fv17vvvuuDh48qMzMTG+BbEGsPMalS5cqISFBb731ls9x5vXYwlq8eLGeeOIJTZgwwVvMm+PUqVN67733NH78eD322GM+z3ehwLEghf1cXKq5c+fmqqkrrJo1a16wTf/+/TV//nwtWbJE11xzjY4cOaLnn3/ee//KlSt15swZrVixQnFxcd79X3/9daHG0K5dO1WqVEmLFi1Su3bttGjRIjVt2tSnBq1cuXKKiorK91xWFwrS82OMkZ9f4f/+Lajthg0b9NZbb+m7776TJK1du1a33nqr9ztoyJAhhfosASWFIKgAbdu21S233KKJEyeqSpUqPvclJiZq2rRpWrp0qR555BHv/uXLl+vMmTPegtycFUCvv/66Gjdu7G33z3/+M9eKr06dOmnNmjWqXr26TxFzcbjqqqt00003aevWrapfv76CgoIK9bjSpUurW7duOnDggIYNG6aUlJRcxcRVq1bVkCFD9PHHH+vzzz/37o+Pj9e3337r0/bHH3/Uzp078wyCzteyZUuVLl1aP/zwg4YMGVKo8ebljjvuUFRUlBYuXKhDhw55i2OL4lKP0eVyKSgoyCcASk1NLdTqsLysW7dOAwYMUL9+/bwF7edyuVwyxuRaxfPKK6/I7Xb77MtpU5jsUGE/F5eqMIHMpWjatKnq1q2rRYsW6ZprrlFkZKS6du3qvT/n3+nc188Yo/nz5xeq/5w/OGbMmKFNmzZpy5Ytmjt3rk+bTp06admyZXK73WratKkFRyXt2bNHn3/+udq2bXvBtjkrRvP7AyMjI0MDBw7U+PHjVa1aNUlnX4MzZ85425w+fVrGGAtGDlweBEEX8Oyzz6px48Y6cuSId1pKkm655Ra1a9dOo0ePVlpamlq2bOldBdOoUSPvydRq166t3r17a8aMGQoMDFTbtm31/fffa/r06YqIiPB5rokTJ2r9+vVq0aKFhg4dqpo1ayo9PV0pKSlas2aN5syZo8qVK1+2Y505c6ZuuOEGtWrVSg8++KDi4+P122+/affu3Vq9erU++eQTSVLnzp295x6Jjo7W3r17NWPGDMXFxenqq6/WqVOndNNNN6lnz56qVauWwsPDlZycrHXr1vks/7333nvVu3dvPfTQQ+ratav27t2radOmFfocLKVKldKLL76o++67T7/++qu6deum8uXL6+jRo/rmm2909OhRvfzyyxfsJzg4WL169dKLL74oY4yeeeaZCz7G6mPs1KmTVqxYoYceekjdunXT/v37NWnSJMXExGjXrl2Fej1y7NmzR3fffbeqVaumvn375prOaNSokSIiItS6dWs999xzKleunOLj47Vx40YtWLAg1wnyclYSzZs3T+Hh4QoJCVFCQkKeU1mF/VzYQb9+/TR8+HDt3LlTAwcO9FkldcsttygoKEg9evTQqFGjlJ6erpdfflknTpwoUv/PPvusevbsqdDQUP31r3/1ub979+56/fXX1aFDBz388MO6/vrrFRgYqF9++UWffvqpunTpojvvvDPf/tu2bavWrVurfv36ioiI0Hfffadp06bJ5XJp0qRJ3nabNm3SlClTdOedd6patWpKT0/X2rVrNW/ePN18883q3Llznv1PmTJFISEhGj58uHdfu3btNHPmTL3wwguqUaOGJk6cmO/JSIErQolVI11hzi+MPlfPnj2NJJ/CaGPOFhOPHj3axMXFmcDAQBMTE2MefPBBc+LECZ92GRkZZsSIEaZ8+fImJCTENGvWzCQlJeVZNHv06FEzdOhQk5CQYAIDA03ZsmVN48aNzbhx4y5Y5Ht+8XZ+JJnBgwfned+ePXtMv379TGxsrAkMDDTR0dGmRYsWZvLkyd42zz//vGnRooUpV66cCQoKMlWrVjX9+/c3KSkpxhhj0tPTzaBBg0z9+vVNRESECQ0NNTVr1jTjx483Z86c8fbj8XjMtGnTTLVq1UxISIhp0qSJ+eSTT/ItjP7Xv/6V55g3btxoOnbsaMqWLWsCAwNNbGys6dixY77t8/LNN98YScbf398cPHgwz9dF5xQfW32MxhjzzDPPmPj4eBMcHGxq165t5s+f7129dq4LFUbnvF75bXv27DHGGPPLL7+Yrl27mjJlypjw8HDTvn178/333+f5vpwxY4ZJSEjwFlDnPFdeRb+F/VzExcWZjh075nqtL7RyrrgcPXrUBAUFGUnmyy+/zHX/6tWrTYMGDUxISIiJjY01jz76qFm7dm2uIvK8XqMcLVq0MJJMr1698rw/KyvLTJ8+3fs8pUqVMrVq1TIDBw40u3btKnD8w4YNM9dee60JDw83AQEBplKlSqZ3795m586dPu127dplOnToYGJjY01wcLAJCQkx9erVM1OmTDHp6el59v3DDz+YkJAQnwLwHP/4xz9M1apVTUREhOnWrZu3gBq4ErmMIVcJAACch9VhAADAkQiCAACAIxEEAQAARyIIAgAARXbgwAH17t1bUVFRuuqqq9SwYUP997//LfAxGzduVOPGjRUSEqJq1appzpw5xTTavLFEHgAAFMmJEyfUsmVL3XTTTVq7dq3Kly+vn376KdcpNs61Z88edejQQQMGDNDSpUv1+eef66GHHlJ0dLTPebiKE6vDAACwkfT0dGVmZlrerzEm15n5g4ODc51UVZIee+wxff7559q0aVOh+x89erRWrVql7du3e/cNGjRI33zzjZKSki5+4JeATBAAADaRnp6uhLhSSj3ivnDjIipVqpROnz7ts2/8+PGaMGFCrrarVq1Su3btdPfdd2vjxo2KjY3VQw89pAEDBuTbf1JSkm699Vaffe3atdOCBQuUlZWlwMBAS46jKAiCAACwiczMTKUecWvvf+MVEW5dWW/abx7FNU7R/v37fa5mkFcWSJJ+/vlnvfzyyxo+fLjGjh2rL7/8UkOHDlVwcLD69OmT52NSU1NzXc+xQoUKys7O1rFjx3JdJLs4EAQBAGAzpcJdKhXuunDDQvLobF8RERG5LumUZ3uPR02aNNHT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qW+//VZff/21RowYoX79+uVqw+/On8cVGwSdOXNGixYt0tNPPy2X62yEGhMTk6vd22+/rTvvvFMVKlSQy+XSoEGDvD9ua9euVZMmTVSrVi1J0kMPPZTrhw/2l5GRocGDB2v27Nne98r5GjVqpGrVqkmSQkJC1LBhQ/3888/e+3ft2qVly5bpscceK5Yxo/gV5n1S0PdJcHCwEhMTVbp06WIcNYrbuf++p06dkp9f7p/JK+J3x1yGzYGu2Jqgn376SVFRUZo8ebI++ugjhYaGasKECUpMTPRpt2/fPsXFxXlvx8fHa9++ffned+DAAXk8njzf2LCnJ598Ur1791ZCQkKh2qempurtt9/WmjVrJEkej0cDBgzQSy+9pMDAwMs5VJSgwrxPCvo+gXP06dNHn376qSRp3bp1ue7nd+fP44r9F8nKytLPP/+sa6+9Vlu2bNGsWbPUvXt3HT16NFfbc/+qO7/OI7+/+PDnkJSUpOTkZD300EOFap+WlqbOnTtr1KhRuu666yRJ06dPV+vWrdWwYcPLOFKUpKK8Twr6PoEzLFmyRPv379fkyZP16KOP5tmmxH93yARZ4ooNguLi4uTn56devXpJkho0aKCEhARt27bNp13VqlWVkpLivb13717vfP/596WkpCg2NpZo/E9k48aN2rFjhxISEhQfH69ffvlF7dq109q1a3O1/e2339S+fXvdfvvtGj58uHf/Z599psWLFys+Pl433HCDTpw4ofj4eJ04caI4DwWXUWHfJwV9n8B57rvvPn366ac6fvy4z35+d/48rth/lXLlyikxMVEffPCBpLNvsj179qhmzZo+7bp27ap33nlHhw8fljFGc+bMUffu3SVJ7du3V3Jysnbs2CFJmj17tvc+/Dk89thjOnjwoFJSUpSSkqLKlSvrgw8+0G233ebT7vTp02rfvr3atWunJ554wue+9957T/v27VNKSor+/e9/q0yZMkpJSVGZMmWK81BwGRX2fVLQ9wn+/NLS0nTw4EHv7XfeeUdRUVEqW7asT7sr4neHTJAlrtggSJLmzJmjadOmqV69eurSpYvmzZunmJgY/e1vf9OqVaskSdWqVdNTTz2lli1bqnr16ipfvrz69+8vSQoPD9crr7yiO+64QzVq1NCBAwc0duzYkjwkFKNz3yczZ87Ul19+qXfeeUcNGzZUw4YNWbEB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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_geometry_pressure(df=df_nodes_3, valve_percentage=\"55\")" ] }, { "cell_type": "markdown", "id": "8645e473", "metadata": {}, "source": [ "We can observe a large pressure drop across the valve than at 100 % opening." ] }, { "cell_type": "code", "execution_count": 27, "id": "11290be0", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "s3s.CloseModel(False)" ] } ], "metadata": { "kernelspec": { "display_name": "base", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.8" } }, "nbformat": 4, "nbformat_minor": 5 }