{ "cells": [ { "cell_type": "markdown", "id": "5556432f", "metadata": {}, "source": [ "# Tutorial 10: Calculation Settings" ] }, { "cell_type": "markdown", "id": "8899e69a", "metadata": {}, "source": [ "This tutorial demonstrates how to change the calculation type, time frame, thermal settings, and working directory. In addition the manual editing of the XML-Calculation file will be demonstrated. This allows to configure different calculations for one model and seperate them into different directories." ] }, { "cell_type": "markdown", "id": "a832a76f-fa4d-48bf-b341-185b9c1ef7b7", "metadata": {}, "source": [ "## SIR 3S Installation" ] }, { "cell_type": "code", "execution_count": 1, "id": "3f9a8fc6-2036-4c86-b4d9-a45a87993d95", "metadata": {}, "outputs": [], "source": [ "SIR3S_SIRGRAF_DIR = r\"C:\\3S\\SIR 3S\\SirGraf-90-15-00-24_Quebec-Upd2\" #change to local path" ] }, { "cell_type": "markdown", "id": "7887be8d", "metadata": {}, "source": [ "## Imports" ] }, { "cell_type": "markdown", "id": "bbfb80b5", "metadata": {}, "source": [ "Note: The SIR 3S Toolkit requires the Sir3S_Toolkit.dll included in SIR 3S installations (version Quebec and higher)." ] }, { "cell_type": "code", "execution_count": 2, "id": "48372080", "metadata": {}, "outputs": [], "source": [ "import sir3stoolkit" ] }, { "cell_type": "markdown", "id": "e12d61e9", "metadata": {}, "source": [ "The core of sir3stoolkit is a Python wrapper around basic functionality of SIR 3S, offering a low-level access to the creation, modification and simulation of SIR 3S models. In the future pure python subpackages may be added." ] }, { "cell_type": "code", "execution_count": 3, "id": "f1baf699", "metadata": {}, "outputs": [], "source": [ "from sir3stoolkit.core import wrapper" ] }, { "cell_type": "code", "execution_count": 4, "id": "89da1276", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sir3stoolkit" ] }, { "cell_type": "markdown", "id": "6d982834", "metadata": {}, "source": [ "The [wrapper package](https://3sconsult.github.io/sir3stoolkit/references/sir3stoolkit.core.html#sir3stoolkit.core.wrapper.Initialize_Toolkit) has to be initialized with reference to a SIR 3S (SIR Graf) installation." ] }, { "cell_type": "code", "execution_count": 5, "id": "817b0ebf", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "[2026-08-04 16:54:58,766] INFO in sir3stoolkit.core.wrapper: [Initialization] Using provided SirGraf path: C:\\3S\\SIR 3S\\SirGraf-90-15-00-24_Quebec-Upd2\n", "[2026-08-04 16:54:58,766] INFO in sir3stoolkit.core.wrapper: [Initialization] Using provided SirGraf path: C:\\3S\\SIR 3S\\SirGraf-90-15-00-24_Quebec-Upd2\n", "[2026-08-04 16:54:58,807] INFO in sir3stoolkit.core.wrapper: [Initialization] Initializing toolkit with SirGraf path: C:\\3S\\SIR 3S\\SirGraf-90-15-00-24_Quebec-Upd2\n" ] } ], "source": [ "wrapper.Initialize_Toolkit(SIR3S_SIRGRAF_DIR)" ] }, { "cell_type": "markdown", "id": "0352dd43", "metadata": {}, "source": [ "## Initialization" ] }, { "cell_type": "markdown", "id": "e14ffe06", "metadata": {}, "source": [ "The SIR 3S Toolkit contains two classes: [SIR3S_Model](https://3sconsult.github.io/sir3stoolkit/references/sir3stoolkit.core.html#sir3stoolkit.core.wrapper.SIR3S_Model) (model and data) and [SIR3S_View](https://3sconsult.github.io/sir3stoolkit/references/sir3stoolkit.core.html#sir3stoolkit.core.wrapper.SIR3S_View) (depiction in SIR Graf). All SIR 3S Toolkit functionality is accessed via the methods of these classes." ] }, { "cell_type": "code", "execution_count": 6, "id": "7e40a5af", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "[2026-08-04 16:54:59,325] INFO in sir3stoolkit.core.wrapper: [Model Class Initialization] Initialization complete\n" ] } ], "source": [ "s3s = wrapper.SIR3S_Model()" ] }, { "cell_type": "markdown", "id": "34309a14", "metadata": {}, "source": [ "## Open Model" ] }, { "cell_type": "code", "execution_count": 7, "id": "1d67ee5d", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "[2026-08-04 16:55:07,949] INFO in sir3stoolkit.core.wrapper: Model is open for further operation\n" ] } ], "source": [ "s3s.OpenModel(dbName=r\"Toolkit_Tutorial10_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": "343db525", "metadata": {}, "source": [ "Now the model has been opened. All SIR 3S Toolkit operations now apply to this model until another one is opened." ] }, { "cell_type": "code", "execution_count": 8, "id": "ee09e786", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "NetworkType.Water\n" ] } ], "source": [ "print(s3s.GetNetworkType()) # to check that the correct model is responsive, model we are trying to open was created with type Water" ] }, { "cell_type": "markdown", "id": "fff45e6b", "metadata": {}, "source": [ "# GetDBSourcePath()" ] }, { "cell_type": "markdown", "id": "4226f8a3", "metadata": {}, "source": [ "We can use the method [GetDBSourcePath()](https://3sconsult.github.io/sir3stoolkit/modules.html#sir3stoolkit.core.wrapper.SIR3S_Model.GetDBSourcePath) to retrieve basic information regarding the db file. We get a tuple of four strings as a return." ] }, { "cell_type": "code", "execution_count": 60, "id": "eddebff4", "metadata": {}, "outputs": [], "source": [ "(dbPath, connectionString, dbVendor, dbName) = s3s.GetDBSourcePath()" ] }, { "cell_type": "code", "execution_count": 61, "id": "e0737055", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'Toolkit_Tutorial10_Model.db3'" ] }, "execution_count": 61, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dbPath" ] }, { "cell_type": "code", "execution_count": 62, "id": "3a6a0b35", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'provider=System.Data.SQLite;data source=\"Toolkit_Tutorial10_Model.db3\";version=3'" ] }, "execution_count": 62, "metadata": {}, "output_type": "execute_result" } ], "source": [ "connectionString" ] }, { "cell_type": "code", "execution_count": 63, "id": "8cc80f39", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'SQLite'" ] }, "execution_count": 63, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dbVendor" ] }, { "cell_type": "code", "execution_count": 64, "id": "1c78e83a", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'Toolkit_Tutorial10_Model'" ] }, "execution_count": 64, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dbName" ] }, { "cell_type": "markdown", "id": "46eb8327", "metadata": {}, "source": [ "# GetWorkingDirectory()" ] }, { "cell_type": "markdown", "id": "d75dcb15", "metadata": {}, "source": [ "The working directory of SIR 3S holds its calculation results." ] }, { "cell_type": "markdown", "id": "b298710d", "metadata": {}, "source": [ "We can use the method [GetWorkingDirectory()](https://3sconsult.github.io/sir3stoolkit/modules.html#sir3stoolkit.core.wrapper.SIR3S_Model.GetWorkingDirectory) to get the currently used working directory currently assigned to the model." ] }, { "cell_type": "code", "execution_count": 9, "id": "b048de33", "metadata": {}, "outputs": [], "source": [ "working_directory_1 = s3s.GetWorkingDirectory()" ] }, { "cell_type": "code", "execution_count": 10, "id": "ad055ae7", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "c:\\Users\\aUsername\\3S\\sir3stoolkit\\docs\\source\\tutorials\\SIR3S_Model\\Tutorial010_Assets\\WDToolkit_Tutorial10_Model_1\n" ] } ], "source": [ "print(working_directory_1)" ] }, { "cell_type": "markdown", "id": "e81cc04e", "metadata": {}, "source": [ "# AllocateWorkingDirectory()" ] }, { "cell_type": "markdown", "id": "149efb61", "metadata": {}, "source": [ "We can use the method [AllocateWorkingDirectory()](https://3sconsult.github.io/sir3stoolkit/modules.html#sir3stoolkit.core.wrapper.SIR3S_Model.AllocateWorkingDirectory) to change the working directory of the model to a different directory. The basic file structure needed to hold SIR 3S calculation results will be created automatically (if it does not exist already). This must be a valid, existing, writable and readable Directory Path." ] }, { "cell_type": "code", "execution_count": 11, "id": "b65a3b91", "metadata": {}, "outputs": [], "source": [ "working_directory_2 = r\"C:\\Users\\aUsername\\3S\\sir3stoolkit\\docs\\source\\tutorials\\SIR3S_Model\\Tutorial010_Assets\\WDToolkit_Tutorial10_Model_2\"" ] }, { "cell_type": "code", "execution_count": 12, "id": "970910bc", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "s3s.AllocateWorkingDirectory(strDirectory=working_directory_2)" ] }, { "cell_type": "code", "execution_count": 13, "id": "525ac822", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "c:\\Users\\aUsername\\3S\\sir3stoolkit\\docs\\source\\tutorials\\SIR3S_Model\\Tutorial010_Assets\\WDToolkit_Tutorial10_Model_2\n" ] } ], "source": [ "print(s3s.GetWorkingDirectory())" ] }, { "cell_type": "markdown", "id": "09941919", "metadata": {}, "source": [ "# CreateWorkingDirectory()" ] }, { "cell_type": "markdown", "id": "82e25ad9", "metadata": {}, "source": [ "We can use the method [CreateWorkingDirectory()](https://3sconsult.github.io/sir3stoolkit/modules.html#sir3stoolkit.core.wrapper.SIR3S_Model.CreateWorkingDirectory) to create a SIR 3S working directory and assign it to the currently open model via Toolkit. The param strDirectory is the parent dir, where the new working dir should be created. It will take the standard working dir name 'WD{Model_Name}'." ] }, { "cell_type": "code", "execution_count": 14, "id": "f9a8d3a3", "metadata": {}, "outputs": [], "source": [ "working_directory_new_parent = r\"C:\\Users\\aUsername\\3S\\sir3stoolkit\\docs\\source\\tutorials\\SIR3S_Model\\Tutorial010_Assets\"" ] }, { "cell_type": "code", "execution_count": 15, "id": "3c9fdb07", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "s3s.CreateWorkingDirectory(strDirectory=working_directory_new_parent)" ] }, { "cell_type": "code", "execution_count": 16, "id": "1d34f3b7", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "C:\\Users\\aUsername\\3S\\sir3stoolkit\\docs\\source\\tutorials\\SIR3S_Model\\Tutorial010_Assets\\WDToolkit_Tutorial10_Model\n" ] } ], "source": [ "print(s3s.GetWorkingDirectory())" ] }, { "cell_type": "markdown", "id": "2df7c47d", "metadata": {}, "source": [ "# GetCalculationType()" ] }, { "cell_type": "markdown", "id": "fe75009c", "metadata": {}, "source": [ "We can use the method GetCalculationType() to check, what calculation type is currently set for a model." ] }, { "cell_type": "code", "execution_count": 17, "id": "0d008fbb", "metadata": {}, "outputs": [], "source": [ "calculation_type = s3s.GetCalculationType()" ] }, { "cell_type": "code", "execution_count": 18, "id": "d648cce3", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "LowFreq\n" ] } ], "source": [ "print(calculation_type)" ] }, { "cell_type": "markdown", "id": "af2a65c0", "metadata": {}, "source": [ "# SetCalculationType()" ] }, { "cell_type": "markdown", "id": "8260aeef", "metadata": {}, "source": [ "We can use the method [SetCalculationType()](https://3sconsult.github.io/sir3stoolkit/modules.html#sir3stoolkit.core.wrapper.SIR3S_Model.SetCalculationType) to change between different calculation types. The types are saved in python enum, and have to be accessed via this enum." ] }, { "cell_type": "code", "execution_count": 19, "id": "419d6bd2", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['HighFreq_AUTO', 'HighFreq_CHAR', 'Instat_FiniteDiff', 'LoopForLoadingCondition', 'LowFreq', 'Quasi_Stat', 'SteadyState', 'Unknown']\n" ] } ], "source": [ "CalculationType = [item for item in dir(s3s.CalculationType) if not (item.startswith('__') and item.endswith('__'))]\n", "print(CalculationType)" ] }, { "cell_type": "markdown", "id": "75cd736a", "metadata": {}, "source": [ "Not every calculation type is applicable to every network type (s3s.NetworkType). See main SIR 3S manual for details." ] }, { "cell_type": "markdown", "id": "0b0edecb", "metadata": {}, "source": [ "For Water and DH networks. Only SteadyState | Quasi_Stat | LowFreq | HighFreq_CHAR | HighFreq_AUTO | LoopForLoadingCondition are valid" ] }, { "cell_type": "markdown", "id": "5a246be2", "metadata": {}, "source": [ "For Gas/Steam Networks, only SteadyState | Quasi_Stat | HighFreq_CHAR | Instat_FiniteDiff | LoopForLoadingCondition are valid" ] }, { "cell_type": "markdown", "id": "4ee34c14", "metadata": {}, "source": [ "Let's set this model to \"high-frequency automatic\" calculations." ] }, { "cell_type": "code", "execution_count": 20, "id": "f7987ed3", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "s3s.SetCalculationType(s3s.CalculationType.HighFreq_AUTO)" ] }, { "cell_type": "code", "execution_count": 21, "id": "bbe6b849", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "HighFreq_AUTO\n" ] } ], "source": [ "print(s3s.GetCalculationType())" ] }, { "cell_type": "markdown", "id": "84501836", "metadata": {}, "source": [ "# Adjust stationary time stamp" ] }, { "cell_type": "code", "execution_count": 22, "id": "a5ce2a66", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Current Stationary Timestamp: 29.04.2026, 14:10:00\n" ] } ], "source": [ "print(f\"Current Stationary Timestamp: {s3s.GetValue(Tk=s3s.GetTksofElementType(s3s.ObjectTypes.GeneralSection)[0], propertyName='bz.Cdat')[0]}, {s3s.GetValue(Tk=s3s.GetTksofElementType(s3s.ObjectTypes.GeneralSection)[0], propertyName='bz.CUhr')[0]}\")" ] }, { "cell_type": "code", "execution_count": 23, "id": "fa4d9d57", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "[2026-08-04 16:55:09,183] INFO in sir3stoolkit.core.wrapper: Value is set\n" ] } ], "source": [ "s3s.SetValue(Tk=s3s.GetTksofElementType(s3s.ObjectTypes.GeneralSection)[0], propertyName=\"bz.Cdat\", Value=\"01.03.2026\")" ] }, { "cell_type": "code", "execution_count": 24, "id": "bcdac30c", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "[2026-08-04 16:55:09,233] INFO in sir3stoolkit.core.wrapper: Value is set\n" ] } ], "source": [ "s3s.SetValue(Tk=s3s.GetTksofElementType(s3s.ObjectTypes.GeneralSection)[0], propertyName=\"bz.CUhr\", Value=\"12:00:00\")" ] }, { "cell_type": "code", "execution_count": 25, "id": "2f30acb0", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Adjusted Stationary Timestamp: 01.03.2026, 12:00:00\n" ] } ], "source": [ "print(f\"Adjusted Stationary Timestamp: {s3s.GetValue(Tk=s3s.GetTksofElementType(s3s.ObjectTypes.GeneralSection)[0], propertyName='bz.Cdat')[0]}, {s3s.GetValue(Tk=s3s.GetTksofElementType(s3s.ObjectTypes.GeneralSection)[0], propertyName='bz.CUhr')[0]}\")" ] }, { "cell_type": "markdown", "id": "4e2a0443", "metadata": {}, "source": [ "# GetSimulationTimeFrame()" ] }, { "cell_type": "markdown", "id": "caaa26c7", "metadata": {}, "source": [ "We can use the method [GetSimulationTimeFrame()](https://3sconsult.github.io/sir3stoolkit/modules.html#sir3stoolkit.core.wrapper.SIR3S_Model.GetSimulationTimeFrame) to check the time frame of the model." ] }, { "cell_type": "code", "execution_count": 26, "id": "33a86714", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(6.0, 1200.0)\n" ] } ], "source": [ "print(s3s.GetSimulationTimeFrame())" ] }, { "cell_type": "markdown", "id": "94aa0596", "metadata": {}, "source": [ "We get such a tuple: (increment, end time) both in seconds" ] }, { "cell_type": "markdown", "id": "4074e963", "metadata": {}, "source": [ "# SetSimulationTimeFrame()" ] }, { "cell_type": "markdown", "id": "52642cbb", "metadata": {}, "source": [ "After setting the stationary timestamp we can use the method [SetSimulationTimeFrame()](https://3sconsult.github.io/sir3stoolkit/modules.html#sir3stoolkit.core.wrapper.SIR3S_Model.SetSimulationTimeFrame) to set time stamp increment and end time for the simulation (both in seconds)." ] }, { "cell_type": "code", "execution_count": 27, "id": "b540c2b1", "metadata": {}, "outputs": [], "source": [ "s3s.SetSimulationTimeFrame(timeStep=30.0, terminationTime=3600.0) # We increment 30s until we reach 3600s (1 hour) for the simulation. " ] }, { "cell_type": "code", "execution_count": 28, "id": "a8191290", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(30.0, 3600.0)\n" ] } ], "source": [ "print(s3s.GetSimulationTimeFrame())" ] }, { "cell_type": "markdown", "id": "c6e56f59", "metadata": {}, "source": [ "# GetThermalCalculationParemeters()" ] }, { "cell_type": "markdown", "id": "6c9810a3", "metadata": {}, "source": [ "We can use the method [GetThermalCalculationParemeters()](https://3sconsult.github.io/sir3stoolkit/modules.html#sir3stoolkit.core.wrapper.SIR3S_Model.GetThermalCalculationParemeters) to determine how the thermal calculation parameters are currently set." ] }, { "cell_type": "code", "execution_count": 29, "id": "e3774906", "metadata": {}, "outputs": [], "source": [ "thermal_params = s3s.GetThermalCalculationParemeters()" ] }, { "cell_type": "markdown", "id": "a323efe7", "metadata": {}, "source": [ "We get such a tuple: (activateThermalcalculation, startWithTempField, terminationPrecision, transientThermalcalculation) " ] }, { "cell_type": "code", "execution_count": 30, "id": "ca30e900", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "False" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "thermal_params[0] # activateThermalcalculation" ] }, { "cell_type": "code", "execution_count": 31, "id": "6b5d8b1e", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "False" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "thermal_params[1] # startWithTempField" ] }, { "cell_type": "code", "execution_count": 32, "id": "1500aa87", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.10000000149011612" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "thermal_params[2] # terminationPrecision" ] }, { "cell_type": "code", "execution_count": 33, "id": "835df851", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "False" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "thermal_params[3] # transientThermalcalculation" ] }, { "cell_type": "markdown", "id": "a1730ddd", "metadata": {}, "source": [ "# SetThermalCalculationParemeters()" ] }, { "cell_type": "markdown", "id": "997be7fa", "metadata": {}, "source": [ "We can use the method [SetThermalCalculationParemeters()](https://3sconsult.github.io/sir3stoolkit/modules.html#sir3stoolkit.core.wrapper.SIR3S_Model.SetThermalCalculationParemeters) to adjust the thermal calculation parameters." ] }, { "cell_type": "code", "execution_count": 34, "id": "92588f56", "metadata": {}, "outputs": [], "source": [ "s3s.SetThermalCalculationParemeters(activateThermalcalculation=True\n", " ,startWithTempField=True\n", " ,terminationPrecision=0.05\n", " ,transientThermalcalculation=True) # This Parameter only has effect on High Frequency AUTO Calculation, HF CHAR Calculation and Low Freq. Calculation on Water and DH Networks. For more Precisions, please refer to the SirCalc Documentation." ] }, { "cell_type": "code", "execution_count": 35, "id": "487ee3e5", "metadata": {}, "outputs": [], "source": [ "thermal_params = s3s.GetThermalCalculationParemeters()" ] }, { "cell_type": "markdown", "id": "60e7ffb8", "metadata": {}, "source": [ "We get such a tuple: (activateThermalcalculation, startWithTempField, terminationPrecision, transientThermalcalculation) " ] }, { "cell_type": "code", "execution_count": 36, "id": "a9e64e1d", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "thermal_params[0] # activateThermalcalculation" ] }, { "cell_type": "code", "execution_count": 37, "id": "63bc1cc3", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ "thermal_params[1] # startWithTempField" ] }, { "cell_type": "code", "execution_count": 38, "id": "f08435aa", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.05000000074505806" ] }, "execution_count": 38, "metadata": {}, "output_type": "execute_result" } ], "source": [ "thermal_params[2] # terminationPrecision" ] }, { "cell_type": "code", "execution_count": 39, "id": "44f3b618", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ "thermal_params[3] # transientThermalcalculation" ] }, { "cell_type": "markdown", "id": "62aa4d99", "metadata": {}, "source": [ "# 1st Calculation" ] }, { "cell_type": "code", "execution_count": 40, "id": "1b3d90e5", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" } ], "source": [ "s3s.AllocateWorkingDirectory(strDirectory=working_directory_1)" ] }, { "cell_type": "markdown", "id": "1de1cbad", "metadata": {}, "source": [ "Make sure to save the changes before calculating." ] }, { "cell_type": "code", "execution_count": 41, "id": "1b5cc8ac", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "[2026-08-04 16:55:15,376] INFO in sir3stoolkit.core.wrapper: Changes saved successfully\n" ] } ], "source": [ "s3s.SaveChanges()" ] }, { "cell_type": "markdown", "id": "b1be859f", "metadata": {}, "source": [ "We use the [ExecCalculation()](https://3sconsult.github.io/sir3stoolkit/references/sir3stoolkit.core.html#sir3stoolkit.core.wrapper.SIR3S_Model.ExecCalculation) function to trigger a new Calculation of the SIR 3S Model using SIR Calc (version that is specfied in the components of the SIR Graf, that was used to initialize the Toolkit)." ] }, { "cell_type": "code", "execution_count": 42, "id": "c0b386c2", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "[2026-08-04 16:55:22,642] INFO in sir3stoolkit.core.wrapper: Model Calculation is complete\n" ] } ], "source": [ "s3s.ExecCalculation(waitForSirCalcToExit=True)" ] }, { "cell_type": "markdown", "id": "7a08ee83", "metadata": {}, "source": [ "We can check the status of the calculation" ] }, { "cell_type": "code", "execution_count": 43, "id": "0a372505", "metadata": {}, "outputs": [], "source": [ "Exit_status = s3s.GetResultValue(s3s.GetTksofElementType(s3s.ObjectTypes.GeneralSection)[0],\"EXSTAT\")[0]" ] }, { "cell_type": "code", "execution_count": 44, "id": "c0ef0a1c", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0\n" ] } ], "source": [ "print(Exit_status)" ] }, { "cell_type": "markdown", "id": "13d69a54", "metadata": {}, "source": [ "German Interpretation:\n", "- -1=undefiniert\n", "- 0=normal\n", "- 1=Benutzerabbruch\n", "- 2=fragwürdige Ergebnisse\n", "- 3=schlechte oder ungültige Ergebnisse\n", "- 100=Ergebnisse halten für Analyse\n", "- 101=Stopp-Signal für Analyse" ] }, { "cell_type": "markdown", "id": "9dbdbfb4", "metadata": {}, "source": [ "English Interpretation:\n", "- -1=undefined\n", "- 0=normal\n", "- 1=user-interrupt\n", "- 2=questionable results\n", "- 3=bad or invald result\n", "- 100=holding results for analysis\n", "- 101=stop-signal for analysis" ] }, { "cell_type": "markdown", "id": "0387f803", "metadata": {}, "source": [ "Our results are normal." ] }, { "cell_type": "markdown", "id": "84f55c6a", "metadata": {}, "source": [ "Let's look at the pressure of a singular node to later compare it with another calculation." ] }, { "cell_type": "code", "execution_count": 45, "id": "e2d33a10", "metadata": {}, "outputs": [ { "data": { "image/png": "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1YQJE3TgwAHVr1+fzhUgMzNTr7zyinr06KH9+/erYcOG+tOf/qSbb75ZkvT2229r9OjR2rp1q88rjW0NGzZUu3bt9Itf/ELh8BfHEJxz6tWrl1588UU1bdpUktS9e3c/lxkI4XBYubm5qlevnjp16qSBAwfqgQceiOx/8cUX9dRTT2nDhg0+rjL2eT17BPaatlOnTn3l9RC1a9fWqVOnDFcUXJs3b9add94Z+QfsxXJycrR9+3bjVQXPrl271LVr18jrLl266N1331XPnj119uxZjRo1yr/FBczBgwf1jW98Q5JUv359JSYmFnlgZuvWrbV3716/lhcYGzdu1I9//GNNnDhRr776qho0aCBJCoVC6tSpk1q1auXzCoMlFApJ+uKfJT179iyy77vf/W6RIQ7l4/XsEdihrUePHho9erRee+01paWlFdl34MABPfjgg6VOwrg0bdq0UefOnTVy5MgS969fv16///3vjVcVPHXq1NHevXvVpEmTyLbWrVvr3Xff1Xe/+13t27fPv8UFTO3atfXZZ5+pUaNGkqQBAwaoRo0akf3Hjx9XfHy8T6sLjlq1aunNN9/Uc889p06dOuk3v/mNBg4c6PeyAuuvf/2rqlevrsTExGKDw6lTpyJHO1F+Xs8egR3ann32WfXr108NGzZUmzZtijzgbtOmTWrVqpX+8pe/+L3MQPj2t7+tbdu2lbo/JSVFN9xwg+GKgunb3/625s2bp+uvv77I9latWmnx4sXq0aOHTysLnquvvlqrVq2KnPqfNWtWkf2rVq1Sy5Yt/VhaII0cOVLdu3fXoEGD9Oc//9nv5QTWkCFDIv958eLF6ty5c+R1dna2rrzySj+WFShezx6BvaZNks6fP6+//e1vJT7grk+fPvxbBWLKxo0btWbNGg0bNqzE/R999JHmzp2rcePGGa8seI4cOaJwOFzk6NqXLVy4UImJifrOd75juq6gO3PmjP793/9dS5Ys0RtvvFHqJReoeG+99ZaqVKmivn37+r2UmOfl7BHooQ0AACAoONQEAAAQAyrF0Na0aVP17t27yLZevXqpWbNmPq0ouGhtg852aG2DznZobcOLzoG9EeHLhgwZorp16xbZdsstt+jQoUM+rSi4aG2DznZobYPOdmhtw4vOXNMGAAAQAyrF6VEAAIBYF+ih7dSpU3r//fe1efPmYvtOnz6t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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "from matplotlib.ticker import MaxNLocator\n", "\n", "timestamps = s3s.GetTimeStamps()[0]\n", "values_1 = [float(s3s.GetResultfortimestamp(Tk=\"4769939796812007971\", property=\"PH\", timestamp=t)[0]) for t in timestamps]\n", "\n", "plt.plot(timestamps, values_1, marker=\"o\")\n", "plt.ylim(4, 6)\n", "plt.xlim(0, len(timestamps) - 1)\n", "plt.xticks(rotation=90)\n", "plt.xlabel(\"Timestamp\")\n", "plt.gca().xaxis.set_major_locator(MaxNLocator(nbins=7))\n", "plt.ylabel(\"PH\")\n", "plt.title(\"PH over time\")\n", "plt.tight_layout()\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "dca77f9c", "metadata": {}, "source": [ "# WriteSirCalcXmlFile()" ] }, { "cell_type": "markdown", "id": "5f011528", "metadata": {}, "source": [ "The method [WriteSirCalcXmlFile()](https://3sconsult.github.io/sir3stoolkit/modules.html#sir3stoolkit.core.wrapper.SIR3S_Model.WriteSirCalcXmlFile) will write XML calculation file and mx1 file based on the current SIR 3S model." ] }, { "cell_type": "markdown", "id": "382d2cef", "metadata": {}, "source": [ "When running [ExecCalculation()](https://3sconsult.github.io/sir3stoolkit/references/sir3stoolkit.core.html#sir3stoolkit.core.wrapper.SIR3S_Model.ExecCalculation) these files will be created and the sent to SirCalc.exe to run the simulation. But now we have the files without instantly running a simulation with them. We can instead manually edit the XML calculation file and later on manually sent it to SirCalc.exe for the simulation." ] }, { "cell_type": "markdown", "id": "15ab8a2d", "metadata": {}, "source": [ "You should only manually edit these files, if you know what you are doing. Otherwise your calculation configuration could become deprecated. If you mess up, you can reset to the current SIR 3S model state by reexecuting [WriteSirCalcXmlFile()](https://3sconsult.github.io/sir3stoolkit/modules.html#sir3stoolkit.core.wrapper.SIR3S_Model.WriteSirCalcXmlFile)." ] }, { "cell_type": "code", "execution_count": 46, "id": "72793a0d", "metadata": {}, "outputs": [], "source": [ "xml_path = s3s.WriteSirCalcXmlFile(saveItInThisDirectory=working_directory_1)" ] }, { "cell_type": "code", "execution_count": 47, "id": "020ff021", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "c:\\Users\\aUsername\\3S\\sir3stoolkit\\docs\\source\\tutorials\\SIR3S_Model\\Tutorial010_Assets\\WDToolkit_Tutorial10_Model_1\\B1\\V0\\BZ1\\M-1-0-1.XML\n" ] } ], "source": [ "print(xml_path)" ] }, { "cell_type": "markdown", "id": "b12ab33b", "metadata": {}, "source": [ "# Edit XML File" ] }, { "cell_type": "markdown", "id": "9d08e89d", "metadata": {}, "source": [ "Now we can make any kind of change to the XML-File which mainly contains table values." ] }, { "cell_type": "markdown", "id": "15cd4d47", "metadata": {}, "source": [ "We now perform some silly XML edit by flipping the rpm values from rising to sinking over time. This is just for demonstration, not a realistic edit." ] }, { "cell_type": "code", "execution_count": 48, "id": "e6154a09", "metadata": {}, "outputs": [], "source": [ "import re\n", "import xml.etree.ElementTree as ET\n", "\n", "def flip_pumd_rowt_n(xml_file, pumd_fk):\n", " with open(xml_file, encoding=\"Windows-1252\") as f:\n", " text = f.read()\n", "\n", " row_pattern = re.compile(\n", " r']*\\bfk=\"{}\"[^>]*/>'.format(re.escape(pumd_fk))\n", " )\n", " rows = row_pattern.findall(text)\n", "\n", " def get_attr(tag, name):\n", " return re.search(r'{}=\"([^\"]*)\"'.format(name), tag).group(1)\n", "\n", " rows_sorted = sorted(rows, key=lambda tag: float(get_attr(tag, \"ZEIT\")))\n", " n_values = [get_attr(tag, \"N\") for tag in rows_sorted]\n", " n_values_flipped = list(reversed(n_values))\n", "\n", " for tag, new_n in zip(rows_sorted, n_values_flipped):\n", " old_n = get_attr(tag, \"N\")\n", " new_tag = re.sub(r'N=\"{}\"'.format(re.escape(old_n)), 'N=\"{}\"'.format(new_n), tag)\n", " text = text.replace(tag, new_tag)\n", "\n", " with open(xml_file, \"w\", encoding=\"Windows-1252\") as f:\n", " f.write(text)" ] }, { "cell_type": "code", "execution_count": 49, "id": "3aedd63b", "metadata": {}, "outputs": [], "source": [ "flip_pumd_rowt_n(xml_path, pumd_fk=\"4778790377408093653\")" ] }, { "cell_type": "markdown", "id": "7713f9fb", "metadata": {}, "source": [ "# 2cd Calculation" ] }, { "cell_type": "markdown", "id": "8ae2e4f1", "metadata": {}, "source": [ "Now let's calculate with our changed XML File." ] }, { "cell_type": "markdown", "id": "7ebced76", "metadata": {}, "source": [ "We need to provide the path to the SirCalc.exe we want to use." ] }, { "cell_type": "code", "execution_count": 50, "id": "d6062a20", "metadata": {}, "outputs": [], "source": [ "SIRCALCDIR = r\"C:\\3S\\SIR 3S\\SirCalc-90-15-02-46_Quebec.fix7\\SirCalc.exe\"" ] }, { "cell_type": "code", "execution_count": 51, "id": "0219bbbc", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Command ['C:\\\\3S\\\\SIR 3S\\\\SirCalc-90-15-02-46_Quebec.fix7\\\\SirCalc.exe', 'c:\\\\Users\\\\aUsername\\\\3S\\\\sir3stoolkit\\\\docs\\\\source\\\\tutorials\\\\SIR3S_Model\\\\Tutorial010_Assets\\\\WDToolkit_Tutorial10_Model_1\\\\B1\\\\V0\\\\BZ1\\\\M-1-0-1.XML'] exited with 0.\n" ] } ], "source": [ "import subprocess\n", "\n", "with subprocess.Popen([SIRCALCDIR, xml_path]) as process:\n", " process.wait()\n", " print(f'Command {process.args} exited with {process.returncode}.')" ] }, { "cell_type": "markdown", "id": "19d12767", "metadata": {}, "source": [ "We can check the status of the calculation" ] }, { "cell_type": "code", "execution_count": 52, "id": "75600947", "metadata": {}, "outputs": [], "source": [ "Exit_status = s3s.GetResultValue(s3s.GetTksofElementType(s3s.ObjectTypes.GeneralSection)[0],\"EXSTAT\")[0]" ] }, { "cell_type": "code", "execution_count": 53, "id": "f23ce6c4", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0\n" ] } ], "source": [ "print(Exit_status)" ] }, { "cell_type": "markdown", "id": "dda147ea", "metadata": {}, "source": [ "German Interpretation:\n", "- -1=undefiniert\n", "- 0=normal\n", "- 1=Benutzerabbruch\n", "- 2=fragwürdige Ergebnisse\n", "- 3=schlechte oder ungültige Ergebnisse\n", "- 100=Ergebnisse halten für Analyse\n", "- 101=Stopp-Signal für Analyse" ] }, { "cell_type": "markdown", "id": "c556f2bc", "metadata": {}, "source": [ "English Interpretation:\n", "- -1=undefined\n", "- 0=normal\n", "- 1=user-interrupt\n", "- 2=questionable results\n", "- 3=bad or invald result\n", "- 100=holding results for analysis\n", "- 101=stop-signal for analysis" ] }, { "cell_type": "markdown", "id": "c5455182", "metadata": {}, "source": [ "Our results are normal." ] }, { "cell_type": "markdown", "id": "9b8ec0c0", "metadata": {}, "source": [ "Let's look at the pressure of a singular node and compare it to the previous calculation." ] }, { "cell_type": "code", "execution_count": 54, "id": "d1a7761a", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAm0AAAHWCAYAAAAl7r6VAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAABE5UlEQVR4nO3deXiV9Z3//9c5Zg8JO0nYwY6AgIIgCNRSGoGKWKq2yuIIOKUGO9NGSnXodAaBitDpWEbrUjcWEcUCUmqlEpFFJbTsiOzCAEIisiUCIUD4/P7w5/l6SoIIOe87953n47pyXZ77PkneebaX19uz3CfknHMCAABAlRb2egAAAAB8NZY2AAAAH2BpAwAA8AGWNgAAAB9gaQMAAPABljYAAAAfYGkDAADwAZY2AAAAH2BpAwAA8AGWNgAxM23aNIVCochXXFycGjdurOHDh2v//v2R+y1dulShUEhz5swp9+f867/+q0KhkNXYMXfgwAE9/PDDWr9+/XnnHn744UD9rQAqD0sbgJibOnWq8vPzlZeXpxEjRuiVV17RjTfeqBMnTng9micOHDigcePGlbu0/ehHP1J+fr79UACqvDivBwAQfO3atVPnzp0lSb169VJZWZkmTJig+fPna8iQIR5PFxslJSVKSkr62o+aNW7cWI0bN47RVAD8jEfaAJi74YYbJEl79uyp9J+9YMECdevWTSkpKUpLS1Pv3r2jHrmaP3++QqGQFi9efN73Pv300wqFQtq4cWPk2OrVq/W9731PderUUVJSkjp27KjXXnst6vu+eBp40aJFuvfee1W/fn2lpKSotLT0vN+xdOlSXX/99ZKk4cOHR546fvjhhyWV//Ro8+bN1b9/f73xxhvq2LGjkpOT1aZNG73xxhuR39+mTRulpqaqS5cuWr169Xm/92L+DgBVG0sbAHM7d+6UJNWvXz/q+Llz53T27NnzvpxzF/VzZ82apQEDBig9PV2vvPKKXnjhBR09elTf/va39d5770mS+vfvrwYNGmjq1Knnff+0adN03XXX6ZprrpEkLVmyRD169NCxY8f0zDPP6E9/+pM6dOigu+66S9OmTTvv+++9917Fx8frpZde0pw5cxQfH3/efa677rrI7/7Vr36l/Px85efn60c/+tEF/7YNGzZozJgxeuihhzRv3jzVrFlTt99+u8aOHavnn39eEydO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e9/7nkeTBQ+tbdDZDq1t0NkOrW3EunNgX9N222236ZVXXin33O9//3sNGjRIjqudVApa26CzHVrboLMdWtuIdWeu0wYAAOADgX2kDQAAIEhY2gAAAHyApQ0AAMAHWNoAAAB8gKUNAADAB1jaAPjSww8/rA4dOng9BgCYYWkDUOWEQqELfg0bNkyjR4/W4sWLPZ2TxRGApcB+IgIA/yooKIj88+zZs/Vf//Vf2rZtW+RYcnKyatSooRo1angxHgB4gkfaAFQ5mZmZka+aNWsqFAqdd+wfH+UaNmyYvv/972vixInKyMhQrVq1NG7cOJ09e1a/+MUvVKdOHTVu3Fgvvvhi1O/av3+/7rrrLtWuXVt169bVgAED9H//93+R80uXLlWXLl2UmpqqWrVqqUePHtqzZ4+mTZumcePGacOGDZFHAKdNmyZJeuyxx9S+fXulpqaqSZMmuv/++3X8+PHIz5w2bZpq1aqlN954Q61atVJKSop+8IMf6MSJE5o+fbqaN2+u2rVr69/+7d9UVlYW+b7mzZtrwoQJGjx4sGrUqKGGDRvqiSeeiMn/BgCqHpY2AIHxzjvv6MCBA1q+fLkee+wxPfzww+rfv79q166tv/3tb8rJyVFOTo727dsnSTp58qR69eqlGjVqaPny5XrvvfdUo0YNffe739Xp06d19uxZff/731fPnj21ceNG5efn68c//rFCoZDuuusu/fznP1fbtm1VUFCggoIC3XXXXZKkcDisxx9/XJs2bdL06dP1zjvv6MEHH4ya9eTJk3r88cf16quv6q9//auWLl2q22+/XW+++abefPNNvfTSS3r22Wc1Z86cqO/77//+b11zzTVau3atxowZowceeEB5eXk2gQF4ywFAFTZ16lRXs2bN846PHTvWXXvttZHbQ4cOdc2aNXNlZWWRY61atXI33nhj5PbZs2ddamqqe+WVV5xzzr3wwguuVatW7ty5c5H7lJaWuuTkZPfWW2+5w4cPO0lu6dKl5c72jzNU5LXXXnN169aN+pskuZ07d0aO3XfffS4lJcV99tlnkWN9+/Z19913X+R2s2bN3He/+92on33XXXe5m2+++StnAOB/PNIGIDDatm2rcPj//WstIyND7du3j9y+4oorVLduXR08eFCStGbNGu3cuVNpaWmR18jVqVNHp06d0kcffaQ6depo2LBh6tu3r2699Vb97//+b9Tr7SqyZMkS9e7dW40aNVJaWpruueceHT58WCdOnIjcJyUlRVdeeWXUrM2bN496nV5GRkZk1i9069btvNtbtmy5yEIA/IylDUBgxMfHR90OhULlHjt37pwk6dy5c+rUqZPWr18f9bV9+3YNHjxYkjR16lTl5+ere/fumj17tq666iqtXLmywhn27Nmjfv36qV27dpo7d67WrFmjJ598UpJ05syZS571QkKh0FfeB4D/8e5RANXWddddp9mzZ6tBgwZKT0+v8H4dO3ZUx44dNWbMGHXr1k2zZs3SDTfcoISEhKg3CkjS6tWrdfbsWf3P//xP5FG/1157rdJm/seFceXKlWrdunWl/XwAVRePtAGotoYMGaJ69eppwIABevfdd7V7924tW7ZMP/vZz/Txxx9r9+7dGjNmjPLz87Vnzx4tWrRI27dvV5s2bSR9/m7O3bt3a/369Tp06JBKS0t15ZVX6uzZs3riiSe0a9cuvfTSS3rmmWcqbeb3339fv/nNb7R9+3Y9+eST+uMf/6if/exnlfbzAVRdLG0Aqq2UlBQtX75cTZs21e233642bdro3nvvVUlJidLT05WSkqKtW7fqjjvu0FVXXaUf//jH+td//Vfdd999kqQ77rhD3/3ud9WrVy/Vr19fr7zyijp06KDHHntMkydPVrt27fTyyy/r0UcfrbSZf/7zn2vNmjXq2LGjJkyYoP/5n/9R3759K+3nA6i6Qs455/UQAICv1rx5c+Xm5io3N9frUQB4gEfaAAAAfIClDQAAwAd4ehQAAMAHeKQNAADAB1jaAAAAfIClDQAAwAdY2gAAAHyApQ0AAMAHWNoAAAB8gKUNAADAB1jaAAAAfIClDQAAwAf+P+vUKxeUtKGGAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "timestamps = s3s.GetTimeStamps()[0]\n", "values_2 = [float(s3s.GetResultfortimestamp(Tk=\"4769939796812007971\", property=\"PH\", timestamp=t)[0]) for t in timestamps]\n", "\n", "plt.plot(timestamps, values_2, marker=\"o\")\n", "plt.ylim(4, 6)\n", "plt.xlim(0, len(timestamps) - 1)\n", "plt.xticks(rotation=90)\n", "plt.xlabel(\"Timestamp\")\n", "plt.gca().xaxis.set_major_locator(MaxNLocator(nbins=7))\n", "plt.ylabel(\"PH\")\n", "plt.title(\"PH over time\")\n", "plt.tight_layout()\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "fe213aee", "metadata": {}, "source": [ "Below we see the first calculation as a comparison." ] }, { "cell_type": "code", "execution_count": 55, "id": "b32a7b2c", "metadata": {}, "outputs": [ { "data": { "image/png": "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1YQJE3TgwAHVr1+fzhUgMzNTr7zyinr06KH9+/erYcOG+tOf/qSbb75ZkvT2229r9OjR2rp1q88rjW0NGzZUu3bt9Itf/ELh8BfHEJxz6tWrl1588UU1bdpUktS9e3c/lxkI4XBYubm5qlevnjp16qSBAwfqgQceiOx/8cUX9dRTT2nDhg0+rjL2eT17BPaatlOnTn3l9RC1a9fWqVOnDFcUXJs3b9add94Z+QfsxXJycrR9+3bjVQXPrl271LVr18jrLl266N1331XPnj119uxZjRo1yr/FBczBgwf1jW98Q5JUv359JSYmFnlgZuvWrbV3716/lhcYGzdu1I9//GNNnDhRr776qho0aCBJCoVC6tSpk1q1auXzCoMlFApJ+uKfJT179iyy77vf/W6RIQ7l4/XsEdihrUePHho9erRee+01paWlFdl34MABPfjgg6VOwrg0bdq0UefOnTVy5MgS969fv16///3vjVcVPHXq1NHevXvVpEmTyLbWrVvr3Xff1Xe/+13t27fPv8UFTO3atfXZZ5+pUaNGkqQBAwaoRo0akf3Hjx9XfHy8T6sLjlq1aunNN9/Uc889p06dOuk3v/mNBg4c6PeyAuuvf/2rqlevrsTExGKDw6lTpyJHO1F+Xs8egR3ann32WfXr108NGzZUmzZtijzgbtOmTWrVqpX+8pe/+L3MQPj2t7+tbdu2lbo/JSVFN9xwg+GKgunb3/625s2bp+uvv77I9latWmnx4sXq0aOHTysLnquvvlqrVq2KnPqfNWtWkf2rVq1Sy5Yt/VhaII0cOVLdu3fXoEGD9Oc//9nv5QTWkCFDIv958eLF6ty5c+R1dna2rrzySj+WFShezx6BvaZNks6fP6+//e1vJT7grk+fPvxbBWLKxo0btWbNGg0bNqzE/R999JHmzp2rcePGGa8seI4cOaJwOFzk6NqXLVy4UImJifrOd75juq6gO3PmjP793/9dS5Ys0RtvvFHqJReoeG+99ZaqVKmivn37+r2UmOfl7BHooQ0AACAoONQEAAAQAyrF0Na0aVP17t27yLZevXqpWbNmPq0ouGhtg852aG2DznZobcOLzoG9EeHLhgwZorp16xbZdsstt+jQoUM+rSi4aG2DznZobYPOdmhtw4vOXNMGAAAQAyrF6VEAAIBYF+ih7dSpU3r//fe1efPmYvtOnz6t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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(timestamps, values_1, marker=\"o\")\n", "plt.ylim(4, 6)\n", "plt.xlim(0, len(timestamps) - 1)\n", "plt.xticks(rotation=90)\n", "plt.xlabel(\"Timestamp\")\n", "plt.gca().xaxis.set_major_locator(MaxNLocator(nbins=7))\n", "plt.ylabel(\"PH\")\n", "plt.title(\"PH over time\")\n", "plt.tight_layout()\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "dd7229e2", "metadata": {}, "source": [ "# CopyWorkingDirectory()" ] }, { "cell_type": "markdown", "id": "87452759", "metadata": {}, "source": [ "We can use the method [CopyWorkingDirectory()](https://3sconsult.github.io/sir3stoolkit/modules.html#sir3stoolkit.core.wrapper.SIR3S_Model.CopyWorkingDirectory) to copy the contents and therefore the results of our current working dir to another path. This way we can save a XML calculation configuration and attached results and can continue on our main working dir with another configuration." ] }, { "cell_type": "code", "execution_count": 56, "id": "de2a9ae2", "metadata": {}, "outputs": [], "source": [ "config_a_path = r\"C:\\Users\\aUsername\\3S\\sir3stoolkit\\docs\\source\\tutorials\\SIR3S_Model\\Tutorial010_Assets\\configs\\config_a\"" ] }, { "cell_type": "code", "execution_count": 57, "id": "4d41f4b5", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 57, "metadata": {}, "output_type": "execute_result" } ], "source": [ "s3s.CopyWorkingDirectory(strDestinationDirectory=config_a_path)" ] }, { "cell_type": "code", "execution_count": 58, "id": "63d8f31a", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "[2026-08-04 16:55:36,991] INFO in sir3stoolkit.core.wrapper: Changes saved successfully\n" ] } ], "source": [ "s3s.SaveChanges()" ] } ], "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 }