diff --git a/README.md b/README.md index 733b1cd..538d542 100644 --- a/README.md +++ b/README.md @@ -4,16 +4,29 @@ - CGMES merging, load flow and PTDF calculation notebook: [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/powsybl/pypowsybl-notebooks/main?labpath=cgmes.ipynb) - Network area diagram notebook: [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/powsybl/pypowsybl-notebooks/main?labpath=network_area_diagram.ipynb) - Flow decomposition notebook: [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/powsybl/pypowsybl-notebooks/main?labpath=flow_decomposition_visualization_demo.ipynb) -- Network, load flow calculation, security analysis and sensitivity analysis [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/powsybl/pypowsybl-notebooks/main?labpath=pypowsybl_lf_security_sensitivity_analysis.ipynb) +- Network, load flow calculation, security analysis and sensitivity analysis: [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/powsybl/pypowsybl-notebooks/main?labpath=pypowsybl_lf_security_sensitivity_analysis.ipynb) - Operator strategy notebook: [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/powsybl/pypowsybl-notebooks/main?labpath=operator_strategy.ipynb) -- Computation using Dynaflow: [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/powsybl/pypowsybl-notebooks/main?labpath=dynaflow/pypowsybl_dynaflow.ipynb) +- Computation using Dynaflow: [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/powsybl/pypowsybl-notebooks/main?labpath=pypowsybl_dynaflow.ipynb) - Dynamic simulation using Dynawo: [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/powsybl/pypowsybl-notebooks/main?labpath=pypowsybl_dynawo.ipynb) -- Sensitivity analysis and PTDF calculation [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/powsybl/pypowsybl-notebooks/main?labpath=sensitivity_analysis.ipynb) -- Pypowsybl-Jupyter widgets notebooks: - - Introduction [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/powsybl/pypowsybl-notebooks/main?labpath=pypowsybl_jupyter_widgets_demo.ipynb) - - Custom profile (based on active power) [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/powsybl/pypowsybl-notebooks/main?labpath=pypowsybl_jupyter_custom_profile_delta_p.ipynb) - - Custom profile (based on voltage) [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/powsybl/pypowsybl-notebooks/main?labpath=pypowsybl_jupyter_custom_profile_voltage.ipynb) - - Custom profile (based on security analysis results) [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/powsybl/pypowsybl-notebooks/main?labpath=pypowsybl_jupyter_custom_profile_security_analysis.ipynb) - - Active power time series [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/powsybl/pypowsybl-notebooks/main?labpath=pypowsybl_jupyter_time_series.ipynb) +- Sensitivity analysis and PTDF calculation: [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/powsybl/pypowsybl-notebooks/main?labpath=sensitivity_analysis.ipynb) +- Pypowsybl-Jupyter widgets notebooks + - Introduction: [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/powsybl/pypowsybl-notebooks/main?labpath=pypowsybl_jupyter_widgets_demo.ipynb) + - Custom profile (based on active power): [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/powsybl/pypowsybl-notebooks/main?labpath=pypowsybl_jupyter_custom_profile_delta_p.ipynb) + - Custom profile (based on voltage): [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/powsybl/pypowsybl-notebooks/main?labpath=pypowsybl_jupyter_custom_profile_voltage.ipynb) + - Custom profile (based on security analysis results): [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/powsybl/pypowsybl-notebooks/main?labpath=pypowsybl_jupyter_custom_profile_security_analysis.ipynb) + - Active power time series: [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/powsybl/pypowsybl-notebooks/main?labpath=pypowsybl_jupyter_time_series.ipynb) - Network modifications in node/breaker topology notebook: [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/powsybl/pypowsybl-notebooks/main?labpath=network_modifications_node_breaker.ipynb) - Open-RAO notebook: [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/powsybl/pypowsybl-notebooks/main?labpath=open_rao.ipynb) + +## Launching the notebooks locally +Prerequisites: +- Python 3.9+ +- Jupyter Notebook or Jupyter Lab + +Follow these steps: +- Clone this repository. +- Launch a terminal in the cloned repository. +- Run `pip install -r requirements.txt`. +- Launch jupyter notebook or jupyter lab. +- Open the desired notebook. +- Enjoy! diff --git a/cgmes.ipynb b/cgmes.ipynb index c03418c..0f1dcf4 100644 --- a/cgmes.ipynb +++ b/cgmes.ipynb @@ -11,6 +11,10 @@ "cell_type": "code", "execution_count": 1, "metadata": { + "ExecuteTime": { + "end_time": "2025-09-17T11:08:33.811022Z", + "start_time": "2025-09-17T11:08:32.852306Z" + }, "pycharm": { "name": "#%%\n" } @@ -35,6 +39,10 @@ "cell_type": "code", "execution_count": 2, "metadata": { + "ExecuteTime": { + "end_time": "2025-09-17T11:08:33.966216Z", + "start_time": "2025-09-17T11:08:33.834708Z" + }, "pycharm": { "name": "#%%\n" } @@ -55,7 +63,12 @@ { "cell_type": "code", "execution_count": 3, - "metadata": {}, + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-17T11:08:34.023458Z", + "start_time": "2025-09-17T11:08:34.020621Z" + } + }, "outputs": [], "source": [ "be_id = be.id\n", @@ -72,13 +85,18 @@ { "cell_type": "code", "execution_count": 4, - "metadata": {}, + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-17T11:08:34.107090Z", + "start_time": "2025-09-17T11:08:34.083456Z" + } + }, "outputs": [ { "data": { "image/svg+xml": [ "\n", - "\n", + "\n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " 52\n", + " 52\n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " 96\n", + " 96\n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " 51\n", + " 51\n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " 29\n", + " 29\n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " 28\n", + " 28\n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", + " \n", "
\n", "
15.8
\n", " \n", @@ -452,7 +432,7 @@ "
\n", "
\n", "
\n", - " \n", + " \n", "
\n", "
15.8
\n", " \n", @@ -465,7 +445,7 @@ "
\n", "
\n", "
\n", - " \n", + " \n", "
\n", "
400.0
\n", " \n", @@ -478,7 +458,7 @@ "
\n", "
\n", "
\n", - " \n", + " \n", "
\n", "
220.0
\n", " \n", @@ -495,7 +475,7 @@ "\n" ], "text/plain": [ - "" + "" ] }, "execution_count": 4, @@ -510,13 +490,18 @@ { "cell_type": "code", "execution_count": 5, - "metadata": {}, + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-17T11:08:34.196143Z", + "start_time": "2025-09-17T11:08:34.186748Z" + } + }, "outputs": [ { "data": { "image/svg+xml": [ "\n", - "\n", + "\n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " -37\n", + " -37\n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " -83\n", + " -83\n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " -37\n", + " -37\n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " -26\n", + " -26\n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " -24\n", + " -24\n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", + " \n", "
\n", "
380.0
\n", "
\n", @@ -1006,7 +943,7 @@ "
\n", "
\n", "
\n", - " \n", + " \n", "
\n", "
10.5
\n", " \n", @@ -1019,7 +956,7 @@ "
\n", "
\n", "
\n", - " \n", + " \n", "
\n", "
110.0
\n", " \n", @@ -1032,7 +969,7 @@ "
\n", "
\n", "
\n", - " \n", + " \n", "
\n", "
21.0
\n", " \n", @@ -1045,7 +982,7 @@ "
\n", "
\n", "
\n", - " \n", + " \n", "
\n", "
225.0
\n", " \n", @@ -1058,7 +995,7 @@ "
\n", "
\n", "
\n", - " \n", + " \n", "
\n", "
220.0
\n", " \n", @@ -1075,7 +1012,7 @@ "\n" ], "text/plain": [ - "" + "" ] }, "execution_count": 5, @@ -1104,7 +1041,12 @@ { "cell_type": "code", "execution_count": 6, - "metadata": {}, + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-17T11:08:34.280429Z", + "start_time": "2025-09-17T11:08:34.258755Z" + } + }, "outputs": [ { "data": { @@ -1178,7 +1120,12 @@ { "cell_type": "code", "execution_count": 7, - "metadata": {}, + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-17T11:08:34.387711Z", + "start_time": "2025-09-17T11:08:34.382882Z" + } + }, "outputs": [ { "data": { @@ -1254,8 +1201,13 @@ }, { "cell_type": "code", - "execution_count": 14, - "metadata": {}, + "execution_count": 8, + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-17T11:08:34.666862Z", + "start_time": "2025-09-17T11:08:34.658043Z" + } + }, "outputs": [ { "data": { @@ -1320,7 +1272,7 @@ "ed0c5d75-4a54-43c8-b782-b20d7431630b TN_Border_MA11" ] }, - "execution_count": 14, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } @@ -1331,8 +1283,13 @@ }, { "cell_type": "code", - "execution_count": 15, - "metadata": {}, + "execution_count": 9, + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-17T11:08:34.793932Z", + "start_time": "2025-09-17T11:08:34.789255Z" + } + }, "outputs": [ { "data": { @@ -1397,7 +1354,7 @@ "dad02278-bd25-476f-8f58-dbe44be72586 TN_Border_MA11" ] }, - "execution_count": 15, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } @@ -1419,8 +1376,12 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 10, "metadata": { + "ExecuteTime": { + "end_time": "2025-09-17T11:08:35.048645Z", + "start_time": "2025-09-17T11:08:35.045719Z" + }, "pycharm": { "name": "#%%\n" } @@ -1444,8 +1405,12 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 11, "metadata": { + "ExecuteTime": { + "end_time": "2025-09-17T11:08:35.099738Z", + "start_time": "2025-09-17T11:08:35.094607Z" + }, "pycharm": { "name": "#%%\n" } @@ -1525,7 +1490,7 @@ "c49942d6-8b01-4b01-b5e8-f1180f84906c NL " ] }, - "execution_count": 17, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" } @@ -1547,8 +1512,12 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 12, "metadata": { + "ExecuteTime": { + "end_time": "2025-09-17T11:08:35.224384Z", + "start_time": "2025-09-17T11:08:35.212915Z" + }, "pycharm": { "name": "#%%\n" } @@ -1558,7 +1527,7 @@ "data": { "image/svg+xml": [ "\n", - "\n", + "\n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " -37\n", + " -37\n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " 52\n", + " 52\n", " \n", " \n", " \n", @@ -1840,26 +1760,26 @@ " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " -83\n", + " -83\n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " 96\n", + " 96\n", " \n", " \n", " \n", @@ -1867,26 +1787,26 @@ " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " 51\n", + " 51\n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " -37\n", + " -37\n", " \n", " \n", " \n", @@ -1894,198 +1814,198 @@ " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " -26\n", + " -26\n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " 29\n", + " 29\n", " \n", " \n", " \n", @@ -2093,26 +2013,26 @@ " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " -24\n", + " -24\n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " 28\n", + " 28\n", " \n", " \n", " \n", @@ -2121,63 +2041,63 @@ " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", + " \n", "
\n", "
15.8
\n", "
\n", @@ -2190,7 +2110,7 @@ "
\n", "
\n", "
\n", - " \n", + " \n", "
\n", "
380.0
\n", " \n", @@ -2203,7 +2123,7 @@ "
\n", "
\n", "
\n", - " \n", + " \n", "
\n", "
10.5
\n", " \n", @@ -2216,7 +2136,7 @@ "
\n", "
\n", "
\n", - " \n", + " \n", "
\n", "
110.0
\n", " \n", @@ -2229,7 +2149,7 @@ "
\n", "
\n", "
\n", - " \n", + " \n", "
\n", "
15.8
\n", " \n", @@ -2242,7 +2162,7 @@ "
\n", "
\n", "
\n", - " \n", + " \n", "
\n", "
21.0
\n", " \n", @@ -2255,7 +2175,7 @@ "
\n", "
\n", "
\n", - " \n", + " \n", "
\n", "
225.0
\n", " \n", @@ -2268,7 +2188,7 @@ "
\n", "
\n", "
\n", - " \n", + " \n", "
\n", "
400.0
\n", " \n", @@ -2281,7 +2201,7 @@ "
\n", "
\n", "
\n", - " \n", + " \n", "
\n", "
220.0
\n", " \n", @@ -2294,7 +2214,7 @@ "
\n", "
\n", "
\n", - " \n", + " \n", "
\n", "
220.0
\n", " \n", @@ -2311,10 +2231,10 @@ "\n" ], "text/plain": [ - "" + "" ] }, - "execution_count": 18, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" } @@ -2332,8 +2252,13 @@ }, { "cell_type": "code", - "execution_count": 19, - "metadata": {}, + "execution_count": 13, + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-17T11:08:35.359875Z", + "start_time": "2025-09-17T11:08:35.343331Z" + } + }, "outputs": [ { "data": { @@ -2391,7 +2316,7 @@ "c49942d6-8b01-4b01-b5e8-f1180f84906c NL " ] }, - "execution_count": 19, + "execution_count": 13, "metadata": {}, "output_type": "execute_result" } @@ -2402,8 +2327,13 @@ }, { "cell_type": "code", - "execution_count": 20, - "metadata": {}, + "execution_count": 14, + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-17T11:08:35.467012Z", + "start_time": "2025-09-17T11:08:35.461427Z" + } + }, "outputs": [ { "data": { @@ -2465,7 +2395,7 @@ "87f7002b-056f-4a6a-a872-1744eea757e3 Anvers ELIA-Anvers BE" ] }, - "execution_count": 20, + "execution_count": 14, "metadata": {}, "output_type": "execute_result" } @@ -2487,8 +2417,12 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 15, "metadata": { + "ExecuteTime": { + "end_time": "2025-09-17T11:08:35.764893Z", + "start_time": "2025-09-17T11:08:35.753463Z" + }, "pycharm": { "name": "#%%\n" } @@ -2497,10 +2431,10 @@ { "data": { "text/plain": [ - "[ComponentResult(connected_component_num=0, synchronous_component_num=0, status=CONVERGED, status_text=CONVERGED, iteration_count=6, reference_bus_id='8d8a82ba-b5b0-4e94-861a-192af055f2b8_0', slack_bus_results=[SlackBusResult(id='8d8a82ba-b5b0-4e94-861a-192af055f2b8_0', active_power_mismatch=0.3282217078453442)], distributed_active_power=-44.13525678739042)]" + "[ComponentResult(connected_component_num=0, synchronous_component_num=0, status=CONVERGED, status_text=Converged, iteration_count=7, reference_bus_id='c1d5bfde8f8011e08e4d00247eb1f55e_0', slack_bus_results=[SlackBusResult(id='c1d5bfde8f8011e08e4d00247eb1f55e_0', active_power_mismatch=-0.21366219014484766)], distributed_active_power=-45.16664728458926)]" ] }, - "execution_count": 21, + "execution_count": 15, "metadata": {}, "output_type": "execute_result" } @@ -2512,8 +2446,13 @@ }, { "cell_type": "code", - "execution_count": 22, - "metadata": {}, + "execution_count": 16, + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-17T11:08:35.820169Z", + "start_time": "2025-09-17T11:08:35.807715Z" + } + }, "outputs": [ { "data": { @@ -2595,9 +2534,9 @@ " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -2617,9 +2556,9 @@ " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -2639,9 +2578,9 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2661,9 +2600,9 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2683,9 +2622,9 @@ " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -2737,11 +2676,11 @@ "\n", " p q i \\\n", "id \n", - "3a3b27be-b18b-4385-b557-6735d733baf0 -85.354183 -27.088380 4689.473090 \n", - "550ebe0d-f2b2-48c1-991f-cebea43a21aa -113.354183 -24.705000 3046.407443 \n", - "2844585c-0d35-488d-a449-685bcd57afbf -134.192729 -0.000000 4765.160785 \n", - "1dc9afba-23b5-41a0-8540-b479ed8baf4b -144.192729 -0.000000 5120.259069 \n", - "9c3b8f97-7972-477d-9dc8-87365cc0ad0e -577.263618 -166.129473 21630.359223 \n", + "3a3b27be-b18b-4385-b557-6735d733baf0 -85.245616 57.537385 5682.888931 \n", + "550ebe0d-f2b2-48c1-991f-cebea43a21aa -113.245616 -84.453532 3709.545342 \n", + "2844585c-0d35-488d-a449-685bcd57afbf -134.057020 -0.000000 4781.183683 \n", + "1dc9afba-23b5-41a0-8540-b479ed8baf4b -144.057020 -0.000000 5137.836671 \n", + "9c3b8f97-7972-477d-9dc8-87365cc0ad0e -576.720781 -206.084407 22053.200473 \n", "\n", " voltage_level_id \\\n", "id \n", @@ -2768,7 +2707,7 @@ "9c3b8f97-7972-477d-9dc8-87365cc0ad0e True " ] }, - "execution_count": 22, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" } @@ -2790,8 +2729,12 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 17, "metadata": { + "ExecuteTime": { + "end_time": "2025-09-17T11:08:35.935912Z", + "start_time": "2025-09-17T11:08:35.931847Z" + }, "pycharm": { "name": "#%%\n" } @@ -2800,10 +2743,10 @@ { "data": { "text/plain": [ - "90.0" + "np.float64(90.0)" ] }, - "execution_count": 23, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" } @@ -2826,8 +2769,12 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 18, "metadata": { + "ExecuteTime": { + "end_time": "2025-09-17T11:08:36.060457Z", + "start_time": "2025-09-17T11:08:36.057775Z" + }, "pycharm": { "name": "#%%\n" } @@ -2850,8 +2797,12 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 19, "metadata": { + "ExecuteTime": { + "end_time": "2025-09-17T11:08:36.116672Z", + "start_time": "2025-09-17T11:08:36.113089Z" + }, "pycharm": { "name": "#%%\n" } @@ -2860,10 +2811,10 @@ { "data": { "text/plain": [ - "100.0" + "np.float64(100.0)" ] }, - "execution_count": 25, + "execution_count": 19, "metadata": {}, "output_type": "execute_result" } @@ -2886,8 +2837,12 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 20, "metadata": { + "ExecuteTime": { + "end_time": "2025-09-17T11:08:36.168386Z", + "start_time": "2025-09-17T11:08:36.163694Z" + }, "pycharm": { "name": "#%%\n" } @@ -2896,10 +2851,10 @@ { "data": { "text/plain": [ - "[ComponentResult(connected_component_num=0, synchronous_component_num=0, status=CONVERGED, status_text=CONVERGED, iteration_count=7, reference_bus_id='8d8a82ba-b5b0-4e94-861a-192af055f2b8_0', slack_bus_results=[SlackBusResult(id='8d8a82ba-b5b0-4e94-861a-192af055f2b8_0', active_power_mismatch=0.3444775195734273)], distributed_active_power=-54.24227251491311)]" + "[ComponentResult(connected_component_num=0, synchronous_component_num=0, status=CONVERGED, status_text=Converged, iteration_count=7, reference_bus_id='c1d5bfde8f8011e08e4d00247eb1f55e_0', slack_bus_results=[SlackBusResult(id='c1d5bfde8f8011e08e4d00247eb1f55e_0', active_power_mismatch=-0.25955289487091804)], distributed_active_power=-55.2225126815256)]" ] }, - "execution_count": 26, + "execution_count": 20, "metadata": {}, "output_type": "execute_result" } @@ -2922,8 +2877,12 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 21, "metadata": { + "ExecuteTime": { + "end_time": "2025-09-17T11:08:36.221640Z", + "start_time": "2025-09-17T11:08:36.211308Z" + }, "pycharm": { "name": "#%%\n" } @@ -3009,9 +2968,9 @@ " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -3031,9 +2990,9 @@ " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -3053,9 +3012,9 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -3075,9 +3034,9 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -3097,9 +3056,9 @@ " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -3151,11 +3110,11 @@ "\n", " p q i \\\n", "id \n", - "3a3b27be-b18b-4385-b557-6735d733baf0 -94.290287 -26.937530 5135.284664 \n", - "550ebe0d-f2b2-48c1-991f-cebea43a21aa -112.290287 -24.342298 3017.085401 \n", - "2844585c-0d35-488d-a449-685bcd57afbf -132.862859 -0.000000 4717.532906 \n", - "1dc9afba-23b5-41a0-8540-b479ed8baf4b -142.862859 -0.000000 5072.600751 \n", - "9c3b8f97-7972-477d-9dc8-87365cc0ad0e -571.944137 -165.116497 21436.200746 \n", + "3a3b27be-b18b-4385-b557-6735d733baf0 -94.187104 58.301221 6123.602646 \n", + "550ebe0d-f2b2-48c1-991f-cebea43a21aa -112.187104 -84.603909 3689.677534 \n", + "2844585c-0d35-488d-a449-685bcd57afbf -132.733880 -0.000000 4733.761755 \n", + "1dc9afba-23b5-41a0-8540-b479ed8baf4b -142.733880 -0.000000 5090.397284 \n", + "9c3b8f97-7972-477d-9dc8-87365cc0ad0e -571.428221 -205.411167 21865.615940 \n", "\n", " voltage_level_id \\\n", "id \n", @@ -3182,7 +3141,7 @@ "9c3b8f97-7972-477d-9dc8-87365cc0ad0e True " ] }, - "execution_count": 27, + "execution_count": 21, "metadata": {}, "output_type": "execute_result" } @@ -3204,8 +3163,12 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 22, "metadata": { + "ExecuteTime": { + "end_time": "2025-09-17T11:08:36.356985Z", + "start_time": "2025-09-17T11:08:36.336447Z" + }, "pycharm": { "name": "#%%\n" } @@ -3285,12 +3248,12 @@ " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -3307,12 +3270,12 @@ " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -3332,18 +3295,18 @@ "\n", " b1 g2 b2 p1 \\\n", "id \n", - "b58bf21a-096a-4dae-9a01-3f03b60c24c7 0.000021 0.000034 0.000021 -17.587416 \n", - "ffbabc27-1ccd-4fdc-b037-e341706c8d29 0.000010 0.000060 0.000010 -6.224587 \n", + "b58bf21a-096a-4dae-9a01-3f03b60c24c7 0.000021 0.000034 0.000021 -17.685639 \n", + "ffbabc27-1ccd-4fdc-b037-e341706c8d29 0.000010 0.000060 0.000010 -6.336742 \n", "\n", " q1 i1 p2 \\\n", "id \n", - "b58bf21a-096a-4dae-9a01-3f03b60c24c7 -3.106957 45.445906 21.083981 \n", - "ffbabc27-1ccd-4fdc-b037-e341706c8d29 -1.330019 16.196622 12.424309 \n", + "b58bf21a-096a-4dae-9a01-3f03b60c24c7 -5.312858 47.488283 21.115713 \n", + "ffbabc27-1ccd-4fdc-b037-e341706c8d29 -2.391001 17.417027 12.417184 \n", "\n", " q2 i2 \\\n", "id \n", - "b58bf21a-096a-4dae-9a01-3f03b60c24c7 1.169710 53.617718 \n", - "ffbabc27-1ccd-4fdc-b037-e341706c8d29 0.418134 31.565048 \n", + "b58bf21a-096a-4dae-9a01-3f03b60c24c7 3.434416 54.811563 \n", + "ffbabc27-1ccd-4fdc-b037-e341706c8d29 1.507009 32.047555 \n", "\n", " voltage_level1_id \\\n", "id \n", @@ -3371,7 +3334,7 @@ "ffbabc27-1ccd-4fdc-b037-e341706c8d29 True True " ] }, - "execution_count": 28, + "execution_count": 22, "metadata": {}, "output_type": "execute_result" } @@ -3382,8 +3345,13 @@ }, { "cell_type": "code", - "execution_count": 29, - "metadata": {}, + "execution_count": 23, + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-17T11:08:36.625665Z", + "start_time": "2025-09-17T11:08:36.614999Z" + } + }, "outputs": [ { "data": { @@ -3421,6 +3389,7 @@ " \n", " \n", " \n", + " \n", " \n", " \n", " \n", @@ -3441,6 +3410,7 @@ " \n", " \n", " \n", + " \n", " \n", " \n", " \n", @@ -3453,14 +3423,15 @@ " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", + " \n", " \n", " \n", " \n", @@ -3472,14 +3443,15 @@ " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", + " \n", " \n", " \n", " \n", @@ -3491,14 +3463,15 @@ " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", + " \n", " \n", " \n", " \n", @@ -3510,14 +3483,15 @@ " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", + " \n", " \n", " \n", " \n", @@ -3529,14 +3503,15 @@ " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", + " \n", " \n", " \n", " \n", @@ -3548,14 +3523,15 @@ " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", + " \n", " \n", " \n", " \n", @@ -3567,14 +3543,15 @@ " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", + " \n", " \n", " \n", " \n", @@ -3586,14 +3563,15 @@ " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", + " \n", " \n", " \n", " \n", @@ -3605,14 +3583,15 @@ " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", + " \n", " \n", " \n", " \n", @@ -3624,14 +3603,15 @@ " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", + " \n", " \n", " \n", " \n", @@ -3667,16 +3647,16 @@ "\n", " p q i \\\n", "id \n", - "ed0c5d75-4a54-43c8-b782-b20d7431630b -43.858954 88.851000 136.736232 \n", - "b18cd1aa-7808-49b9-a7cf-605eaf07b006 -90.648689 149.265265 240.990783 \n", - "78736387-5f60-4832-b3fe-d50daf81b0a6 -39.220349 59.054995 97.829358 \n", - "a16b4a6c-70b1-4abf-9a9d-bd0fa47f9fe4 -16.237023 1.123689 41.326852 \n", - "17086487-56ba-4979-b8de-064025a6b4da -18.271265 -2.711533 46.901585 \n", - "a279a3dc-550b-426c-af3a-61b7be508dcc 20.466345 -2.289792 52.347008 \n", - "8fdc7abd-3746-481a-a65e-3df56acd8b13 21.145972 -5.181329 55.339945 \n", - "7f43f508-2496-4b64-9146-0a40406cbe49 54.973610 -108.150034 169.292749 \n", - "e8acf6b6-99cb-45ad-b8dc-16c7866a4ddc 104.162080 -169.365875 277.456249 \n", - "dad02278-bd25-476f-8f58-dbe44be72586 57.873034 -96.129847 156.575245 \n", + "ed0c5d75-4a54-43c8-b782-b20d7431630b -44.074415 79.398809 126.703886 \n", + "b18cd1aa-7808-49b9-a7cf-605eaf07b006 -90.107574 132.603780 223.687774 \n", + "78736387-5f60-4832-b3fe-d50daf81b0a6 -39.254095 50.754496 89.522972 \n", + "a16b4a6c-70b1-4abf-9a9d-bd0fa47f9fe4 -16.294068 -0.556141 41.771397 \n", + "17086487-56ba-4979-b8de-064025a6b4da -18.238829 -4.385284 48.061508 \n", + "a279a3dc-550b-426c-af3a-61b7be508dcc 20.460359 -0.575155 52.257277 \n", + "8fdc7abd-3746-481a-a65e-3df56acd8b13 21.074380 -3.384612 54.493757 \n", + "7f43f508-2496-4b64-9146-0a40406cbe49 54.662015 -98.973320 159.359054 \n", + "e8acf6b6-99cb-45ad-b8dc-16c7866a4ddc 103.320111 -152.565573 259.703284 \n", + "dad02278-bd25-476f-8f58-dbe44be72586 57.778985 -86.683186 146.829004 \n", "\n", " voltage_level_id \\\n", "id \n", @@ -3717,18 +3697,18 @@ "e8acf6b6-99cb-45ad-b8dc-16c7866a4ddc True TN_Border_GY11 \n", "dad02278-bd25-476f-8f58-dbe44be72586 True TN_Border_MA11 \n", "\n", - " ucte_xnode_code \\\n", - "id \n", - "ed0c5d75-4a54-43c8-b782-b20d7431630b TN_Border_MA11 \n", - "b18cd1aa-7808-49b9-a7cf-605eaf07b006 TN_Border_GY11 \n", - "78736387-5f60-4832-b3fe-d50daf81b0a6 TN_Border_AL11 \n", - "a16b4a6c-70b1-4abf-9a9d-bd0fa47f9fe4 TN_Border_ST24 \n", - "17086487-56ba-4979-b8de-064025a6b4da TN_Border_ST23 \n", - "a279a3dc-550b-426c-af3a-61b7be508dcc TN_Border_ST24 \n", - "8fdc7abd-3746-481a-a65e-3df56acd8b13 TN_Border_ST23 \n", - "7f43f508-2496-4b64-9146-0a40406cbe49 TN_Border_AL11 \n", - "e8acf6b6-99cb-45ad-b8dc-16c7866a4ddc TN_Border_GY11 \n", - "dad02278-bd25-476f-8f58-dbe44be72586 TN_Border_MA11 \n", + " ucte_xnode_code paired \\\n", + "id \n", + "ed0c5d75-4a54-43c8-b782-b20d7431630b TN_Border_MA11 True \n", + "b18cd1aa-7808-49b9-a7cf-605eaf07b006 TN_Border_GY11 True \n", + "78736387-5f60-4832-b3fe-d50daf81b0a6 TN_Border_AL11 True \n", + "a16b4a6c-70b1-4abf-9a9d-bd0fa47f9fe4 TN_Border_ST24 True \n", + "17086487-56ba-4979-b8de-064025a6b4da TN_Border_ST23 True \n", + "a279a3dc-550b-426c-af3a-61b7be508dcc TN_Border_ST24 True \n", + "8fdc7abd-3746-481a-a65e-3df56acd8b13 TN_Border_ST23 True \n", + "7f43f508-2496-4b64-9146-0a40406cbe49 TN_Border_AL11 True \n", + "e8acf6b6-99cb-45ad-b8dc-16c7866a4ddc TN_Border_GY11 True \n", + "dad02278-bd25-476f-8f58-dbe44be72586 TN_Border_MA11 True \n", "\n", " tie_line_id \n", "id \n", @@ -3744,7 +3724,7 @@ "dad02278-bd25-476f-8f58-dbe44be72586 dad02278-bd25-476f-8f58-dbe44be72586 + ed0c5d7... " ] }, - "execution_count": 29, + "execution_count": 23, "metadata": {}, "output_type": "execute_result" } @@ -3773,25 +3753,17 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 24, "metadata": { + "ExecuteTime": { + "end_time": "2025-09-17T11:08:36.785458Z", + "start_time": "2025-09-17T11:08:36.766489Z" + }, "pycharm": { "name": "#%%\n" } }, "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "\n", - "True\n", - "\n", - "\n", - "True\n" - ] - }, { "data": { "text/html": [ @@ -3840,7 +3812,7 @@ "BE -> NL 0.419779 " ] }, - "execution_count": 30, + "execution_count": 24, "metadata": {}, "output_type": "execute_result" } @@ -3858,7 +3830,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -3872,9 +3844,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.10" + "version": "3.10.12" } }, "nbformat": 4, - "nbformat_minor": 1 + "nbformat_minor": 4 } diff --git a/dynaflow/PhaseShifters.iidm b/data/dynaflow/PhaseShifters.iidm similarity index 100% rename from dynaflow/PhaseShifters.iidm rename to data/dynaflow/PhaseShifters.iidm diff --git a/dynaflow/assembling.xml b/data/dynaflow/assembling.xml similarity index 100% rename from dynaflow/assembling.xml rename to data/dynaflow/assembling.xml diff --git a/data/dynaflow/config.yml b/data/dynaflow/config.yml new file mode 100644 index 0000000..f0fb89f --- /dev/null +++ b/data/dynaflow/config.yml @@ -0,0 +1,12 @@ +dynaflow: + homeDir: WORKING_DIR/dynaflow-launcher + debug: true + +dynaflow-default-parameters: + svcRegulationOn: true + shuntRegulationOn: true + automaticSlackBusOn: true + vscAsGenerators: true + lccAsLoads: true + dsoVoltageLevel: 63.0 + timeStep: 2.6 \ No newline at end of file diff --git a/dynaflow/setting-1.xml b/data/dynaflow/setting-1.xml similarity index 100% rename from dynaflow/setting-1.xml rename to data/dynaflow/setting-1.xml diff --git a/dynaflow/setting-2.xml b/data/dynaflow/setting-2.xml similarity index 100% rename from dynaflow/setting-2.xml rename to data/dynaflow/setting-2.xml diff --git a/dynaflow/config.yml b/dynaflow/config.yml deleted file mode 100644 index cc63e5a..0000000 --- a/dynaflow/config.yml +++ /dev/null @@ -1,15 +0,0 @@ -dynaflow: - homeDir: /home/jovyan/dynaflow/dynaflow-launcher - debug: true - -dynaflow-default-parameters: - svcRegulationOn: true - shuntRegulationOn: true - automaticSlackBusOn: true - vscAsGenerators: true - lccAsLoads: true - dsoVoltageLevel: 63.0 - outputDir: /home/jovyan/tmp - settingPath: /home/jovyan/dynaflow/dynaflow-launcher/DB/setting.xml - assemblingPath: /home/jovyan/dynaflow/dynaflow-launcher/DB/assembling.xml - timeStep: 2.6 \ No newline at end of file diff --git a/dynaflow/pypowsybl_dynaflow.ipynb b/dynaflow/pypowsybl_dynaflow.ipynb deleted file mode 100644 index 3670169..0000000 --- a/dynaflow/pypowsybl_dynaflow.ipynb +++ /dev/null @@ -1,532 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "DynaFlow is a new steady-state simulation tool that aims at calculating the steady-state point by using a simplified time-domain simulation, guaranteeing the correctness of the solution found. \n", - "This tutorial aims at illustrating the interest of Dynaflow compared to a fully static simulator." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The system is made of a generator, two phase shifter transformers in parallel, a transformer, five lines and a load.\n", - "\n", - "We simulate the opening of a line at t = 30s with different scenarios on the time constants of the phase shifters:\n", - "1) The two phase shifters have the following time constants: t1st = 40s and tNext = 20s.\n", - "2) One phase shifter has the following time constants: t1st = 20s and tNext= 10s, the other one: t1st = 40s and tNext = 20s." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "1/ DYNAFLOW installing" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "!curl -L $(curl -s -L -X GET https://api.github.com/repos/dynawo/dynaflow-launcher/releases/latest | grep \"DynaFlowLauncher_Linux\" | grep url | cut -d '\"' -f 4) -o DynaflowLauncher_Linux_latest.zip\n", - "!unzip DynaflowLauncher_Linux_latest.zip > /dev/null 2>&1\n", - "!./dynaflow-launcher/dynaflow-launcher.sh help" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "2/ POWSYBL installing and setting of default parameter (path to dynaflow_launcher)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "pip install pypowsybl > /dev/null 2>&1" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "!mkdir /home/jovyan/.itools/\n", - "!cp /home/jovyan/dynaflow/config.yml /home/jovyan/.itools/\n", - "!cat /home/jovyan/.itools/config.yml" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "3/ NOTEBOOK" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import pypowsybl\n", - "import pypowsybl.network as pn\n", - "import pypowsybl.loadflow as lf\n", - "import pypowsybl.security as sa\n", - "import os.path" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "# Load initial situation\n", - "network_file = 'PhaseShifters.iidm'\n", - "network = pn.load(network_file)\n", - "network.get_network_area_diagram()" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "
100.256000Truea708c3bc-465d-4fe7-b6ef-6fa6408a62b0-85.354183-27.0883804689.473090-85.24561657.5373855682.8889314ba71b59-ee2f-450b-9f7d-cc2f1cc5e3864ba71b59-ee2f-450b-9f7d-cc2f1cc5e386_0True18.720301True550ebe0d-f2b2-48c1-991f-cebea43a21aa-113.354183-24.7050003046.407443-113.245616-84.4535323709.545342929ba893-c9dc-44d7-b1fd-30834bd3ab85929ba893-c9dc-44d7-b1fd-30834bd3ab85_0True77.743000True2844585c-0d35-488d-a449-685bcd57afbf-134.192729-134.057020-0.0000004765.1607854781.1836832a37dc57-2faf-464a-8175-bc415f9a635f2a37dc57-2faf-464a-8175-bc415f9a635f_0True83.296000True1dc9afba-23b5-41a0-8540-b479ed8baf4b-144.192729-144.057020-0.0000005120.2590695137.8366712a37dc57-2faf-464a-8175-bc415f9a635f2a37dc57-2faf-464a-8175-bc415f9a635f_0True386.922556True9c3b8f97-7972-477d-9dc8-87365cc0ad0e-577.263618-166.12947321630.359223-576.720781-206.08440722053.2004738d8a82ba-b5b0-4e94-861a-192af055f2b88d8a82ba-b5b0-4e94-861a-192af055f2b8_0True100.256000Truea708c3bc-465d-4fe7-b6ef-6fa6408a62b0-94.290287-26.9375305135.284664-94.18710458.3012216123.6026464ba71b59-ee2f-450b-9f7d-cc2f1cc5e3864ba71b59-ee2f-450b-9f7d-cc2f1cc5e386_0True18.720301True550ebe0d-f2b2-48c1-991f-cebea43a21aa-112.290287-24.3422983017.085401-112.187104-84.6039093689.677534929ba893-c9dc-44d7-b1fd-30834bd3ab85929ba893-c9dc-44d7-b1fd-30834bd3ab85_0True77.743000True2844585c-0d35-488d-a449-685bcd57afbf-132.862859-132.733880-0.0000004717.5329064733.7617552a37dc57-2faf-464a-8175-bc415f9a635f2a37dc57-2faf-464a-8175-bc415f9a635f_0True83.296000True1dc9afba-23b5-41a0-8540-b479ed8baf4b-142.862859-142.733880-0.0000005072.6007515090.3972842a37dc57-2faf-464a-8175-bc415f9a635f2a37dc57-2faf-464a-8175-bc415f9a635f_0True386.922556True9c3b8f97-7972-477d-9dc8-87365cc0ad0e-571.944137-165.11649721436.200746-571.428221-205.41116721865.6159408d8a82ba-b5b0-4e94-861a-192af055f2b88d8a82ba-b5b0-4e94-861a-192af055f2b8_0True0.0000210.0000340.000021-17.587416-3.10695745.44590621.0839811.16971053.617718-17.685639-5.31285847.48828321.1157133.43441654.811563b10b171b-3bc5-4849-bb1f-61ed9ea1ec7cd0486169-2205-40b2-895e-b672ecb9e5fcb10b171b-3bc5-4849-bb1f-61ed9ea1ec7c_00.0000100.0000600.000010-6.224587-1.33001916.19662212.4243090.41813431.565048-6.336742-2.39100117.41702712.4171841.50700932.047555b10b171b-3bc5-4849-bb1f-61ed9ea1ec7cd0486169-2205-40b2-895e-b672ecb9e5fcb10b171b-3bc5-4849-bb1f-61ed9ea1ec7c_0connectedpairing_keyucte_xnode_codepairedtie_line_id
0.000025-43.68722784.876604-43.85895488.851000136.736232-44.07441579.398809126.703886469df5f7-058f-4451-a998-57a48e8a56fe469df5f7-058f-4451-a998-57a48e8a56fe_0TrueTN_Border_MA11TN_Border_MA11Truedad02278-bd25-476f-8f58-dbe44be72586 + ed0c5d7...
0.000066-90.037005148.603743-90.648689149.265265240.990783-90.107574132.603780223.687774469df5f7-058f-4451-a998-57a48e8a56fe469df5f7-058f-4451-a998-57a48e8a56fe_0TrueTN_Border_GY11TN_Border_GY11Trueb18cd1aa-7808-49b9-a7cf-605eaf07b006 + e8acf6b...
0.000150-46.81662579.193778-39.22034959.05499597.829358-39.25409550.75449689.522972469df5f7-058f-4451-a998-57a48e8a56fe469df5f7-058f-4451-a998-57a48e8a56fe_0TrueTN_Border_AL11TN_Border_AL11True78736387-5f60-4832-b3fe-d50daf81b0a6 + 7f43f50...
0.000022-26.8050061.489867-16.2370231.12368941.326852-16.294068-0.55614141.771397d0486169-2205-40b2-895e-b672ecb9e5fcd0486169-2205-40b2-895e-b672ecb9e5fc_0TrueTN_Border_ST24TN_Border_ST24Truea16b4a6c-70b1-4abf-9a9d-bd0fa47f9fe4 + a279a3d...
0.000083-27.3652250.425626-18.271265-2.71153346.901585-18.238829-4.38528448.061508d0486169-2205-40b2-895e-b672ecb9e5fcd0486169-2205-40b2-895e-b672ecb9e5fc_0TrueTN_Border_ST23TN_Border_ST23True17086487-56ba-4979-b8de-064025a6b4da + 8fdc7ab...
0.00002026.805006-1.48986720.466345-2.28979252.34700820.460359-0.57515552.257277c1d5bfea8f8011e08e4d00247eb1f55ec1d5bfea8f8011e08e4d00247eb1f55e_0TrueTN_Border_ST24TN_Border_ST24Truea16b4a6c-70b1-4abf-9a9d-bd0fa47f9fe4 + a279a3d...
0.00009027.365225-0.42562621.145972-5.18132955.33994521.074380-3.38461254.493757c1d5bfea8f8011e08e4d00247eb1f55ec1d5bfea8f8011e08e4d00247eb1f55e_0TrueTN_Border_ST23TN_Border_ST23True17086487-56ba-4979-b8de-064025a6b4da + 8fdc7ab...
0.00014146.816625-79.19377854.973610-108.150034169.29274954.662015-98.973320159.359054c1d5bfde8f8011e08e4d00247eb1f55ec1d5bfde8f8011e08e4d00247eb1f55e_0TrueTN_Border_AL11TN_Border_AL11True78736387-5f60-4832-b3fe-d50daf81b0a6 + 7f43f50...
0.00006590.037005-148.603743104.162080-169.365875277.456249103.320111-152.565573259.703284c1d5bfde8f8011e08e4d00247eb1f55ec1d5bfde8f8011e08e4d00247eb1f55e_0TrueTN_Border_GY11TN_Border_GY11Trueb18cd1aa-7808-49b9-a7cf-605eaf07b006 + e8acf6b...
0.00002543.687227-84.87660457.873034-96.129847156.57524557.778985-86.683186146.829004c1d5bfde8f8011e08e4d00247eb1f55ec1d5bfde8f8011e08e4d00247eb1f55e_0TrueTN_Border_MA11TN_Border_MA11Truedad02278-bd25-476f-8f58-dbe44be72586 + ed0c5d7...
\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
taplow_taphigh_tapstep_countregulatingregulation_moderegulation_valuetarget_deadbandregulating_bus_id
id
_BUS____5-BUS____6-1_PS1312525TrueCURRENT_LIMITER770.00.0_BUS____5_VL_0
_BUS____5-BUS____7-2_PS1312525TrueCURRENT_LIMITER770.00.0_BUS____5_VL_0
\n", - "
" - ], - "text/plain": [ - " tap low_tap high_tap step_count regulating \\\n", - "id \n", - "_BUS____5-BUS____6-1_PS 13 1 25 25 True \n", - "_BUS____5-BUS____7-2_PS 13 1 25 25 True \n", - "\n", - " regulation_mode regulation_value target_deadband \\\n", - "id \n", - "_BUS____5-BUS____6-1_PS CURRENT_LIMITER 770.0 0.0 \n", - "_BUS____5-BUS____7-2_PS CURRENT_LIMITER 770.0 0.0 \n", - "\n", - " regulating_bus_id \n", - "id \n", - "_BUS____5-BUS____6-1_PS _BUS____5_VL_0 \n", - "_BUS____5-BUS____7-2_PS _BUS____5_VL_0 " - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Initial tap positions\n", - "network.get_phase_tap_changers()" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "ename": "PyPowsyblError", - "evalue": "com.powsybl.commons.PowsyblException: Error during the execution in directory /home/pachecam/tmp/dynaflow_12102227360503391858 exit codes: Task 0 : 134", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mPyPowsyblError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 10\u001b[0m \u001b[0;34m'chosenOutputs'\u001b[0m \u001b[0;34m:\u001b[0m \u001b[0;34m'STEADYSTATE, LOSTEQ, TIMELINE, CONSTRAINTS'\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 11\u001b[0m 'timeStep' : '2.6'})\n\u001b[0;32m---> 12\u001b[0;31m \u001b[0mlf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrun_ac\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnetwork\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mparameters\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mp\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mprovider\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'DynaFlow'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 13\u001b[0m \u001b[0mnetwork1\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnetwork\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/anaconda3/lib/python3.8/site-packages/pypowsybl/loadflow.py\u001b[0m in \u001b[0;36mrun_ac\u001b[0;34m(network, parameters, provider, reporter)\u001b[0m\n\u001b[1;32m 263\u001b[0m \"\"\"\n\u001b[1;32m 264\u001b[0m \u001b[0mp\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mparameters\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_to_c_parameters\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mparameters\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\u001b[0m \u001b[0;32melse\u001b[0m \u001b[0m_pypowsybl\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mLoadFlowParameters\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 265\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0mComponentResult\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mres\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mres\u001b[0m \u001b[0;32min\u001b[0m \u001b[0m_pypowsybl\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrun_loadflow\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnetwork\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_handle\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;32mFalse\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mp\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mprovider\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;32mNone\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mreporter\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m \u001b[0;32melse\u001b[0m \u001b[0mreporter\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_reporter_model\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;31m# pylint: disable=protected-access\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 266\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 267\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mPyPowsyblError\u001b[0m: com.powsybl.commons.PowsyblException: Error during the execution in directory /home/pachecam/tmp/dynaflow_12102227360503391858 exit codes: Task 0 : 134" - ] - } - ], - "source": [ - "# 1st Dynaflow simulation: identical time constants (defined in file \"setting-1.xml\")\n", - "p = lf.Parameters(provider_parameters={'svcRegulationOn' : 'true',\n", - " 'shuntRegulationOn' : 'true',\n", - " 'automaticSlackBusOn' : 'true',\n", - " 'dsoVoltageLevel' : '63.0',\n", - " 'activePowerCompensation' : 'P',\n", - " 'settingPath' : os.getcwd() + '/setting-1.xml',\n", - " 'assemblingPath' : os.getcwd() + '/assembling.xml',\n", - " 'stopTime' : '300',\n", - " 'chosenOutputs' : 'STEADYSTATE, LOSTEQ, TIMELINE, CONSTRAINTS',\n", - " 'timeStep' : '2.6'})\n", - "lf.run_ac(network, parameters=p, provider='DynaFlow')\n", - "network1 = network" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "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", - "
taplow_taphigh_tapstep_countregulatingregulation_moderegulation_valuetarget_deadbandregulating_bus_id
id
_BUS____5-BUS____6-1_PS1812525TrueCURRENT_LIMITER770.00.0_BUS____5_VL_0
_BUS____5-BUS____7-2_PS1812525TrueCURRENT_LIMITER770.00.0_BUS____5_VL_0
\n", - "
" - ], - "text/plain": [ - " tap low_tap high_tap step_count regulating \\\n", - "id \n", - "_BUS____5-BUS____6-1_PS 18 1 25 25 True \n", - "_BUS____5-BUS____7-2_PS 18 1 25 25 True \n", - "\n", - " regulation_mode regulation_value target_deadband \\\n", - "id \n", - "_BUS____5-BUS____6-1_PS CURRENT_LIMITER 770.0 0.0 \n", - "_BUS____5-BUS____7-2_PS CURRENT_LIMITER 770.0 0.0 \n", - "\n", - " regulating_bus_id \n", - "id \n", - "_BUS____5-BUS____6-1_PS _BUS____5_VL_0 \n", - "_BUS____5-BUS____7-2_PS _BUS____5_VL_0 " - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Final tap positions after N-1 simulation with identical time constants\n", - "network1.get_phase_tap_changers()" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [], - "source": [ - "# 2nd Dynaflow simulation: different time constants (defined in file \"setting-2.xml\")\n", - "network = pn.load(network_file)\n", - "p = lf.Parameters(provider_parameters={'svcRegulationOn' : 'true',\n", - " 'shuntRegulationOn' : 'true',\n", - " 'automaticSlackBusOn' : 'true',\n", - " 'dsoVoltageLevel' : '63.0',\n", - " 'activePowerCompensation' : 'P',\n", - " 'settingPath' : os.getcwd() + '/setting-2.xml',\n", - " 'assemblingPath' : os.getcwd() + '/assembling.xml',\n", - " 'stopTime' : '300',\n", - " 'chosenOutputs' : 'STEADYSTATE, LOSTEQ, TIMELINE, CONSTRAINTS',\n", - " 'timeStep' : '2.6'})\n", - "lf.run_ac(network, parameters=p, provider='DynaFlow')\n", - "network2 = network" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "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", - "
taplow_taphigh_tapstep_countregulatingregulation_moderegulation_valuetarget_deadbandregulating_bus_id
id
_BUS____5-BUS____6-1_PS1812525TrueCURRENT_LIMITER770.00.0_BUS____5_VL_0
_BUS____5-BUS____7-2_PS1712525TrueCURRENT_LIMITER770.00.0_BUS____5_VL_0
\n", - "
" - ], - "text/plain": [ - " tap low_tap high_tap step_count regulating \\\n", - "id \n", - "_BUS____5-BUS____6-1_PS 18 1 25 25 True \n", - "_BUS____5-BUS____7-2_PS 17 1 25 25 True \n", - "\n", - " regulation_mode regulation_value target_deadband \\\n", - "id \n", - "_BUS____5-BUS____6-1_PS CURRENT_LIMITER 770.0 0.0 \n", - "_BUS____5-BUS____7-2_PS CURRENT_LIMITER 770.0 0.0 \n", - "\n", - " regulating_bus_id \n", - "id \n", - "_BUS____5-BUS____6-1_PS _BUS____5_VL_0 \n", - "_BUS____5-BUS____7-2_PS _BUS____5_VL_0 " - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Final tap positions after N-1 simulation with different time constants\n", - "network2.get_phase_tap_changers()" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Transits in transformers with identical time constants:\n", - " i1 i2\n", - "id \n", - "_BUS____5-BUS____6-1_PS 233.952319 39.468929\n", - "_BUS____5-BUS____7-2_PS 233.952319 39.468929\n", - "_BUS____5-BUS____8-1_PT 383.855389 64.758329\n", - "\n", - "Transits in transformers with different time constants:\n", - " i1 i2\n", - "id \n", - "_BUS____5-BUS____6-1_PS 223.959508 37.783092\n", - "_BUS____5-BUS____7-2_PS 253.934704 42.840058\n", - "_BUS____5-BUS____8-1_PT 373.860516 63.072144\n" - ] - } - ], - "source": [ - "print('Transits in transformers with identical time constants:')\n", - "print(network1.get_2_windings_transformers()[['i1','i2']])\n", - "print('\\nTransits in transformers with different time constants:')\n", - "print(network2.get_2_windings_transformers()[['i1','i2']])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The currents in both phase shifters are compared in both cases. Depending on the time constants of the phase shifter, the steady-state after the event is different.\n", - "This cannot be captured by a fully static simulator, in which all the phase shifters are activated at the same time with an external loop." - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "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.8.5" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/flow_decomposition_visualization_demo.ipynb b/flow_decomposition_visualization_demo.ipynb index 978a076..ebf9044 100644 --- a/flow_decomposition_visualization_demo.ipynb +++ b/flow_decomposition_visualization_demo.ipynb @@ -22,49 +22,7 @@ "It does not intend to illustrate a mass analysis on multiple network but rather plot some metrics about a decomposition of a single network. \n", "All plots are in MW (if not explicitly normalized). \n", "A toy network is provided. Do not hesitate to load your network ! \n", - "We hope that this notebook can motivate you to use the flow decompositioin and encourage you to explore further the results of the flow decomposition. " - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Defaulting to user installation because normal site-packages is not writeable\n", - "Looking in indexes: https://devin-depot.rte-france.com/repository/pypi-all/simple\n", - "Requirement already satisfied: pypowsybl in /home/kuleszahug/.local/lib/python3.8/site-packages (1.4.0.dev1)\n", - "Requirement already satisfied: plotly in /home/kuleszahug/.local/lib/python3.8/site-packages (5.20.0)\n", - "Collecting pycountry\n", - " Downloading https://devin-depot.rte-france.com/repository/pypi-all/packages/pycountry/23.12.11/pycountry-23.12.11-py3-none-any.whl (6.2 MB)\n", - "\u001b[2K \u001b[38;2;114;156;31m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m6.2/6.2 MB\u001b[0m \u001b[31m15.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0mm eta \u001b[36m0:00:01\u001b[0m0:01\u001b[0m:01\u001b[0m\n", - "\u001b[?25hRequirement already satisfied: prettytable in /home/kuleszahug/.local/lib/python3.8/site-packages (from pypowsybl) (2.0.0)\n", - "Requirement already satisfied: numpy>=1.20.0 in /home/kuleszahug/.local/lib/python3.8/site-packages (from pypowsybl) (1.24.3)\n", - "Requirement already satisfied: networkx in /home/kuleszahug/.local/lib/python3.8/site-packages (from pypowsybl) (3.1)\n", - "Requirement already satisfied: pandas>=1.3.5 in /home/kuleszahug/.local/lib/python3.8/site-packages (from pypowsybl) (2.0.3)\n", - "Requirement already satisfied: tenacity>=6.2.0 in /home/kuleszahug/.local/lib/python3.8/site-packages (from plotly) (8.2.3)\n", - "Requirement already satisfied: packaging in /home/kuleszahug/.local/lib/python3.8/site-packages (from plotly) (23.1)\n", - "Requirement already satisfied: importlib-resources<6.0.0,>=5.12.0 in /home/kuleszahug/.local/lib/python3.8/site-packages (from pycountry) (5.12.0)\n", - "Requirement already satisfied: zipp>=3.1.0 in /home/kuleszahug/.local/lib/python3.8/site-packages (from importlib-resources<6.0.0,>=5.12.0->pycountry) (3.15.0)\n", - "Requirement already satisfied: python-dateutil>=2.8.2 in /home/kuleszahug/.local/lib/python3.8/site-packages (from pandas>=1.3.5->pypowsybl) (2.8.2)\n", - "Requirement already satisfied: pytz>=2020.1 in /home/kuleszahug/.local/lib/python3.8/site-packages (from pandas>=1.3.5->pypowsybl) (2023.3)\n", - "Requirement already satisfied: tzdata>=2022.1 in /home/kuleszahug/.local/lib/python3.8/site-packages (from pandas>=1.3.5->pypowsybl) (2023.3)\n", - "Requirement already satisfied: setuptools in /home/kuleszahug/.local/lib/python3.8/site-packages (from prettytable->pypowsybl) (69.1.1)\n", - "Requirement already satisfied: wcwidth in /home/kuleszahug/.local/lib/python3.8/site-packages (from prettytable->pypowsybl) (0.2.6)\n", - "Requirement already satisfied: six>=1.5 in /home/kuleszahug/.local/lib/python3.8/site-packages (from python-dateutil>=2.8.2->pandas>=1.3.5->pypowsybl) (1.16.0)\n", - "\u001b[33mDEPRECATION: distro-info 0.23ubuntu1 has a non-standard version number. pip 24.1 will enforce this behaviour change. A possible replacement is to upgrade to a newer version of distro-info or contact the author to suggest that they release a version with a conforming version number. Discussion can be found at https://github.com/pypa/pip/issues/12063\u001b[0m\u001b[33m\n", - "\u001b[0m\u001b[33mDEPRECATION: python-debian 0.1.36ubuntu1 has a non-standard version number. pip 24.1 will enforce this behaviour change. A possible replacement is to upgrade to a newer version of python-debian or contact the author to suggest that they release a version with a conforming version number. Discussion can be found at https://github.com/pypa/pip/issues/12063\u001b[0m\u001b[33m\n", - "\u001b[0mInstalling collected packages: pycountry\n", - "Successfully installed pycountry-23.12.11\n", - "Note: you may need to restart the kernel to use updated packages.\n" - ] - } - ], - "source": [ - "pip install pypowsybl plotly pycountry" + "We hope that this notebook can motivate you to use the flow decompositioin and encourage you to explore further the results of the flow decomposition." ] }, { @@ -83,9 +41,7 @@ }, { "cell_type": "code", - "execution_count": 5, "metadata": {}, - "outputs": [], "source": [ "import random\n", "import numpy as np\n", @@ -99,17 +55,19 @@ "\n", "pd.options.display.max_columns = None\n", "pd.options.display.expand_frame_repr = False\n" - ] + ], + "outputs": [], + "execution_count": null }, { "cell_type": "code", - "execution_count": 6, "metadata": {}, - "outputs": [], "source": [ "colors = px.colors.qualitative.Dark24 + px.colors.qualitative.Light24\n", "random.Random(42).shuffle(colors)" - ] + ], + "outputs": [], + "execution_count": null }, { "cell_type": "markdown", @@ -123,9 +81,7 @@ }, { "cell_type": "code", - "execution_count": 7, "metadata": {}, - "outputs": [], "source": [ "def assign_country_all_substations(net):\n", " substation_ids = net.get_substations().index\n", @@ -161,17 +117,19 @@ " #net.dump(\"/tmp/test-net.xiidm\")\n", "\n", " return net" - ] + ], + "outputs": [], + "execution_count": null }, { "cell_type": "code", - "execution_count": 8, "metadata": {}, - "outputs": [], "source": [ "net = get_upgraded_ieee_net()\n", "#net = pp.network.load(\"\")" - ] + ], + "outputs": [], + "execution_count": null }, { "cell_type": "markdown", @@ -196,387 +154,30 @@ }, { "cell_type": "code", - "execution_count": 9, "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", - "
branch_idcontingency_idcountry1country2ac_reference_flowdc_reference_flowcommercial_flowx_node_flowpst_flowinternal_flowloop_flow_from_bgloop_flow_from_czloop_flow_from_dkloop_flow_from_eeloop_flow_from_frloop_flow_from_huloop_flow_from_ieloop_flow_from_ltloop_flow_from_lu
xnec_id
L105-110-1L105-110-1LTLU45.99082344.63249317.5750740.00.00.0000000.1343780.599154-1.2432890.3563872.012950-1.7980940.0135967.22976420.436399
L109-114-1L109-114-1LUBG7.7957687.30077322.2246040.00.00.000000-1.1960140.644376-2.7303690.9413903.517598-1.3160790.013292-0.902432-12.075320
L112-114-1L112-114-1LUBG-7.574891-6.799883-28.1372340.00.00.0000000.672358-0.956081-0.625192-0.860768-4.0503283.347053-0.0210962.14661033.618433
L115-122-1L115-122-1DKHU54.84850949.336716142.5253110.00.00.000000-0.0112580.241060-42.379365-0.0066620.004200-51.0634060.0060480.037167-0.016380
L116-120-1L116-120-1HUHU-62.152247-60.255260317.9894210.00.0-369.5924340.002858-0.061206111.9228080.001691-0.0010660.000000-0.001536-0.0094370.004159
............................................................
T7130-130-1T7130-130-1DKDK1299.3658761299.368013537.8844150.00.0760.863157-0.0358210.7670220.000000-0.0211960.013363-0.1883140.0192450.118261-0.052119
T7139-139-1T7139-139-1DKDK707.365876707.368013291.0637710.00.0415.683801-0.0358210.7670220.000000-0.0211960.013363-0.1883140.0192450.118261-0.052119
T7166-166-1T7166-166-1LTLT560.365876560.368013122.8652490.00.0436.836062-0.0358210.7670220.164522-0.0211960.013363-0.1883140.0192450.000000-0.052119
T73-74-1T73-74-1BGBG-247.856369-245.142195151.3112180.00.054.5383030.00000017.82880810.8199482.15097911.5868537.5137310.35708910.797059-19.525040
T81-88-1T81-88-1DKDK204.545743200.64639743.5397780.00.071.88703581.27747813.4124920.0000003.882132-41.027528-21.4709550.420337-3.44203955.893323
\n", - "

227 rows × 19 columns

\n", - "
" - ], - "text/plain": [ - " branch_id contingency_id country1 country2 ac_reference_flow dc_reference_flow commercial_flow x_node_flow pst_flow internal_flow loop_flow_from_bg loop_flow_from_cz loop_flow_from_dk loop_flow_from_ee loop_flow_from_fr loop_flow_from_hu loop_flow_from_ie loop_flow_from_lt loop_flow_from_lu\n", - "xnec_id \n", - "L105-110-1 L105-110-1 LT LU 45.990823 44.632493 17.575074 0.0 0.0 0.000000 0.134378 0.599154 -1.243289 0.356387 2.012950 -1.798094 0.013596 7.229764 20.436399\n", - "L109-114-1 L109-114-1 LU BG 7.795768 7.300773 22.224604 0.0 0.0 0.000000 -1.196014 0.644376 -2.730369 0.941390 3.517598 -1.316079 0.013292 -0.902432 -12.075320\n", - "L112-114-1 L112-114-1 LU BG -7.574891 -6.799883 -28.137234 0.0 0.0 0.000000 0.672358 -0.956081 -0.625192 -0.860768 -4.050328 3.347053 -0.021096 2.146610 33.618433\n", - "L115-122-1 L115-122-1 DK HU 54.848509 49.336716 142.525311 0.0 0.0 0.000000 -0.011258 0.241060 -42.379365 -0.006662 0.004200 -51.063406 0.006048 0.037167 -0.016380\n", - "L116-120-1 L116-120-1 HU HU -62.152247 -60.255260 317.989421 0.0 0.0 -369.592434 0.002858 -0.061206 111.922808 0.001691 -0.001066 0.000000 -0.001536 -0.009437 0.004159\n", - "... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...\n", - "T7130-130-1 T7130-130-1 DK DK 1299.365876 1299.368013 537.884415 0.0 0.0 760.863157 -0.035821 0.767022 0.000000 -0.021196 0.013363 -0.188314 0.019245 0.118261 -0.052119\n", - "T7139-139-1 T7139-139-1 DK DK 707.365876 707.368013 291.063771 0.0 0.0 415.683801 -0.035821 0.767022 0.000000 -0.021196 0.013363 -0.188314 0.019245 0.118261 -0.052119\n", - "T7166-166-1 T7166-166-1 LT LT 560.365876 560.368013 122.865249 0.0 0.0 436.836062 -0.035821 0.767022 0.164522 -0.021196 0.013363 -0.188314 0.019245 0.000000 -0.052119\n", - "T73-74-1 T73-74-1 BG BG -247.856369 -245.142195 151.311218 0.0 0.0 54.538303 0.000000 17.828808 10.819948 2.150979 11.586853 7.513731 0.357089 10.797059 -19.525040\n", - "T81-88-1 T81-88-1 DK DK 204.545743 200.646397 43.539778 0.0 0.0 71.887035 81.277478 13.412492 0.000000 3.882132 -41.027528 -21.470955 0.420337 -3.442039 55.893323\n", - "\n", - "[227 rows x 19 columns]" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], "source": [ "parameters = pp.flowdecomposition.Parameters(enable_losses_compensation=True,\n", - " rescale_enabled=False,\n", - " )\n", + " rescale_mode=pp.flowdecomposition.RescaleMode.ACER_METHODOLOGY)\n", "flow_dec_object = pp.flowdecomposition.create_decomposition() \\\n", " .add_5perc_ptdf_as_monitored_elements()\n", "flow_dec_original=flow_dec_object.run(net, flow_decomposition_parameters=parameters)\n", "flow_dec_original" - ] + ], + "outputs": [], + "execution_count": null }, { "cell_type": "code", - "execution_count": 10, "metadata": {}, - "outputs": [], "source": [ "flow_dec = flow_dec_original.copy()" - ] + ], + "outputs": [], + "execution_count": null }, { "cell_type": "code", - "execution_count": 11, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[Country(alpha_2='EE', alpha_3='EST', flag='🇪🇪', name='Estonia', numeric='233', official_name='Republic of Estonia'),\n", - " Country(alpha_2='FR', alpha_3='FRA', flag='🇫🇷', name='France', numeric='250', official_name='French Republic'),\n", - " Country(alpha_2='IE', alpha_3='IRL', flag='🇮🇪', name='Ireland', numeric='372'),\n", - " Country(alpha_2='CZ', alpha_3='CZE', flag='🇨🇿', name='Czechia', numeric='203', official_name='Czech Republic'),\n", - " Country(alpha_2='HU', alpha_3='HUN', flag='🇭🇺', name='Hungary', numeric='348', official_name='Hungary'),\n", - " Country(alpha_2='LT', alpha_3='LTU', flag='🇱🇹', name='Lithuania', numeric='440', official_name='Republic of Lithuania'),\n", - " Country(alpha_2='DK', alpha_3='DNK', flag='🇩🇰', name='Denmark', numeric='208', official_name='Kingdom of Denmark'),\n", - " Country(alpha_2='BG', alpha_3='BGR', flag='🇧🇬', name='Bulgaria', numeric='100', official_name='Republic of Bulgaria'),\n", - " Country(alpha_2='LU', alpha_3='LUX', flag='🇱🇺', name='Luxembourg', numeric='442', official_name='Grand Duchy of Luxembourg')]" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], "source": [ "flow_dec['total_flow'] = flow_dec[[c for c in flow_dec.columns if ('reference' not in c and 'flow' in c)]].sum(axis=1)\n", "flow_dec['total_loop_flow'] = flow_dec[[c for c in flow_dec.columns if 'loop_flow_from_' in c]].sum(axis=1)\n", @@ -587,7 +188,9 @@ "countries_alpha2 = set(flow_dec[\"country1\"]).union(set(flow_dec[\"country2\"]))\n", "countries = alpha_2_to_country(countries_alpha2)\n", "countries" - ] + ], + "outputs": [], + "execution_count": null }, { "cell_type": "markdown", @@ -602,9 +205,7 @@ }, { "cell_type": "code", - "execution_count": 12, "metadata": {}, - "outputs": [], "source": [ "def flow_decomposition_bar_chart(sorting_column, ascending=False, head=20, plot_scatter=True):\n", " threshold = .05\n", @@ -641,583 +242,81 @@ " name='total_loop_flow'\n", " )\n", " fig.show(renderer=\"notebook\")" - ] + ], + "outputs": [], + "execution_count": null }, { "cell_type": "code", - "execution_count": 13, "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - " \n", - " " - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], "source": [ "flow_decomposition_bar_chart('total_loop_flow')" - ] + ], + "outputs": [], + "execution_count": null }, { "cell_type": "code", - "execution_count": 14, "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - " \n", - " " - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], "source": [ "flow_decomposition_bar_chart('total_loop_flow', ascending=True)" - ] + ], + "outputs": [], + "execution_count": null }, { "cell_type": "code", - "execution_count": 15, "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - " \n", - " " - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], "source": [ "flow_decomposition_bar_chart('total_flow')" - ] + ], + "outputs": [], + "execution_count": null }, { "cell_type": "code", - "execution_count": 16, "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - " \n", - " " - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], "source": [ "flow_decomposition_bar_chart('pst_flow')" - ] + ], + "outputs": [], + "execution_count": null }, { "cell_type": "code", - "execution_count": 17, "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - " \n", - " " - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], "source": [ "flow_decomposition_bar_chart('pst_flow', ascending=True)" - ] + ], + "outputs": [], + "execution_count": null }, { "cell_type": "code", - "execution_count": 18, "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - " \n", - " " - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], "source": [ "flow_decomposition_bar_chart(f'loop_flow_from_{random.Random(42).choice(list(countries)).alpha_2.lower()}')" - ] + ], + "outputs": [], + "execution_count": null }, { "cell_type": "code", - "execution_count": 19, "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - " \n", - " " - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], "source": [ "flow_decomposition_bar_chart(f'loop_flow_from_{random.Random(42).choice(list(countries)).alpha_2.lower()}', ascending=True)" - ] + ], + "outputs": [], + "execution_count": null }, { "cell_type": "code", - "execution_count": 20, "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - " \n", - " " - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], "source": [ "flow_decomposition_bar_chart(f'loop_flow_from_{random.Random(12).choice(list(countries)).alpha_2.lower()}')" - ] + ], + "outputs": [], + "execution_count": null }, { "cell_type": "markdown", @@ -1236,60 +335,20 @@ }, { "cell_type": "code", - "execution_count": 21, "metadata": {}, - "outputs": [ - { - "ename": "TypeError", - "evalue": "unsupported operand type(s) for /: 'str' and 'int'", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m~/.local/lib/python3.8/site-packages/pandas/core/ops/array_ops.py\u001b[0m in \u001b[0;36m_na_arithmetic_op\u001b[0;34m(left, right, op, is_cmp)\u001b[0m\n\u001b[1;32m 170\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 171\u001b[0;31m \u001b[0mresult\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mleft\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mright\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 172\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mTypeError\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/.local/lib/python3.8/site-packages/pandas/core/computation/expressions.py\u001b[0m in \u001b[0;36mevaluate\u001b[0;34m(op, a, b, use_numexpr)\u001b[0m\n\u001b[1;32m 238\u001b[0m \u001b[0;31m# error: \"None\" not callable\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 239\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0m_evaluate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mop\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mop_str\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0ma\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mb\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m# type: ignore[misc]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 240\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0m_evaluate_standard\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mop\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mop_str\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0ma\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mb\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/.local/lib/python3.8/site-packages/pandas/core/computation/expressions.py\u001b[0m in \u001b[0;36m_evaluate_standard\u001b[0;34m(op, op_str, a, b)\u001b[0m\n\u001b[1;32m 69\u001b[0m \u001b[0m_store_test_result\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 70\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mop\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ma\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mb\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 71\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mTypeError\u001b[0m: unsupported operand type(s) for /: 'str' and 'int'", - "\nDuring handling of the above exception, another exception occurred:\n", - "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0mdf_sum1\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mflow_dec\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgroupby\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mc1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msum\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtranspose\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0mdf_sum2\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mflow_dec\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgroupby\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mc2\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msum\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtranspose\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m \u001b[0mdf_lf_per_country\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpd\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mconcat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mdf_sum1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdf_sum2\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgroupby\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlevel\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msum\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m/\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[0;32m~/.local/lib/python3.8/site-packages/pandas/core/ops/common.py\u001b[0m in \u001b[0;36mnew_method\u001b[0;34m(self, other)\u001b[0m\n\u001b[1;32m 79\u001b[0m \u001b[0mother\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mitem_from_zerodim\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mother\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 80\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 81\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mmethod\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mother\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 82\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 83\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mnew_method\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/.local/lib/python3.8/site-packages/pandas/core/arraylike.py\u001b[0m in \u001b[0;36m__truediv__\u001b[0;34m(self, other)\u001b[0m\n\u001b[1;32m 208\u001b[0m \u001b[0;34m@\u001b[0m\u001b[0munpack_zerodim_and_defer\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"__truediv__\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 209\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m__truediv__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mother\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 210\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_arith_method\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mother\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0moperator\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtruediv\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 211\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 212\u001b[0m \u001b[0;34m@\u001b[0m\u001b[0munpack_zerodim_and_defer\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"__rtruediv__\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/.local/lib/python3.8/site-packages/pandas/core/frame.py\u001b[0m in \u001b[0;36m_arith_method\u001b[0;34m(self, other, op)\u001b[0m\n\u001b[1;32m 7455\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mother\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mops\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0malign_method_FRAME\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mother\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mflex\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlevel\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 7456\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 7457\u001b[0;31m \u001b[0mnew_data\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_dispatch_frame_op\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mother\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mop\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0maxis\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 7458\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_construct_result\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnew_data\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 7459\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/.local/lib/python3.8/site-packages/pandas/core/frame.py\u001b[0m in \u001b[0;36m_dispatch_frame_op\u001b[0;34m(self, right, func, axis)\u001b[0m\n\u001b[1;32m 7482\u001b[0m \u001b[0;31m# i.e. scalar, faster than checking np.ndim(right) == 0\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 7483\u001b[0m \u001b[0;32mwith\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0merrstate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mall\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m\"ignore\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 7484\u001b[0;31m \u001b[0mbm\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_mgr\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mapply\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0marray_op\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mright\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mright\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 7485\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_constructor\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mbm\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 7486\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/.local/lib/python3.8/site-packages/pandas/core/internals/managers.py\u001b[0m in \u001b[0;36mapply\u001b[0;34m(self, f, align_keys, **kwargs)\u001b[0m\n\u001b[1;32m 348\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 349\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mcallable\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mf\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 350\u001b[0;31m \u001b[0mapplied\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mb\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mapply\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mf\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 351\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 352\u001b[0m \u001b[0mapplied\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgetattr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mb\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mf\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/.local/lib/python3.8/site-packages/pandas/core/internals/blocks.py\u001b[0m in \u001b[0;36mapply\u001b[0;34m(self, func, **kwargs)\u001b[0m\n\u001b[1;32m 327\u001b[0m \u001b[0mone\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 328\u001b[0m \"\"\"\n\u001b[0;32m--> 329\u001b[0;31m \u001b[0mresult\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalues\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 330\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 331\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_split_op_result\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mresult\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/.local/lib/python3.8/site-packages/pandas/core/ops/array_ops.py\u001b[0m in \u001b[0;36marithmetic_op\u001b[0;34m(left, right, op)\u001b[0m\n\u001b[1;32m 230\u001b[0m \u001b[0;31m# error: Argument 1 to \"_na_arithmetic_op\" has incompatible type\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 231\u001b[0m \u001b[0;31m# \"Union[ExtensionArray, ndarray[Any, Any]]\"; expected \"ndarray[Any, Any]\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 232\u001b[0;31m \u001b[0mres_values\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_na_arithmetic_op\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mleft\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mright\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mop\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m# type: ignore[arg-type]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 233\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 234\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mres_values\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/.local/lib/python3.8/site-packages/pandas/core/ops/array_ops.py\u001b[0m in \u001b[0;36m_na_arithmetic_op\u001b[0;34m(left, right, op, is_cmp)\u001b[0m\n\u001b[1;32m 176\u001b[0m \u001b[0;31m# Don't do this for comparisons, as that will handle complex numbers\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 177\u001b[0m \u001b[0;31m# incorrectly, see GH#32047\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 178\u001b[0;31m \u001b[0mresult\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_masked_arith_op\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mleft\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mright\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mop\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 179\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 180\u001b[0m \u001b[0;32mraise\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/.local/lib/python3.8/site-packages/pandas/core/ops/array_ops.py\u001b[0m in \u001b[0;36m_masked_arith_op\u001b[0;34m(x, y, op)\u001b[0m\n\u001b[1;32m 133\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 134\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mmask\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0many\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 135\u001b[0;31m \u001b[0mresult\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mmask\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mop\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mxrav\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mmask\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 136\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 137\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mputmask\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mresult\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m~\u001b[0m\u001b[0mmask\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnan\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mTypeError\u001b[0m: unsupported operand type(s) for /: 'str' and 'int'" - ] - } - ], "source": [ "c1, c2 = 'country1', 'country2'\n", - "df_sum1 = flow_dec.groupby(c1).sum().transpose()\n", - "df_sum2 = flow_dec.groupby(c2).sum().transpose()\n", - "df_lf_per_country = pd.concat([df_sum1, df_sum2]).groupby(level=0).sum()/2" - ] + "df_sum1 = flow_dec.groupby(c1).sum(numeric_only=True).transpose()\n", + "df_sum2 = flow_dec.groupby(c2).sum(numeric_only=True).transpose()\n", + "df_lf_per_country = pd.concat([df_sum1, df_sum2]).groupby(level=0).sum()/2\n", + "df_lf_per_country" + ], + "outputs": [], + "execution_count": null }, { "cell_type": "code", - "execution_count": 22, "metadata": {}, - "outputs": [ - { - "ename": "NameError", - "evalue": "name 'df_lf_per_country' is not defined", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0mthreshold\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m.03\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mdf\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdf_lf_per_country\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcopy\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtranspose\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3\u001b[0m \u001b[0mdf_p\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdf\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mc\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mc\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mdf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcolumns\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;34m'loop_flow_from'\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mc\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtranspose\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0mdf_s\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdf_p\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mabs\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msum\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0maxis\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0mdf_p\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdf_p\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mreindex\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdf_s\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msort_values\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mascending\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mindex\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mNameError\u001b[0m: name 'df_lf_per_country' is not defined" - ] - } - ], "source": [ "threshold = .03\n", "df = df_lf_per_country.copy().transpose()\n", @@ -1313,13 +372,13 @@ " }\n", " )\n", "fig.show(renderer=\"notebook\")" - ] + ], + "outputs": [], + "execution_count": null }, { "cell_type": "code", - "execution_count": null, "metadata": {}, - "outputs": [], "source": [ "threshold = .03\n", "df = df_lf_per_country.copy().transpose()\n", @@ -1343,7 +402,9 @@ " }\n", " )\n", "fig.show(renderer=\"notebook\")" - ] + ], + "outputs": [], + "execution_count": null }, { "cell_type": "markdown", @@ -1356,21 +417,7 @@ }, { "cell_type": "code", - "execution_count": 23, "metadata": {}, - "outputs": [ - { - "ename": "NameError", - "evalue": "name 'df_lf_per_country' is not defined", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0mthreshold\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m.03\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mdf\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdf_lf_per_country\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcopy\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtranspose\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3\u001b[0m \u001b[0mdf_p\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdf\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mc\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mc\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mdf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcolumns\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;34m'loop_flow_from'\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mc\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0mdf_s\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdf_p\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mabs\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msum\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0maxis\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0mdf_p\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdf_p\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mreindex\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdf_s\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msort_values\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mascending\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mindex\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mNameError\u001b[0m: name 'df_lf_per_country' is not defined" - ] - } - ], "source": [ "threshold = .03\n", "df = df_lf_per_country.copy().transpose()\n", @@ -1394,13 +441,13 @@ " }\n", " )\n", "fig.show(renderer=\"notebook\")" - ] + ], + "outputs": [], + "execution_count": null }, { "cell_type": "code", - "execution_count": null, "metadata": {}, - "outputs": [], "source": [ "threshold = .03\n", "df = df_lf_per_country.copy().transpose()\n", @@ -1424,7 +471,9 @@ " }\n", " )\n", "fig.show(renderer=\"notebook\")" - ] + ], + "outputs": [], + "execution_count": null }, { "cell_type": "markdown", @@ -1438,9 +487,7 @@ }, { "cell_type": "code", - "execution_count": null, "metadata": {}, - "outputs": [], "source": [ "df_matrix = df_lf_per_country.transpose().sort_index(axis=1).sort_index()\n", "\n", @@ -1463,7 +510,9 @@ " ticktext=[np.sign(v)*10**abs(v) for v in tickvals],\n", "))\n", "fig.show(renderer=\"notebook\")" - ] + ], + "outputs": [], + "execution_count": null }, { "cell_type": "markdown", @@ -1488,9 +537,7 @@ }, { "cell_type": "code", - "execution_count": null, "metadata": {}, - "outputs": [], "source": [ "def plot_map(source = None, visited = None):\n", " if (visited is None) == (source is None) :\n", @@ -1534,34 +581,29 @@ " lonaxis_range=[-20, 50]\n", " )\n", " fig.show(renderer=\"notebook\")" - ] + ], + "outputs": [], + "execution_count": null }, { "cell_type": "code", - "execution_count": null, "metadata": {}, - "outputs": [], "source": [ "country = random.Random(12).choice(list(countries)).name\n", "country = pycountry.countries.get(alpha_2='FR').name # \"France\"\n", "plot_map(source=country)" - ] + ], + "outputs": [], + "execution_count": null }, { "cell_type": "code", - "execution_count": null, "metadata": {}, - "outputs": [], "source": [ "plot_map(visited=country)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, + ], "outputs": [], - "source": [] + "execution_count": null } ], "metadata": { diff --git a/images/network_6_nodes_without_HDVC.png b/images/network_6_nodes_without_HDVC.png new file mode 100644 index 0000000..9ed523e Binary files /dev/null and b/images/network_6_nodes_without_HDVC.png differ diff --git a/network_area_diagram.ipynb b/network_area_diagram.ipynb index 74a9ec1..fe3cdf9 100644 --- a/network_area_diagram.ipynb +++ b/network_area_diagram.ipynb @@ -2,44 +2,17 @@ "cells": [ { "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Defaulting to user installation because normal site-packages is not writeable\n", - "Looking in indexes: https://devin-depot.rte-france.com/repository/pypi-all/simple\n", - "Requirement already satisfied: pypowsybl in /home/kuleszahug/.local/lib/python3.8/site-packages (1.4.0.dev1)\n", - "Requirement already satisfied: prettytable in /home/kuleszahug/.local/lib/python3.8/site-packages (from pypowsybl) (2.0.0)\n", - "Requirement already satisfied: numpy>=1.20.0 in /home/kuleszahug/.local/lib/python3.8/site-packages (from pypowsybl) (1.24.3)\n", - "Requirement already satisfied: networkx in /home/kuleszahug/.local/lib/python3.8/site-packages (from pypowsybl) (3.1)\n", - "Requirement already satisfied: pandas>=1.3.5 in /home/kuleszahug/.local/lib/python3.8/site-packages (from pypowsybl) (2.0.3)\n", - "Requirement already satisfied: python-dateutil>=2.8.2 in /home/kuleszahug/.local/lib/python3.8/site-packages (from pandas>=1.3.5->pypowsybl) (2.8.2)\n", - "Requirement already satisfied: pytz>=2020.1 in /home/kuleszahug/.local/lib/python3.8/site-packages (from pandas>=1.3.5->pypowsybl) (2023.3)\n", - "Requirement already satisfied: tzdata>=2022.1 in /home/kuleszahug/.local/lib/python3.8/site-packages (from pandas>=1.3.5->pypowsybl) (2023.3)\n", - "Requirement already satisfied: setuptools in /home/kuleszahug/.local/lib/python3.8/site-packages (from prettytable->pypowsybl) (69.1.1)\n", - "Requirement already satisfied: wcwidth in /home/kuleszahug/.local/lib/python3.8/site-packages (from prettytable->pypowsybl) (0.2.6)\n", - "Requirement already satisfied: six>=1.5 in /home/kuleszahug/.local/lib/python3.8/site-packages (from python-dateutil>=2.8.2->pandas>=1.3.5->pypowsybl) (1.16.0)\n", - "\u001b[33mDEPRECATION: distro-info 0.23ubuntu1 has a non-standard version number. pip 24.1 will enforce this behaviour change. A possible replacement is to upgrade to a newer version of distro-info or contact the author to suggest that they release a version with a conforming version number. Discussion can be found at https://github.com/pypa/pip/issues/12063\u001b[0m\u001b[33m\n", - "\u001b[0m\u001b[33mDEPRECATION: python-debian 0.1.36ubuntu1 has a non-standard version number. pip 24.1 will enforce this behaviour change. A possible replacement is to upgrade to a newer version of python-debian or contact the author to suggest that they release a version with a conforming version number. Discussion can be found at https://github.com/pypa/pip/issues/12063\u001b[0m\u001b[33m\n", - "\u001b[0mNote: you may need to restart the kernel to use updated packages.\n" - ] + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-15T11:42:55.625432Z", + "start_time": "2025-09-15T11:42:55.198050Z" } - ], - "source": [ - "pip install pypowsybl" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], + }, "source": [ "import pypowsybl as pp" - ] + ], + "outputs": [], + "execution_count": 1 }, { "cell_type": "markdown", @@ -50,16 +23,20 @@ }, { "cell_type": "code", - "execution_count": 4, "metadata": { "pycharm": { "name": "#%%\n" + }, + "ExecuteTime": { + "end_time": "2025-09-15T11:42:55.657954Z", + "start_time": "2025-09-15T11:42:55.629793Z" } }, - "outputs": [], "source": [ "n = pp.network.create_ieee14()" - ] + ], + "outputs": [], + "execution_count": 2 }, { "cell_type": "markdown", @@ -70,23 +47,28 @@ }, { "cell_type": "code", - "execution_count": 5, - "metadata": {}, + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-15T11:42:55.737667Z", + "start_time": "2025-09-15T11:42:55.710179Z" + } + }, + "source": [ + "pp.loadflow.run_ac(n)" + ], "outputs": [ { "data": { "text/plain": [ - "[ComponentResult(connected_component_num=0, synchronous_component_num=0, status=CONVERGED, status_text=CONVERGED, iteration_count=2, reference_bus_id='VL1_0', slack_bus_results=[SlackBusResult(id='VL1_0', active_power_mismatch=-0.007777909376072145)], distributed_active_power=0.0)]" + "[ComponentResult(connected_component_num=0, synchronous_component_num=0, status=CONVERGED, status_text=Converged, iteration_count=3, reference_bus_id='VL1_0', slack_bus_results=[SlackBusResult(id='VL1_0', active_power_mismatch=-0.006730108618313579)], distributed_active_power=0.0)]" ] }, - "execution_count": 5, + "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], - "source": [ - "pp.loadflow.run_ac(n)" - ] + "execution_count": 3 }, { "cell_type": "markdown", @@ -97,979 +79,32 @@ }, { "cell_type": "code", - "execution_count": 6, "metadata": { "pycharm": { "name": "#%%\n" + }, + "ExecuteTime": { + "end_time": "2025-09-15T11:42:55.795231Z", + "start_time": "2025-09-15T11:42:55.767743Z" } }, + "source": [ + "n.get_network_area_diagram()" + ], "outputs": [ { "data": { - "image/svg+xml": [ - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 157\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " -153\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 76\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " -73\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 5\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " -5\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " -4\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 4\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 7\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " -7\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 8\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " -8\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 2\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " -2\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 18\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " -18\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 6\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " -6\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 9\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " -9\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 73\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " -71\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 56\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " -54\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 42\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " -41\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " -23\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 24\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " -61\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 62\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 28\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " -28\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 16\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " -16\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 44\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " -44\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 0\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 0\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 28\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " -28\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
\n", - "
VL1
\n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
\n", - "
\n", - "
143.1 kV / 0.0°
\n", - "
\n", - "
\n", - " \n", - "
\n", - "
VL10
\n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
\n", - "
\n", - "
12.6 kV / -15.1°
\n", - "
\n", - "
\n", - " \n", - "
\n", - "
VL11
\n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
\n", - "
\n", - "
12.7 kV / -14.8°
\n", - "
\n", - "
\n", - " \n", - "
\n", - "
VL12
\n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
\n", - "
\n", - "
12.7 kV / -15.1°
\n", - "
\n", - "
\n", - " \n", - "
\n", - "
VL13
\n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
\n", - "
\n", - "
12.6 kV / -15.2°
\n", - "
\n", - "
\n", - " \n", - "
\n", - "
VL14
\n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
\n", - "
\n", - "
12.4 kV / -16.0°
\n", - "
\n", - "
\n", - " \n", - "
\n", - "
VL2
\n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
\n", - "
\n", - "
141.1 kV / -5.0°
\n", - "
\n", - "
\n", - " \n", - "
\n", - "
VL3
\n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
\n", - "
\n", - "
136.3 kV / -12.7°
\n", - "
\n", - "
\n", - " \n", - "
\n", - "
VL4
\n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
\n", - "
\n", - "
137.4 kV / -10.3°
\n", - "
\n", - "
\n", - " \n", - "
\n", - "
VL5
\n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
\n", - "
\n", - "
137.6 kV / -8.8°
\n", - "
\n", - "
\n", - " \n", - "
\n", - "
VL6
\n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
\n", - "
\n", - "
12.8 kV / -14.2°
\n", - "
\n", - "
\n", - " \n", - "
\n", - "
VL7
\n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
\n", - "
\n", - "
14.9 kV / -13.4°
\n", - "
\n", - "
\n", - " \n", - "
\n", - "
VL8
\n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
\n", - "
\n", - "
21.8 kV / -13.4°
\n", - "
\n", - "
\n", - " \n", - "
\n", - "
VL9
\n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
\n", - "
\n", - "
12.7 kV / -14.9°
\n", - "
\n", - "
\n", - "
\n", - "
\n" - ], "text/plain": [ - "" - ] + "" + ], + "image/svg+xml": "\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 157\n \n \n \n \n \n \n \n \n \n \n \n -153\n \n \n \n \n \n \n \n \n \n \n \n \n \n 76\n \n \n \n \n \n \n \n \n \n \n \n -73\n \n \n \n \n \n \n \n \n \n \n \n \n \n 5\n \n \n \n \n \n \n \n \n \n \n \n -5\n \n \n \n \n \n \n \n \n \n \n \n \n \n -4\n \n \n \n \n \n \n \n \n \n \n \n 4\n \n \n \n \n \n \n \n \n \n \n \n \n \n 7\n \n \n \n \n \n \n \n \n \n \n \n -7\n \n \n \n \n \n \n \n \n \n \n \n \n \n 8\n \n \n \n \n \n \n \n \n \n \n \n -8\n \n \n \n \n \n \n \n \n \n \n \n \n \n 2\n \n \n \n \n \n \n \n \n \n \n \n -2\n \n \n \n \n \n \n \n \n \n \n \n \n \n 18\n \n \n \n \n \n \n \n \n \n \n \n -18\n \n \n \n \n \n \n \n \n \n \n \n \n \n 6\n \n \n \n \n \n \n \n \n \n \n \n -6\n \n \n \n \n \n \n \n \n \n \n \n \n \n 9\n \n \n \n \n \n \n \n \n \n \n \n -9\n \n \n \n \n \n \n \n \n \n \n \n \n \n 73\n \n \n \n \n \n \n \n \n \n \n \n -71\n \n \n \n \n \n \n \n \n \n \n \n \n \n 56\n \n \n \n \n \n \n \n \n \n \n \n -54\n \n \n \n \n \n \n \n \n \n \n \n \n \n 42\n \n \n \n \n \n \n \n \n \n \n \n -41\n \n \n \n \n \n \n \n \n \n \n \n \n \n -23\n \n \n \n \n \n \n \n \n \n \n \n 24\n \n \n \n \n \n \n \n \n \n \n \n \n \n -61\n \n \n \n \n \n \n \n \n \n \n \n 62\n \n \n \n \n \n \n \n \n \n \n \n \n \n 28\n \n \n \n \n \n \n \n \n \n \n \n -28\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 16\n \n \n \n \n \n \n \n \n \n \n \n -16\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 44\n \n \n \n \n \n \n \n \n \n \n \n -44\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 0\n \n \n \n \n \n \n \n \n \n \n \n 0\n \n \n \n \n \n \n \n \n \n \n \n \n \n 28\n \n \n \n \n \n \n \n \n \n \n \n -28\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n
VL1
\n
\n 143.1 kV / 0.0°
\n
\n
\n
VL10
\n
\n 12.6 kV / -15.1°
\n
\n
\n
VL11
\n
\n 12.7 kV / -14.8°
\n
\n
\n
VL12
\n
\n 12.7 kV / -15.1°
\n
\n
\n
VL13
\n
\n 12.6 kV / -15.2°
\n
\n
\n
VL14
\n
\n 12.4 kV / -16.0°
\n
\n
\n
VL2
\n
\n 141.1 kV / -5.0°
\n
\n
\n
VL3
\n
\n 136.3 kV / -12.7°
\n
\n
\n
VL4
\n
\n 137.4 kV / -10.3°
\n
\n
\n
VL5
\n
\n 137.6 kV / -8.8°
\n
\n
\n
VL6
\n
\n 12.8 kV / -14.2°
\n
\n
\n
VL7
\n
\n 14.9 kV / -13.4°
\n
\n
\n
VL8
\n
\n 21.8 kV / -13.4°
\n
\n
\n
VL9
\n
\n 12.7 kV / -14.9°
\n
\n
\n
\n
\n" }, - "execution_count": 6, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], - "source": [ - "n.get_network_area_diagram()" - ] + "execution_count": 4 }, { "cell_type": "markdown", @@ -1080,607 +115,29 @@ }, { "cell_type": "code", - "execution_count": 7, - "metadata": {}, + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-15T11:42:55.865398Z", + "start_time": "2025-09-15T11:42:55.843851Z" + } + }, + "source": [ + "n.get_network_area_diagram('VL4', 1)" + ], "outputs": [ { "data": { - "image/svg+xml": [ - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " -153\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 73\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " -71\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 56\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " -54\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 42\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " -41\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " -23\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 24\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " -61\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 62\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 28\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " -28\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 16\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " -16\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " -73\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 44\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 0\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 28\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " -28\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 5\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 9\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
\n", - "
VL2
\n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
\n", - "
\n", - "
141.1 kV / -5.0°
\n", - "
\n", - "
\n", - " \n", - "
\n", - "
VL3
\n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
\n", - "
\n", - "
136.3 kV / -12.7°
\n", - "
\n", - "
\n", - " \n", - "
\n", - "
VL4
\n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
\n", - "
\n", - "
137.4 kV / -10.3°
\n", - "
\n", - "
\n", - " \n", - "
\n", - "
VL5
\n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
\n", - "
\n", - "
137.6 kV / -8.8°
\n", - "
\n", - "
\n", - " \n", - "
\n", - "
VL7
\n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
\n", - "
\n", - "
14.9 kV / -13.4°
\n", - "
\n", - "
\n", - " \n", - "
\n", - "
VL9
\n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
\n", - "
\n", - "
12.7 kV / -14.9°
\n", - "
\n", - "
\n", - "
\n", - "
\n" - ], "text/plain": [ - "" - ] + "" + ], + "image/svg+xml": "\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n -153\n \n \n \n \n \n \n \n \n \n \n \n \n \n 73\n \n \n \n \n \n \n \n \n \n \n \n -71\n \n \n \n \n \n \n \n \n \n \n \n \n \n 56\n \n \n \n \n \n \n \n \n \n \n \n -54\n \n \n \n \n \n \n \n \n \n \n \n \n \n 42\n \n \n \n \n \n \n \n \n \n \n \n -41\n \n \n \n \n \n \n \n \n \n \n \n \n \n -23\n \n \n \n \n \n \n \n \n \n \n \n 24\n \n \n \n \n \n \n \n \n \n \n \n \n \n -61\n \n \n \n \n \n \n \n \n \n \n \n 62\n \n \n \n \n \n \n \n \n \n \n \n \n \n 28\n \n \n \n \n \n \n \n \n \n \n \n -28\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 16\n \n \n \n \n \n \n \n \n \n \n \n -16\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n -73\n \n \n \n \n \n \n \n \n \n \n \n \n \n 44\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 0\n \n \n \n \n \n \n \n \n \n \n \n \n \n 28\n \n \n \n \n \n \n \n \n \n \n \n -28\n \n \n \n \n \n \n \n \n \n \n \n \n \n 5\n \n \n \n \n \n \n \n \n \n \n \n \n \n 9\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n
VL2
\n
\n 141.1 kV / -5.0°
\n
\n
\n
VL3
\n
\n 136.3 kV / -12.7°
\n
\n
\n
VL4
\n
\n 137.4 kV / -10.3°
\n
\n
\n
VL5
\n
\n 137.6 kV / -8.8°
\n
\n
\n
VL7
\n
\n 14.9 kV / -13.4°
\n
\n
\n
VL9
\n
\n 12.7 kV / -14.9°
\n
\n
\n
\n
\n" }, - "execution_count": 7, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], - "source": [ - "n.get_network_area_diagram('VL4', 1)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] + "execution_count": 5 } ], "metadata": { diff --git a/network_modifications_node_breaker.ipynb b/network_modifications_node_breaker.ipynb index b2c2b27..a5d9dc4 100644 --- a/network_modifications_node_breaker.ipynb +++ b/network_modifications_node_breaker.ipynb @@ -21,13 +21,18 @@ }, { "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-26T14:49:19.397981Z", + "start_time": "2025-09-26T14:49:18.954341Z" + } + }, "source": [ "import pypowsybl as pp\n", "import pandas as pd" - ] + ], + "outputs": [], + "execution_count": 1 }, { "cell_type": "markdown", @@ -38,12 +43,17 @@ }, { "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-26T14:49:19.406328Z", + "start_time": "2025-09-26T14:49:19.402845Z" + } + }, "source": [ "n = pp.network.create_empty()" - ] + ], + "outputs": [], + "execution_count": 2 }, { "cell_type": "markdown", @@ -55,18 +65,26 @@ }, { "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-26T14:49:19.465802Z", + "start_time": "2025-09-26T14:49:19.460525Z" + } + }, "source": [ "n.create_substations(id=['S1', 'S2'])" - ] + ], + "outputs": [], + "execution_count": 3 }, { "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-26T14:49:19.525058Z", + "start_time": "2025-09-26T14:49:19.515399Z" + } + }, "source": [ "voltage_levels = pd.DataFrame.from_records(index='id', data=[\n", " {'substation_id': 'S1', 'id': 'VL1', 'topology_kind': 'NODE_BREAKER', 'nominal_v': 400},\n", @@ -74,7 +92,9 @@ " {'substation_id': 'S2', 'id': 'VL3', 'topology_kind': 'NODE_BREAKER', 'nominal_v': 400},\n", "])\n", "n.create_voltage_levels(voltage_levels)" - ] + ], + "outputs": [], + "execution_count": 4 }, { "cell_type": "markdown", @@ -85,9 +105,12 @@ }, { "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [], + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-26T14:49:19.585630Z", + "start_time": "2025-09-26T14:49:19.575522Z" + } + }, "source": [ "voltage_level_topology = pd.DataFrame.from_records(index='id', data=[\n", " {'id': 'VL1', 'aligned_buses_or_busbar_count': 1, 'switch_kinds': ''},\n", @@ -95,7 +118,9 @@ " {'id': 'VL3', 'aligned_buses_or_busbar_count': 2, 'switch_kinds': 'DISCONNECTOR'},\n", "])\n", "pp.network.create_voltage_level_topology(n, voltage_level_topology)" - ] + ], + "outputs": [], + "execution_count": 5 }, { "cell_type": "markdown", @@ -106,654 +131,55 @@ }, { "cell_type": "code", - "execution_count": 7, - "metadata": {}, + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-26T14:49:19.665798Z", + "start_time": "2025-09-26T14:49:19.634809Z" + } + }, + "source": [ + "n.get_single_line_diagram('S1')" + ], "outputs": [ { "data": { - "image/svg+xml": [ - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " VL1\n", - " \n", - " \n", - " \n", - " VL1_1_1\n", - " \n", - " \n", - " VL2\n", - " \n", - " \n", - " \n", - " VL2_1_1\n", - " \n", - " \n", - " \n", - " VL2_2_1\n", - " \n", - " \n", - " \n", - " VL2_3_1\n", - " \n", - " \n", - " \n", - " VL2_1_2\n", - " \n", - " \n", - " \n", - " VL2_2_2\n", - " \n", - " \n", - " \n", - " VL2_3_2\n", - " \n", - " \n", - " \n", - " VL2_1_3\n", - " \n", - " \n", - " \n", - " VL2_2_3\n", - " \n", - " \n", - " \n", - " VL2_3_3\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n" - ], "text/plain": [ - "" - ] + "" + ], + "image/svg+xml": "\n\n \n \n \n \n \n VL1\n \n \n \n VL1_1_1\n \n \n \n \n VL2\n \n \n \n VL2_1_1\n \n \n \n VL2_2_1\n \n \n \n VL2_3_1\n \n \n \n VL2_1_2\n \n \n \n VL2_2_2\n \n \n \n VL2_3_2\n \n \n \n VL2_1_3\n \n \n \n VL2_2_3\n \n \n \n VL2_3_3\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n" }, - "execution_count": 7, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], - "source": [ - "n.get_single_line_diagram('S1')" - ] + "execution_count": 6 }, { "cell_type": "code", - "execution_count": 8, - "metadata": {}, + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-26T14:49:19.746600Z", + "start_time": "2025-09-26T14:49:19.720933Z" + } + }, + "source": [ + "n.get_single_line_diagram('S2')" + ], "outputs": [ { "data": { - "image/svg+xml": [ - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " VL3\n", - " \n", - " \n", - " \n", - " VL3_1_1\n", - " \n", - " \n", - " \n", - " VL3_2_1\n", - " \n", - " \n", - " \n", - " VL3_1_2\n", - " \n", - " \n", - " \n", - " VL3_2_2\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n" - ], "text/plain": [ - "" - ] + "" + ], + "image/svg+xml": "\n\n \n \n \n \n \n VL3\n \n \n \n VL3_1_1\n \n \n \n VL3_2_1\n \n \n \n VL3_1_2\n \n \n \n VL3_2_2\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n" }, - "execution_count": 8, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], - "source": [ - "n.get_single_line_diagram('S2')" - ] + "execution_count": 7 }, { "cell_type": "markdown", @@ -767,9 +193,12 @@ }, { "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [], + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-26T14:49:19.810333Z", + "start_time": "2025-09-26T14:49:19.800441Z" + } + }, "source": [ "coupling_device = pd.DataFrame.from_records(index='bus_or_busbar_section_id_1', data=[\n", " {'bus_or_busbar_section_id_1': 'VL2_1_1', 'bus_or_busbar_section_id_2': 'VL2_2_1'},\n", @@ -780,920 +209,61 @@ " {'bus_or_busbar_section_id_1': 'VL3_1_2', 'bus_or_busbar_section_id_2': 'VL3_2_2'},\n", "])\n", "pp.network.create_coupling_device(n, coupling_device)" - ] + ], + "outputs": [], + "execution_count": 8 }, { "cell_type": "code", - "execution_count": 10, - "metadata": {}, + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-26T14:49:19.890413Z", + "start_time": "2025-09-26T14:49:19.860399Z" + } + }, + "source": [ + "n.get_single_line_diagram('S1')" + ], "outputs": [ { "data": { - "image/svg+xml": [ - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " VL1\n", - " \n", - " \n", - " \n", - " VL1_1_1\n", - " \n", - " \n", - " VL2\n", - " \n", - " \n", - " \n", - " VL2_1_1\n", - " \n", - " \n", - " \n", - " VL2_2_1\n", - " \n", - " \n", - " \n", - " VL2_3_1\n", - " \n", - " \n", - " \n", - " VL2_1_2\n", - " \n", - " \n", - " \n", - " VL2_2_2\n", - " \n", - " \n", - " \n", - " VL2_3_2\n", - " \n", - " \n", - " \n", - " VL2_1_3\n", - " \n", - " \n", - " \n", - " VL2_2_3\n", - " \n", - " \n", - " \n", - " VL2_3_3\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n" - ], "text/plain": [ - "" - ] + "" + ], + "image/svg+xml": "\n\n \n \n \n \n \n VL1\n \n \n \n VL1_1_1\n \n \n \n \n VL2\n \n \n \n VL2_1_1\n \n \n \n VL2_2_1\n \n \n \n VL2_3_1\n \n \n \n VL2_1_2\n \n \n \n VL2_2_2\n \n \n \n VL2_3_2\n \n \n \n VL2_1_3\n \n \n \n VL2_2_3\n \n \n \n VL2_3_3\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n" }, - "execution_count": 10, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], - "source": [ - "n.get_single_line_diagram('S1')" - ] + "execution_count": 9 }, { "cell_type": "code", - "execution_count": 11, - "metadata": {}, + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-26T14:49:19.971250Z", + "start_time": "2025-09-26T14:49:19.943313Z" + } + }, + "source": [ + "n.get_single_line_diagram('S2')" + ], "outputs": [ { "data": { - "image/svg+xml": [ - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " VL3\n", - " \n", - " \n", - " \n", - " VL3_1_1\n", - " \n", - " \n", - " \n", - " VL3_2_1\n", - " \n", - " \n", - " \n", - " VL3_1_2\n", - " \n", - " \n", - " \n", - " VL3_2_2\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n" - ], "text/plain": [ - "" - ] + "" + ], + "image/svg+xml": "\n\n \n \n \n \n \n VL3\n \n \n \n VL3_1_1\n \n \n \n VL3_2_1\n \n \n \n VL3_1_2\n \n \n \n VL3_2_2\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n" }, - "execution_count": 11, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], - "source": [ - "n.get_single_line_diagram('S2')" - ] + "execution_count": 10 }, { "cell_type": "markdown", @@ -1708,11 +278,35 @@ }, { "cell_type": "code", - "execution_count": 12, - "metadata": {}, + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-26T14:49:20.027858Z", + "start_time": "2025-09-26T14:49:20.012047Z" + } + }, + "source": [ + "loads = pd.DataFrame.from_records(\n", + " index='id',\n", + " columns=['id', 'p0', 'q0', 'bus_or_busbar_section_id', 'position_order'],\n", + " data=[('load1', 10.0, 3.0, 'VL1_1_1', 10),\n", + " ('load2', 10.0, 3.0, 'VL2_1_3', 60),\n", + " ('load3', 10.0, 3.0, 'VL2_2_3', 70),\n", + " ('load4', 10.0, 3.0, 'VL2_3_3', 80),\n", + " ('load5', 10.0, 3.0, 'VL3_1_1', 10)])\n", + "loads" + ], "outputs": [ { "data": { + "text/plain": [ + " p0 q0 bus_or_busbar_section_id position_order\n", + "id \n", + "load1 10.0 3.0 VL1_1_1 10\n", + "load2 10.0 3.0 VL2_1_3 60\n", + "load3 10.0 3.0 VL2_2_3 70\n", + "load4 10.0 3.0 VL2_3_3 80\n", + "load5 10.0 3.0 VL3_1_1 10" + ], "text/html": [ "
\n", "\n", - " \n", - " \n", - " \n", - " VL1\n", - " \n", - " \n", - " \n", - " VL1_1_1\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " load1\n", - " \n", - " \n", - " \n", - " VL2\n", - " \n", - " \n", - " \n", - " VL2_1_1\n", - " \n", - " \n", - " \n", - " VL2_2_1\n", - " \n", - " \n", - " \n", - " VL2_3_1\n", - " \n", - " \n", - " \n", - " VL2_1_2\n", - " \n", - " \n", - " \n", - " VL2_2_2\n", - " \n", - " \n", - " \n", - " VL2_3_2\n", - " \n", - " \n", - " \n", - " VL2_1_3\n", - " \n", - " \n", - " \n", - " VL2_2_3\n", - " \n", - " \n", - " \n", - " VL2_3_3\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " load2\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " load3\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " load4\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n" - ], "text/plain": [ - "" - ] + "" + ], + "image/svg+xml": "\n\n \n \n \n \n \n VL1\n \n \n \n VL1_1_1\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n load1\n \n \n \n \n \n VL2\n \n \n \n VL2_1_1\n \n \n \n VL2_2_1\n \n \n \n VL2_3_1\n \n \n \n VL2_1_2\n \n \n \n VL2_2_2\n \n \n \n VL2_3_2\n \n \n \n VL2_1_3\n \n \n \n VL2_2_3\n \n \n \n VL2_3_3\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n load2\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n load3\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n load4\n \n \n \n \n \n \n \n \n \n \n \n \n\n" }, - "execution_count": 14, + "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], - "source": [ - "n.get_single_line_diagram('S1')" - ] + "execution_count": 13 }, { "cell_type": "code", - "execution_count": 15, - "metadata": {}, + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-26T14:49:20.392854Z", + "start_time": "2025-09-26T14:49:20.368560Z" + } + }, + "source": [ + "n.get_single_line_diagram('S2')" + ], "outputs": [ { "data": { - "image/svg+xml": [ - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " VL3\n", - " \n", - " \n", - " \n", - " VL3_1_1\n", - " \n", - " \n", - " \n", - " VL3_2_1\n", - " \n", - " \n", - " \n", - " VL3_1_2\n", - " \n", - " \n", - " \n", - " VL3_2_2\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " load5\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n" - ], "text/plain": [ - "" - ] + "" + ], + "image/svg+xml": "\n\n \n \n \n \n \n VL3\n \n \n \n VL3_1_1\n \n \n \n VL3_2_1\n \n \n \n VL3_1_2\n \n \n \n VL3_2_2\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n load5\n \n \n \n \n \n \n \n \n\n" }, - "execution_count": 15, + "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], - "source": [ - "n.get_single_line_diagram('S2')" - ] + "execution_count": 14 }, { "cell_type": "markdown", @@ -3012,11 +462,37 @@ }, { "cell_type": "code", - "execution_count": 16, - "metadata": {}, + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-26T14:49:20.472981Z", + "start_time": "2025-09-26T14:49:20.450920Z" + } + }, + "source": [ + "generators = pd.DataFrame.from_records(\n", + " index='id',\n", + " columns=['id', 'max_p', 'min_p', 'voltage_regulator_on', 'target_p', 'target_q', 'target_v', 'bus_or_busbar_section_id', 'position_order', 'direction'],\n", + " data=[('gen1', 1000.0, 0, True, 100.0, 150.0, 225.0, 'VL2_1_2', 30, 'TOP'),\n", + " ('gen2', 1000.0, 0, True, 100.0, 150.0, 225.0, 'VL2_1_2', 40, 'TOP'),\n", + " ('gen3', 1000.0, 0, True, 100.0, 150.0, 225.0, 'VL2_1_2', 50, 'TOP')])\n", + "generators" + ], "outputs": [ { "data": { + "text/plain": [ + " max_p min_p voltage_regulator_on target_p target_q target_v \\\n", + "id \n", + "gen1 1000.0 0 True 100.0 150.0 225.0 \n", + "gen2 1000.0 0 True 100.0 150.0 225.0 \n", + "gen3 1000.0 0 True 100.0 150.0 225.0 \n", + "\n", + " bus_or_busbar_section_id position_order direction \n", + "id \n", + "gen1 VL2_1_2 30 TOP \n", + "gen2 VL2_1_2 40 TOP \n", + "gen3 VL2_1_2 50 TOP " + ], "text/html": [ "
\n", "\n", - " \n", - " \n", - " \n", - " VL1\n", - " \n", - " \n", - " \n", - " VL1_1_1\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " load1\n", - " \n", - " \n", - " \n", - " VL2\n", - " \n", - " \n", - " \n", - " VL2_1_1\n", - " \n", - " \n", - " \n", - " VL2_2_1\n", - " \n", - " \n", - " \n", - " VL2_3_1\n", - " \n", - " \n", - " \n", - " VL2_1_2\n", - " \n", - " \n", - " \n", - " VL2_2_2\n", - " \n", - " \n", - " \n", - " VL2_3_2\n", - " \n", - " \n", - " \n", - " VL2_1_3\n", - " \n", - " \n", - " \n", - " VL2_2_3\n", - " \n", - " \n", - " \n", - " VL2_3_3\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " gen1\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " gen2\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " gen3\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " load2\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " load3\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " load4\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n" - ], "text/plain": [ - "" - ] + "" + ], + "image/svg+xml": "\n\n \n \n \n \n \n VL1\n \n \n \n VL1_1_1\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n load1\n \n \n \n \n \n VL2\n \n \n \n VL2_1_1\n \n \n \n VL2_2_1\n \n \n \n VL2_3_1\n \n \n \n VL2_1_2\n \n \n \n VL2_2_2\n \n \n \n VL2_3_2\n \n \n \n VL2_1_3\n \n \n \n VL2_2_3\n \n \n \n VL2_3_3\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n gen1\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n gen2\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n gen3\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n load2\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n load3\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n load4\n \n \n \n \n \n \n \n \n \n \n \n \n\n" }, - "execution_count": 18, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], - "source": [ - "n.get_single_line_diagram('S1')" - ] + "execution_count": 17 }, { "cell_type": "markdown", @@ -4142,11 +634,36 @@ }, { "cell_type": "code", - "execution_count": 19, - "metadata": {}, + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-26T14:49:20.907872Z", + "start_time": "2025-09-26T14:49:20.885850Z" + } + }, + "source": [ + "shunt_df = pd.DataFrame.from_records(\n", + " index='id',\n", + " columns=['id', 'model_type', 'section_count', 'target_v',\n", + " 'target_deadband', 'bus_or_busbar_section_id', 'position_order', 'direction'],\n", + " data=[('shunt1', 'LINEAR', 1, 221, 2, 'VL2_3_3', 90, 'TOP')])\n", + "model_df = pd.DataFrame.from_records(\n", + " index='id',\n", + " columns=['id', 'g_per_section', 'b_per_section', 'max_section_count'],\n", + " data=[('shunt1', 0.014, 0.0001, 2)])\n", + "shunt_df" + ], "outputs": [ { "data": { + "text/plain": [ + " model_type section_count target_v target_deadband \\\n", + "id \n", + "shunt1 LINEAR 1 221 2 \n", + "\n", + " bus_or_busbar_section_id position_order direction \n", + "id \n", + "shunt1 VL2_3_3 90 TOP " + ], "text/html": [ "
\n", "\n", - " \n", - " \n", - " \n", - " VL1\n", - " \n", - " \n", - " \n", - " VL1_1_1\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " load1\n", - " \n", - " \n", - " \n", - " VL2\n", - " \n", - " \n", - " \n", - " VL2_1_1\n", - " \n", - " \n", - " \n", - " VL2_2_1\n", - " \n", - " \n", - " \n", - " VL2_3_1\n", - " \n", - " \n", - " \n", - " VL2_1_2\n", - " \n", - " \n", - " \n", - " VL2_2_2\n", - " \n", - " \n", - " \n", - " VL2_3_2\n", - " \n", - " \n", - " \n", - " VL2_1_3\n", - " \n", - " \n", - " \n", - " VL2_2_3\n", - " \n", - " \n", - " \n", - " VL2_3_3\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " gen1\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " gen2\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " gen3\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " load2\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " load3\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " load4\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " shunt1\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n" - ], "text/plain": [ - "" - ] + "" + ], + "image/svg+xml": "\n\n \n \n \n \n \n VL1\n \n \n \n VL1_1_1\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n load1\n \n \n \n \n \n VL2\n \n \n \n VL2_1_1\n \n \n \n VL2_2_1\n \n \n \n VL2_3_1\n \n \n \n VL2_1_2\n \n \n \n VL2_2_2\n \n \n \n VL2_3_2\n \n \n \n VL2_1_3\n \n \n \n VL2_2_3\n \n \n \n VL2_3_3\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n gen1\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n gen2\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n gen3\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n load2\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n load3\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n load4\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n shunt1\n \n \n \n \n \n \n \n \n \n \n \n \n\n" }, - "execution_count": 21, + "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], - "source": [ - "n.get_single_line_diagram('S1')" - ] + "execution_count": 20 }, { "cell_type": "markdown", @@ -5299,423 +774,41 @@ }, { "cell_type": "code", - "execution_count": 22, - "metadata": {}, + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-26T14:49:21.203713Z", + "start_time": "2025-09-26T14:49:21.197105Z" + } + }, + "source": "pp.network.create_static_var_compensator_bay(n, id='svc', target_q=200.0, regulation_mode='REACTIVE_POWER', regulating=True, target_v=400, b_min=0, b_max=2, bus_or_busbar_section_id='VL3_1_1', position_order=20, direction='TOP')", "outputs": [], - "source": [ - "pp.network.create_static_var_compensator_bay(n, id='svc', target_q=200.0, regulation_mode='REACTIVE_POWER', target_v=400, b_min=0, b_max=2, bus_or_busbar_section_id='VL3_1_1', position_order=20, direction='TOP')" - ] + "execution_count": 21 }, { "cell_type": "code", - "execution_count": 23, - "metadata": {}, + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-26T14:49:21.290346Z", + "start_time": "2025-09-26T14:49:21.252706Z" + } + }, + "source": [ + "n.get_single_line_diagram('VL3')" + ], "outputs": [ { "data": { - "image/svg+xml": [ - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " VL3_1_1\n", - " \n", - " \n", - " \n", - " VL3_2_1\n", - " \n", - " \n", - " \n", - " VL3_1_2\n", - " \n", - " \n", - " \n", - " VL3_2_2\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " load5\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " svc\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n" - ], "text/plain": [ - "" - ] + "" + ], + "image/svg+xml": "\n\n \n \n \n \n \n \n VL3_1_1\n \n \n \n VL3_2_1\n \n \n \n VL3_1_2\n \n \n \n VL3_2_2\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n load5\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n svc\n \n \n \n \n \n \n \n \n\n" }, - "execution_count": 23, + "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], - "source": [ - "n.get_single_line_diagram('VL3')" - ] + "execution_count": 22 }, { "cell_type": "markdown", @@ -5727,1698 +820,86 @@ }, { "cell_type": "code", - "execution_count": 24, - "metadata": {}, - "outputs": [], + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-26T14:49:21.338198Z", + "start_time": "2025-09-26T14:49:21.331236Z" + } + }, "source": [ "pp.network.create_2_windings_transformer_bays(n, id='twt', b=1e-6, g=1e-6, r=0.5, x=10, rated_u1=225, rated_u2=63,\n", " bus_or_busbar_section_id_1='VL1_1_1', position_order_1=20,\n", " bus_or_busbar_section_id_2='VL2_1_1', position_order_2=10)" - ] + ], + "outputs": [], + "execution_count": 23 }, { "cell_type": "code", - "execution_count": 25, - "metadata": {}, - "outputs": [], + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-26T14:49:21.395324Z", + "start_time": "2025-09-26T14:49:21.386933Z" + } + }, "source": [ "pp.network.create_line_bays(n, id='line1', r=0.1, x=10, g1=0, b1=0, g2=0, b2=0, bus_or_busbar_section_id_1='VL2_3_1', position_order_1=20, direction_1='BOTTOM',\n", " bus_or_busbar_section_id_2='VL3_1_2', position_order_2=30)" - ] + ], + "outputs": [], + "execution_count": 24 }, { "cell_type": "code", - "execution_count": 26, - "metadata": {}, + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-26T14:49:21.466503Z", + "start_time": "2025-09-26T14:49:21.444397Z" + } + }, + "source": [ + "n.get_single_line_diagram('S1')" + ], "outputs": [ { "data": { - "image/svg+xml": [ - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " VL1\n", - " \n", - " \n", - " \n", - " VL1_1_1\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " load1\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " twt\n", - " \n", - " \n", - " \n", - " VL2\n", - " \n", - " \n", - " \n", - " VL2_1_1\n", - " \n", - " \n", - " \n", - " VL2_2_1\n", - " \n", - " \n", - " \n", - " VL2_3_1\n", - " \n", - " \n", - " \n", - " VL2_1_2\n", - " \n", - " \n", - " \n", - " VL2_2_2\n", - " \n", - " \n", - " \n", - " VL2_3_2\n", - " \n", - " \n", - " \n", - " VL2_1_3\n", - " \n", - " \n", - " \n", - " VL2_2_3\n", - " \n", - " \n", - " \n", - " VL2_3_3\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " twt\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " line1\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " gen1\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " gen2\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " gen3\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " load2\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " load3\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " load4\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " shunt1\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n" - ], "text/plain": [ - "" - ] + "" + ], + "image/svg+xml": "\n\n \n \n \n \n \n VL1\n \n \n \n VL1_1_1\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n load1\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n twt\n \n \n \n \n \n VL2\n \n \n \n VL2_1_1\n \n \n \n VL2_2_1\n \n \n \n VL2_3_1\n \n \n \n VL2_1_2\n \n \n \n VL2_2_2\n \n \n \n VL2_3_2\n \n \n \n VL2_1_3\n \n \n \n VL2_2_3\n \n \n \n VL2_3_3\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n twt\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n line1\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n gen1\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n gen2\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n gen3\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n load2\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n load3\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n load4\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n shunt1\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n" }, - "execution_count": 26, + "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], - "source": [ - "n.get_single_line_diagram('S1')" - ] + "execution_count": 25 }, { "cell_type": "code", - "execution_count": 27, - "metadata": {}, + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-26T14:49:21.556066Z", + "start_time": "2025-09-26T14:49:21.526292Z" + } + }, + "source": [ + "n.get_single_line_diagram('S2')" + ], "outputs": [ { "data": { - "image/svg+xml": [ - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " VL3\n", - " \n", - " \n", - " \n", - " VL3_1_1\n", - " \n", - " \n", - " \n", - " VL3_2_1\n", - " \n", - " \n", - " \n", - " VL3_1_2\n", - " \n", - " \n", - " \n", - " VL3_2_2\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " load5\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " svc\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " line1\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n" - ], "text/plain": [ - "" - ] + "" + ], + "image/svg+xml": "\n\n \n \n \n \n \n VL3\n \n \n \n VL3_1_1\n \n \n \n VL3_2_1\n \n \n \n VL3_1_2\n \n \n \n VL3_2_2\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n load5\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n svc\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n line1\n \n \n \n \n \n \n \n \n\n" }, - "execution_count": 27, + "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], - "source": [ - "n.get_single_line_diagram('S2')" - ] + "execution_count": 26 }, { "cell_type": "markdown", @@ -7438,11 +919,31 @@ }, { "cell_type": "code", - "execution_count": 28, - "metadata": {}, + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-26T14:49:21.615948Z", + "start_time": "2025-09-26T14:49:21.606328Z" + } + }, + "source": [ + "pp.network.get_connectables_order_positions(n, 'VL2')" + ], "outputs": [ { "data": { + "text/plain": [ + " order_position extension_name\n", + "connectable_id \n", + "twt 10 twt\n", + "line1 20 line1\n", + "gen1 30 gen1\n", + "gen2 40 gen2\n", + "gen3 50 gen3\n", + "load2 60 load2\n", + "load3 70 load3\n", + "load4 80 load4\n", + "shunt1 90 shunt1" + ], "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 \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
BBE1AA1
\n \n \n \n \n \n
\n
\n
kV / °
\n
\n
\n \n
\n
BBE2AA1
\n \n \n \n \n \n \n \n \n \n
\n
\n
kV / °
\n
\n
kV / °
\n
\n
\n \n
\n
DDE1AA1
\n \n \n \n \n \n
\n
\n
kV / °
\n
\n
\n \n
\n
DDE2AA1
\n \n \n \n \n \n
\n
\n
kV / °
\n
\n
\n \n
\n
DDE3AA1
\n \n \n \n \n \n
\n
\n
kV / °
\n
\n
\n \n
\n
FFR1AA1
\n \n \n \n \n \n
\n
\n
kV / °
\n
\n
\n \n
\n
FFR2AA1
\n \n \n \n \n \n
\n
\n
kV / °
\n
\n
\n \n
\n
FFR3AA1
\n \n \n \n \n \n
\n
\n
kV / °
\n
\n
\n \n
\n
NNL1AA1
\n \n \n \n \n \n
\n
\n
kV / °
\n
\n
\n \n
\n
NNL2AA1
\n \n \n \n \n \n
\n
\n
kV / °
\n
\n
\n \n
\n
NNL3AA1
\n \n \n \n \n \n
\n
\n
kV / °
\n
\n
\n
\n\n" }, - "execution_count": 44, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], - "execution_count": 44 + "execution_count": 4 }, { "cell_type": "markdown", @@ -170,8 +141,8 @@ "cell_type": "code", "metadata": { "ExecuteTime": { - "end_time": "2025-04-25T09:44:29.905286Z", - "start_time": "2025-04-25T09:44:29.878799Z" + "end_time": "2025-09-16T10:58:20.841484Z", + "start_time": "2025-09-16T10:58:20.816870Z" } }, "source": [ @@ -179,131 +150,19 @@ "n12.get_network_area_diagram()" ], "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2025-04-25 11:44:29,880 - INFO - loadflow provider used is : OpenLoadFlow\n", - "2025-04-25 11:44:29,881 - INFO - Version: {repositoryName=powsybl-open-loadflow, mavenProjectVersion=1.14.1, gitVersion=092b42a34ce74e1a2fe7c58ce5b5422945218e8d, gitBranch=UNKNOWN, buildTimestamp=2024-12-18T10:01:21.754Z}\n", - "2025-04-25 11:44:29,885 - INFO - Parameters:\n", - "┌───────────────────────────┬───────────────────────────────────────────────────────────┬──────────────────────────────────┐\n", - "│ Category │ Name │ Value │\n", - "├───────────────────────────┼───────────────────────────────────────────────────────────┼──────────────────────────────────┤\n", - "│ Automation │ simulateAutomationSystems │ false │\n", - "│ DC │ dcApproximationType │ IGNORE_R │\n", - "│ │ dcPowerFactor │ 1.0 │\n", - "│ │ dcUseTransformerRatio │ true │\n", - "│ Debug │ alwaysUpdateNetwork │ false │\n", - "│ │ debugDir │ │\n", - "│ FastRestart │ actionableSwitchesIds │ [] │\n", - "│ │ actionableTransformersIds │ [] │\n", - "│ │ networkCacheEnabled │ false │\n", - "│ GeneratorVoltageControl │ disableVoltageControlOfGeneratorsOutsideActivePowerLimits │ false │\n", - "│ │ fictitiousGeneratorVoltageControlCheckMode │ FORCED │\n", - "│ │ reactiveLimitsMaxPqPvSwitch │ 3 │\n", - "│ │ reactivePowerDispatchMode │ Q_EQUAL_PROPORTION │\n", - "│ │ reactiveRangeCheckMode │ MAX │\n", - "│ │ svcVoltageMonitoring │ true │\n", - "│ │ voltagePerReactivePowerControl │ false │\n", - "│ │ voltageRemoteControl │ true │\n", - "│ HVDC │ hvdcAcEmulation │ true │\n", - "│ Model │ asymmetrical │ false │\n", - "│ │ dc │ true │\n", - "│ │ linePerUnitMode │ IMPEDANCE │\n", - "│ │ lowImpedanceBranchMode │ REPLACE_BY_ZERO_IMPEDANCE_LINE │\n", - "│ │ lowImpedanceThreshold │ 1.0E-8 │\n", - "│ │ twtSplitShuntAdmittance │ false │\n", - "│ │ useLoadModel │ false │\n", - "│ NewtonKrylov │ maxNewtonKrylovIterations │ 100 │\n", - "│ │ newtonKrylovLineSearch │ false │\n", - "│ NewtonRaphson │ lineSearchStateVectorScalingMaxIteration │ 10 │\n", - "│ │ lineSearchStateVectorScalingStepFold │ 1.3333333333333333 │\n", - "│ │ maxActivePowerMismatch │ 0.01 │\n", - "│ │ maxAngleMismatch │ 1.0E-5 │\n", - "│ │ maxNewtonRaphsonIterations │ 15 │\n", - "│ │ maxRatioMismatch │ 1.0E-5 │\n", - "│ │ maxReactivePowerMismatch │ 0.01 │\n", - "│ │ maxRealisticVoltage │ 2.0 │\n", - "│ │ maxSusceptanceMismatch │ 1.0E-4 │\n", - "│ │ maxVoltageChangeStateVectorScalingMaxDphi │ 0.17453292519943295 │\n", - "│ │ maxVoltageChangeStateVectorScalingMaxDv │ 0.1 │\n", - "│ │ maxVoltageMismatch │ 1.0E-4 │\n", - "│ │ minRealisticVoltage │ 0.5 │\n", - "│ │ newtonRaphsonConvEpsPerEq │ 1.0E-4 │\n", - "│ │ newtonRaphsonStoppingCriteriaType │ UNIFORM_CRITERIA │\n", - "│ │ stateVectorScalingMode │ NONE │\n", - "│ OuterLoops │ maxOuterLoopIterations │ 20 │\n", - "│ │ outerLoopNames │ │\n", - "│ Performance │ computedConnectedComponentScope │ MAIN │\n", - "│ PhaseControl │ phaseShifterControlMode │ CONTINUOUS_WITH_DISCRETISATION │\n", - "│ │ phaseShifterRegulationOn │ false │\n", - "│ ReactivePowerControl │ generatorReactivePowerRemoteControl │ false │\n", - "│ │ transformerReactivePowerControl │ false │\n", - "│ ReferenceBus │ referenceBusSelectionMode │ FIRST_SLACK │\n", - "│ │ writeReferenceTerminals │ true │\n", - "│ Reporting │ reportedFeatures │ [] │\n", - "│ ShuntVoltageControl │ shuntCompensatorVoltageControlOn │ false │\n", - "│ │ shuntVoltageControlMode │ WITH_GENERATOR_VOLTAGE_CONTROL │\n", - "│ SlackDistribution │ areaInterchangeControl │ false │\n", - "│ │ areaInterchangeControlAreaType │ ControlArea │\n", - "│ │ areaInterchangePMaxMismatch │ 2.0 │\n", - "│ │ balanceType │ PROPORTIONAL_TO_GENERATION_P_MAX │\n", - "│ │ countriesToBalance │ [] │\n", - "│ │ distributedSlack │ true │\n", - "│ │ loadPowerFactorConstant │ false │\n", - "│ │ maxSlackBusCount │ 1 │\n", - "│ │ mostMeshedSlackBusSelectorMaxNominalVoltagePercentile │ 95.0 │\n", - "│ │ plausibleActivePowerLimit │ 5000.0 │\n", - "│ │ readSlackBus │ true │\n", - "│ │ slackBusCountryFilter │ [] │\n", - "│ │ slackBusPMaxMismatch │ 1.0 │\n", - "│ │ slackBusSelectionMode │ MOST_MESHED │\n", - "│ │ slackBusesIds │ [] │\n", - "│ │ slackDistributionFailureBehavior │ LEAVE_ON_SLACK_BUS │\n", - "│ │ useActiveLimits │ true │\n", - "│ │ writeSlackBus │ true │\n", - "│ Solver │ acSolverType │ NEWTON_RAPHSON │\n", - "│ TransformerVoltageControl │ generatorVoltageControlMinNominalVoltage │ -1.0 │\n", - "│ │ incrementalTransformerRatioTapControlOuterLoopMaxTapShift │ 3 │\n", - "│ │ transformerVoltageControlMode │ WITH_GENERATOR_VOLTAGE_CONTROL │\n", - "│ │ transformerVoltageControlOn │ false │\n", - "│ │ transformerVoltageControlUseInitialTapPosition │ false │\n", - "│ VoltageControls │ maxPlausibleTargetVoltage │ 1.2 │\n", - "│ │ minNominalVoltageTargetVoltageCheck │ 20.0 │\n", - "│ │ minPlausibleTargetVoltage │ 0.8 │\n", - "│ │ secondaryVoltageControl │ false │\n", - "│ │ useReactiveLimits │ true │\n", - "│ │ voltageTargetPriorities │ [GENERATOR, TRANSFORMER, SHUNT] │\n", - "│ VoltageInit │ voltageInitMode │ UNIFORM_VALUES │\n", - "│ │ voltageInitModeOverride │ NONE │\n", - "└───────────────────────────┴───────────────────────────────────────────────────────────┴──────────────────────────────────┘\n", - "2025-04-25 11:44:29,886 - WARNING - Network {CC0 SC0}: 11 generators have been discarded from active power control because of a targetP equals 0\n", - "2025-04-25 11:44:29,886 - WARNING - Network {CC0 SC0}: 12 generators have been discarded from active power control because of maxP not plausible\n", - "2025-04-25 11:44:29,887 - INFO - Network {CC0 SC0} has 12 buses and 16 branches\n", - "2025-04-25 11:44:29,887 - INFO - Network {CC0 SC0} balance: active generation=1000.0 MW, active load=1000.0 MW, reactive generation=0.0 MVar, reactive load=0.0 MVar\n", - "2025-04-25 11:44:29,888 - INFO - Network {CC0 SC0}, slack buses are [BBE2AA1_0] (method='Most meshed bus')\n", - "2025-04-25 11:44:29,888 - INFO - Network {CC0 SC0}, reference bus is BBE2AA1_0 (method='First slack')\n", - "2025-04-25 11:44:29,889 - INFO - Slack bus active power (-0.0 MW) distributed in 0 distribution iteration(s)\n", - "2025-04-25 11:44:29,890 - INFO - DC loadflow complete on network {CC0 SC0} (result=DcLoadFlowResult(outerLoopIterations=0, solverSuccess=true, outerLoopStatus=STABLE, slackBusActivePowerMismatch=-0.0, distributedActivePower=0.0))\n", - "2025-04-25 11:44:29,891 - INFO - Load flow ran in 9 ms\n", - "2025-04-25 11:44:29,896 - INFO - Number of steps: 688\n", - "2025-04-25 11:44:29,896 - INFO - Elapsed time: 0.002389342\n", - "2025-04-25 11:44:29,897 - WARNING - Base voltage configuration file '/home/edwardsphi/.itools/base-voltages.yml' not found, trying to load file 'base-voltages.yml' from resources\n" - ] - }, { "data": { "text/plain": [ - "" + "" ], "image/svg+xml": "\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 167\n \n \n \n \n \n \n \n \n \n \n \n -167\n \n \n \n \n \n \n \n \n \n \n \n \n \n -167\n \n \n \n \n \n \n \n \n \n \n \n 167\n \n \n \n \n \n \n \n \n \n \n \n \n \n 500\n \n \n \n \n \n \n \n \n \n \n \n -500\n \n \n \n \n \n \n \n \n \n \n \n \n \n 500\n \n \n \n \n \n \n \n \n \n \n \n -500\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 333\n \n \n \n \n \n \n \n \n \n \n \n -333\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n -167\n \n \n \n \n \n \n \n \n \n \n \n 167\n \n \n \n \n \n \n \n \n \n \n \n \n \n 167\n \n \n \n \n \n \n \n \n \n \n \n -167\n \n \n \n \n \n \n \n \n \n \n \n \n \n 333\n \n \n \n \n \n \n \n \n \n \n \n -333\n \n \n \n \n \n \n \n \n \n \n \n \n \n -500\n \n \n \n \n \n \n \n \n \n \n \n 500\n \n \n \n \n \n \n \n \n \n \n \n \n \n -500\n \n \n \n \n \n \n \n \n \n \n \n 500\n \n \n \n \n \n \n \n \n \n \n \n \n \n -500\n \n \n \n \n \n \n \n \n \n \n \n 500\n \n \n \n \n \n \n \n \n \n \n \n \n \n -500\n \n \n \n \n \n \n \n \n \n \n \n 500\n \n \n \n \n \n \n \n \n \n \n \n \n \n -0\n \n \n \n \n \n \n \n \n \n \n \n 0\n \n \n \n \n \n \n \n \n \n \n \n \n \n 500\n \n \n \n \n \n \n \n \n \n \n \n -500\n \n \n \n \n \n \n \n \n \n \n \n \n \n 500\n \n \n \n \n \n \n \n \n \n \n \n -500\n \n \n \n \n \n \n \n \n \n \n \n \n \n -0\n \n \n \n \n \n \n \n \n \n \n \n 0\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
BBE1AA1
\n \n \n \n \n \n
\n
\n
kV / 0.7°
\n
\n
\n \n
\n
BBE2AA1
\n \n \n \n \n \n \n \n \n \n
\n
\n
kV / 0.0°
\n
\n
kV / 1.3°
\n
\n
\n \n
\n
DDE1AA1
\n \n \n \n \n \n
\n
\n
kV / 0.7°
\n
\n
\n \n
\n
DDE2AA1
\n \n \n \n \n \n
\n
\n
kV / 1.3°
\n
\n
\n \n
\n
DDE3AA1
\n \n \n \n \n \n
\n
\n
kV / -0.0°
\n
\n
\n \n
\n
FFR1AA1
\n \n \n \n \n \n
\n
\n
kV / -4.0°
\n
\n
\n \n
\n
FFR2AA1
\n \n \n \n \n \n
\n
\n
kV / -2.0°
\n
\n
\n \n
\n
FFR3AA1
\n \n \n \n \n \n
\n
\n
kV / -2.0°
\n
\n
\n \n
\n
NNL1AA1
\n \n \n \n \n \n
\n
\n
kV / 5.3°
\n
\n
\n \n
\n
NNL2AA1
\n \n \n \n \n \n
\n
\n
kV / 3.3°
\n
\n
\n \n
\n
NNL3AA1
\n \n \n \n \n \n
\n
\n
kV / 3.3°
\n
\n
\n
\n
\n" }, - "execution_count": 45, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], - "execution_count": 45 + "execution_count": 5 }, { "cell_type": "markdown", @@ -317,8 +176,8 @@ "cell_type": "code", "metadata": { "ExecuteTime": { - "end_time": "2025-04-25T09:44:30.007418Z", - "start_time": "2025-04-25T09:44:29.971672Z" + "end_time": "2025-09-16T10:58:20.914379Z", + "start_time": "2025-09-16T10:58:20.890847Z" } }, "source": [ @@ -327,131 +186,19 @@ "n12.get_network_area_diagram()" ], "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2025-04-25 11:44:29,973 - INFO - loadflow provider used is : OpenLoadFlow\n", - "2025-04-25 11:44:29,974 - INFO - Version: {repositoryName=powsybl-open-loadflow, mavenProjectVersion=1.14.1, gitVersion=092b42a34ce74e1a2fe7c58ce5b5422945218e8d, gitBranch=UNKNOWN, buildTimestamp=2024-12-18T10:01:21.754Z}\n", - "2025-04-25 11:44:29,978 - INFO - Parameters:\n", - "┌───────────────────────────┬───────────────────────────────────────────────────────────┬──────────────────────────────────┐\n", - "│ Category │ Name │ Value │\n", - "├───────────────────────────┼───────────────────────────────────────────────────────────┼──────────────────────────────────┤\n", - "│ Automation │ simulateAutomationSystems │ false │\n", - "│ DC │ dcApproximationType │ IGNORE_R │\n", - "│ │ dcPowerFactor │ 1.0 │\n", - "│ │ dcUseTransformerRatio │ true │\n", - "│ Debug │ alwaysUpdateNetwork │ false │\n", - "│ │ debugDir │ │\n", - "│ FastRestart │ actionableSwitchesIds │ [] │\n", - "│ │ actionableTransformersIds │ [] │\n", - "│ │ networkCacheEnabled │ false │\n", - "│ GeneratorVoltageControl │ disableVoltageControlOfGeneratorsOutsideActivePowerLimits │ false │\n", - "│ │ fictitiousGeneratorVoltageControlCheckMode │ FORCED │\n", - "│ │ reactiveLimitsMaxPqPvSwitch │ 3 │\n", - "│ │ reactivePowerDispatchMode │ Q_EQUAL_PROPORTION │\n", - "│ │ reactiveRangeCheckMode │ MAX │\n", - "│ │ svcVoltageMonitoring │ true │\n", - "│ │ voltagePerReactivePowerControl │ false │\n", - "│ │ voltageRemoteControl │ true │\n", - "│ HVDC │ hvdcAcEmulation │ true │\n", - "│ Model │ asymmetrical │ false │\n", - "│ │ dc │ true │\n", - "│ │ linePerUnitMode │ IMPEDANCE │\n", - "│ │ lowImpedanceBranchMode │ REPLACE_BY_ZERO_IMPEDANCE_LINE │\n", - "│ │ lowImpedanceThreshold │ 1.0E-8 │\n", - "│ │ twtSplitShuntAdmittance │ false │\n", - "│ │ useLoadModel │ false │\n", - "│ NewtonKrylov │ maxNewtonKrylovIterations │ 100 │\n", - "│ │ newtonKrylovLineSearch │ false │\n", - "│ NewtonRaphson │ lineSearchStateVectorScalingMaxIteration │ 10 │\n", - "│ │ lineSearchStateVectorScalingStepFold │ 1.3333333333333333 │\n", - "│ │ maxActivePowerMismatch │ 0.01 │\n", - "│ │ maxAngleMismatch │ 1.0E-5 │\n", - "│ │ maxNewtonRaphsonIterations │ 15 │\n", - "│ │ maxRatioMismatch │ 1.0E-5 │\n", - "│ │ maxReactivePowerMismatch │ 0.01 │\n", - "│ │ maxRealisticVoltage │ 2.0 │\n", - "│ │ maxSusceptanceMismatch │ 1.0E-4 │\n", - "│ │ maxVoltageChangeStateVectorScalingMaxDphi │ 0.17453292519943295 │\n", - "│ │ maxVoltageChangeStateVectorScalingMaxDv │ 0.1 │\n", - "│ │ maxVoltageMismatch │ 1.0E-4 │\n", - "│ │ minRealisticVoltage │ 0.5 │\n", - "│ │ newtonRaphsonConvEpsPerEq │ 1.0E-4 │\n", - "│ │ newtonRaphsonStoppingCriteriaType │ UNIFORM_CRITERIA │\n", - "│ │ stateVectorScalingMode │ NONE │\n", - "│ OuterLoops │ maxOuterLoopIterations │ 20 │\n", - "│ │ outerLoopNames │ │\n", - "│ Performance │ computedConnectedComponentScope │ MAIN │\n", - "│ PhaseControl │ phaseShifterControlMode │ CONTINUOUS_WITH_DISCRETISATION │\n", - "│ │ phaseShifterRegulationOn │ false │\n", - "│ ReactivePowerControl │ generatorReactivePowerRemoteControl │ false │\n", - "│ │ transformerReactivePowerControl │ false │\n", - "│ ReferenceBus │ referenceBusSelectionMode │ FIRST_SLACK │\n", - "│ │ writeReferenceTerminals │ true │\n", - "│ Reporting │ reportedFeatures │ [] │\n", - "│ ShuntVoltageControl │ shuntCompensatorVoltageControlOn │ false │\n", - "│ │ shuntVoltageControlMode │ WITH_GENERATOR_VOLTAGE_CONTROL │\n", - "│ SlackDistribution │ areaInterchangeControl │ false │\n", - "│ │ areaInterchangeControlAreaType │ ControlArea │\n", - "│ │ areaInterchangePMaxMismatch │ 2.0 │\n", - "│ │ balanceType │ PROPORTIONAL_TO_GENERATION_P_MAX │\n", - "│ │ countriesToBalance │ [] │\n", - "│ │ distributedSlack │ true │\n", - "│ │ loadPowerFactorConstant │ false │\n", - "│ │ maxSlackBusCount │ 1 │\n", - "│ │ mostMeshedSlackBusSelectorMaxNominalVoltagePercentile │ 95.0 │\n", - "│ │ plausibleActivePowerLimit │ 5000.0 │\n", - "│ │ readSlackBus │ true │\n", - "│ │ slackBusCountryFilter │ [] │\n", - "│ │ slackBusPMaxMismatch │ 1.0 │\n", - "│ │ slackBusSelectionMode │ MOST_MESHED │\n", - "│ │ slackBusesIds │ [] │\n", - "│ │ slackDistributionFailureBehavior │ LEAVE_ON_SLACK_BUS │\n", - "│ │ useActiveLimits │ true │\n", - "│ │ writeSlackBus │ true │\n", - "│ Solver │ acSolverType │ NEWTON_RAPHSON │\n", - "│ TransformerVoltageControl │ generatorVoltageControlMinNominalVoltage │ -1.0 │\n", - "│ │ incrementalTransformerRatioTapControlOuterLoopMaxTapShift │ 3 │\n", - "│ │ transformerVoltageControlMode │ WITH_GENERATOR_VOLTAGE_CONTROL │\n", - "│ │ transformerVoltageControlOn │ false │\n", - "│ │ transformerVoltageControlUseInitialTapPosition │ false │\n", - "│ VoltageControls │ maxPlausibleTargetVoltage │ 1.2 │\n", - "│ │ minNominalVoltageTargetVoltageCheck │ 20.0 │\n", - "│ │ minPlausibleTargetVoltage │ 0.8 │\n", - "│ │ secondaryVoltageControl │ false │\n", - "│ │ useReactiveLimits │ true │\n", - "│ │ voltageTargetPriorities │ [GENERATOR, TRANSFORMER, SHUNT] │\n", - "│ VoltageInit │ voltageInitMode │ UNIFORM_VALUES │\n", - "│ │ voltageInitModeOverride │ NONE │\n", - "└───────────────────────────┴───────────────────────────────────────────────────────────┴──────────────────────────────────┘\n", - "2025-04-25 11:44:29,980 - WARNING - Network {CC0 SC0}: 11 generators have been discarded from active power control because of a targetP equals 0\n", - "2025-04-25 11:44:29,981 - WARNING - Network {CC0 SC0}: 12 generators have been discarded from active power control because of maxP not plausible\n", - "2025-04-25 11:44:29,981 - INFO - Network {CC0 SC0} has 12 buses and 17 branches\n", - "2025-04-25 11:44:29,982 - INFO - Network {CC0 SC0} balance: active generation=1000.0 MW, active load=1000.0 MW, reactive generation=0.0 MVar, reactive load=0.0 MVar\n", - "2025-04-25 11:44:29,983 - INFO - Network {CC0 SC0}, slack buses are [BBE2AA1_0] (method='Network extension bus')\n", - "2025-04-25 11:44:29,984 - INFO - Network {CC0 SC0}, reference bus is BBE2AA1_0 (method='First slack')\n", - "2025-04-25 11:44:29,985 - INFO - Slack bus active power (-0.0 MW) distributed in 0 distribution iteration(s)\n", - "2025-04-25 11:44:29,986 - INFO - DC loadflow complete on network {CC0 SC0} (result=DcLoadFlowResult(outerLoopIterations=0, solverSuccess=true, outerLoopStatus=STABLE, slackBusActivePowerMismatch=-0.0, distributedActivePower=0.0))\n", - "2025-04-25 11:44:29,987 - INFO - Load flow ran in 12 ms\n", - "2025-04-25 11:44:29,992 - INFO - Number of steps: 688\n", - "2025-04-25 11:44:29,993 - INFO - Elapsed time: 0.003730359\n", - "2025-04-25 11:44:29,993 - WARNING - Base voltage configuration file '/home/edwardsphi/.itools/base-voltages.yml' not found, trying to load file 'base-voltages.yml' from resources\n" - ] - }, { "data": { "text/plain": [ - "" + "" ], "image/svg+xml": "\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 180\n \n \n \n \n \n \n \n \n \n \n \n -180\n \n \n \n \n \n \n \n \n \n \n \n \n \n -180\n \n \n \n \n \n \n \n \n \n \n \n 180\n \n \n \n \n \n \n \n \n \n \n \n \n \n 541\n \n \n \n \n \n \n \n \n \n \n \n -541\n \n \n \n \n \n \n \n \n \n \n \n \n \n 270\n \n \n \n \n \n \n \n \n \n \n \n -270\n \n \n \n \n \n \n \n \n \n \n \n \n \n 270\n \n \n \n \n \n \n \n \n \n \n \n -270\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 360\n \n \n \n \n \n \n \n \n \n \n \n -360\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n -153\n \n \n \n \n \n \n \n \n \n \n \n 153\n \n \n \n \n \n \n \n \n \n \n \n \n \n 153\n \n \n \n \n \n \n \n \n \n \n \n -153\n \n \n \n \n \n \n \n \n \n \n \n \n \n 306\n \n \n \n \n \n \n \n \n \n \n \n -306\n \n \n \n \n \n \n \n \n \n \n \n \n \n -459\n \n \n \n \n \n \n \n \n \n \n \n 459\n \n \n \n \n \n \n \n \n \n \n \n \n \n -459\n \n \n \n \n \n \n \n \n \n \n \n 459\n \n \n \n \n \n \n \n \n \n \n \n \n \n -486\n \n \n \n \n \n \n \n \n \n \n \n 486\n \n \n \n \n \n \n \n \n \n \n \n \n \n -514\n \n \n \n \n \n \n \n \n \n \n \n 514\n \n \n \n \n \n \n \n \n \n \n \n \n \n -27\n \n \n \n \n \n \n \n \n \n \n \n 27\n \n \n \n \n \n \n \n \n \n \n \n \n \n 514\n \n \n \n \n \n \n \n \n \n \n \n -514\n \n \n \n \n \n \n \n \n \n \n \n \n \n 486\n \n \n \n \n \n \n \n \n \n \n \n -486\n \n \n \n \n \n \n \n \n \n \n \n \n \n -27\n \n \n \n \n \n \n \n \n \n \n \n 27\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
BBE1AA1
\n \n \n \n \n \n
\n
\n
kV / 0.7°
\n
\n
\n \n
\n
BBE2AA1
\n \n \n \n \n \n \n \n \n \n
\n
\n
kV / 0.0°
\n
\n
kV / 1.4°
\n
\n
\n \n
\n
DDE1AA1
\n \n \n \n \n \n
\n
\n
kV / 0.2°
\n
\n
\n \n
\n
DDE2AA1
\n \n \n \n \n \n
\n
\n
kV / 0.8°
\n
\n
\n \n
\n
DDE3AA1
\n \n \n \n \n \n
\n
\n
kV / -0.4°
\n
\n
\n \n
\n
FFR1AA1
\n \n \n \n \n \n
\n
\n
kV / -4.2°
\n
\n
\n \n
\n
FFR2AA1
\n \n \n \n \n \n
\n
\n
kV / -2.3°
\n
\n
\n \n
\n
FFR3AA1
\n \n \n \n \n \n
\n
\n
kV / -2.1°
\n
\n
\n \n
\n
NNL1AA1
\n \n \n \n \n \n
\n
\n
kV / 4.5°
\n
\n
\n \n
\n
NNL2AA1
\n \n \n \n \n \n
\n
\n
kV / 2.5°
\n
\n
\n \n
\n
NNL3AA1
\n \n \n \n \n \n
\n
\n
kV / 2.6°
\n
\n
\n
\n
\n" }, - "execution_count": 46, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], - "execution_count": 46 + "execution_count": 6 }, { "cell_type": "markdown", @@ -466,8 +213,8 @@ "cell_type": "code", "metadata": { "ExecuteTime": { - "end_time": "2025-04-25T09:44:30.140632Z", - "start_time": "2025-04-25T09:44:30.086640Z" + "end_time": "2025-09-16T10:58:21.017349Z", + "start_time": "2025-09-16T10:58:20.971008Z" } }, "source": [ @@ -490,77 +237,56 @@ "name": "stderr", "output_type": "stream", "text": [ - "2025-04-25 11:44:30,090 - ERROR - BBE1AA1 BBE2AA1 1 - Real line resistance cannot be negative (0.0 ohm)\n", - "2025-04-25 11:44:30,091 - ERROR - BBE1AA1 BBE3AA1 1 - Real line resistance cannot be negative (0.0 ohm)\n", - "2025-04-25 11:44:30,091 - ERROR - FFR1AA1 FFR2AA1 1 - Real line resistance cannot be negative (0.0 ohm)\n", - "2025-04-25 11:44:30,092 - ERROR - FFR1AA1 FFR3AA1 1 - Real line resistance cannot be negative (0.0 ohm)\n", - "2025-04-25 11:44:30,092 - ERROR - FFR2AA1 FFR3AA1 1 - Real line resistance cannot be negative (0.0 ohm)\n", - "2025-04-25 11:44:30,093 - ERROR - DDE1AA1 DDE2AA1 1 - Real line resistance cannot be negative (0.0 ohm)\n", - "2025-04-25 11:44:30,093 - ERROR - DDE1AA1 DDE3AA1 1 - Real line resistance cannot be negative (0.0 ohm)\n", - "2025-04-25 11:44:30,093 - ERROR - DDE2AA1 DDE3AA1 1 - Real line resistance cannot be negative (0.0 ohm)\n", - "2025-04-25 11:44:30,094 - ERROR - NNL1AA1 NNL2AA1 1 - Real line resistance cannot be negative (0.0 ohm)\n", - "2025-04-25 11:44:30,094 - ERROR - NNL1AA1 NNL3AA1 1 - Real line resistance cannot be negative (0.0 ohm)\n", - "2025-04-25 11:44:30,094 - ERROR - NNL2AA1 NNL3AA1 1 - Real line resistance cannot be negative (0.0 ohm)\n", - "2025-04-25 11:44:30,095 - ERROR - FFR2AA1 DDE3AA1 1 - Real line resistance cannot be negative (0.0 ohm)\n", - "2025-04-25 11:44:30,096 - ERROR - DDE2AA1 NNL3AA1 1 - Real line resistance cannot be negative (0.0 ohm)\n", - "2025-04-25 11:44:30,096 - ERROR - NNL2AA1 BBE3AA1 1 - Real line resistance cannot be negative (0.0 ohm)\n", - "2025-04-25 11:44:30,096 - ERROR - NNL2AA1 BBE3AA1 2 - Real line resistance cannot be negative (0.0 ohm)\n", - "2025-04-25 11:44:30,097 - ERROR - NNL2AA1 BBE3AA1 3 - Real line resistance cannot be negative (0.0 ohm)\n", - "2025-04-25 11:44:30,097 - ERROR - BBE2AA1 FFR3AA1 1 - Real line resistance cannot be negative (0.0 ohm)\n", - "2025-04-25 11:44:30,098 - ERROR - BBE2AA1 BBE3AA1 1 - Blank is not allowed, real transformer resistance must be greater than or equal to zero (0.0 ohm)\n", - "2025-04-25 11:44:30,099 - WARNING - BBE2AA1 BBE3AA1 1 - Blank is not allowed (0.0 S)\n", - "2025-04-25 11:44:30,099 - WARNING - BBE2AA1 BBE3AA1 1 - Transformer shunt conductance must be greater than or equal to zero (0.0 S)\n", - "2025-04-25 11:44:30,100 - WARNING - BBE2AA1 BBE3AA1 1 - For LTCs, transformer angle regulation voltage per tap should not be zero. Its absolute value should not be above 6 % (-0.68 %)\n", - "2025-04-25 11:44:30,106 - WARNING - Running RAO using Open RAO version 4.7.0 from git commit 4d70d0db5169461830fbb40cf4d2014f510e43f1.\n", - "2025-04-25 11:44:30,107 - WARNING - Network {CC0 SC0}: 11 generators have been discarded from active power control because of a targetP equals 0\n", - "2025-04-25 11:44:30,108 - INFO - Network {CC0 SC0} has 12 buses and 16 branches\n", - "2025-04-25 11:44:30,109 - INFO - Network {CC0 SC0} balance: active generation=1000.0 MW, active load=1000.0 MW, reactive generation=0.0 MVar, reactive load=0.0 MVar\n", - "2025-04-25 11:44:30,109 - INFO - Network {CC0 SC0}, slack buses are [BBE2AA1_0] (method='Most meshed bus')\n", - "2025-04-25 11:44:30,110 - INFO - Network {CC0 SC0}, reference bus is BBE2AA1_0 (method='First slack')\n", - "2025-04-25 11:44:30,110 - INFO - Running AC sensitivity analysis with 2 factors and 0 contingencies\n", - "2025-04-25 11:44:30,111 - INFO - Start AC loadflow on network {CC0 SC0}\n", - "2025-04-25 11:44:30,112 - INFO - AC loadflow complete on network {CC0 SC0} (result=AcLoadFlowResult(outerLoopIterations=0, newtonRaphsonIterations=2, solverStatus=CONVERGED, outerLoopStatus=STABLE, slackBusActivePowerMismatch=-0.002028186046532099, distributedActivePower=0.0))\n", - "2025-04-25 11:44:30,113 - INFO - Initial sensitivity analysis: cost = 90.0 (functional: 90.0, virtual: 0.0)\n", - "2025-04-25 11:44:30,114 - INFO - Limiting element #01: margin = -90.0 MW, element NNL2AA1 BBE3AA1 1 at state preventive, CNEC ID = \"NNL2AA1 BBE3AA1 1 - preventive\"\n", - "2025-04-25 11:44:30,114 - INFO - ----- Preventive perimeter optimization [start]\n", - "2025-04-25 11:44:30,115 - INFO - Root leaf, cost: 90.0 (functional: 90.0, virtual: 0.0)\n", - "2025-04-25 11:44:30,115 - INFO - Limiting element #01: margin = -90.0 MW, element NNL2AA1 BBE3AA1 1 at state preventive, CNEC ID = \"NNL2AA1 BBE3AA1 1 - preventive\"\n", - "2025-04-25 11:44:30,115 - INFO - Linear optimization on root leaf\n", - "2025-04-25 11:44:30,116 - INFO - No range actions to optimize\n", - "2025-04-25 11:44:30,116 - INFO - Root leaf, cost: 90.0 (functional: 90.0, virtual: 0.0)\n", - "2025-04-25 11:44:30,116 - INFO - No range actions activated\n", - "2025-04-25 11:44:30,117 - INFO - Limiting element #01: margin = -90.0 MW, element NNL2AA1 BBE3AA1 1 at state preventive, CNEC ID = \"NNL2AA1 BBE3AA1 1 - preventive\"\n", - "2025-04-25 11:44:30,117 - INFO - Using base network '12_node_network' on variant 'PreventiveScenario'\n", - "2025-04-25 11:44:30,118 - INFO - Search depth 1 [start]\n", - "2025-04-25 11:44:30,118 - INFO - Leaves to evaluate: 1\n", - "2025-04-25 11:44:30,119 - INFO - Connectable NNL2AA1 BBE3AA1 2 has been connected on each side.\n", - "2025-04-25 11:44:30,120 - WARNING - Network {CC0 SC0}: 11 generators have been discarded from active power control because of a targetP equals 0\n", - "2025-04-25 11:44:30,120 - INFO - Network {CC0 SC0} has 12 buses and 17 branches\n", - "2025-04-25 11:44:30,121 - INFO - Network {CC0 SC0} balance: active generation=1000.0 MW, active load=1000.0 MW, reactive generation=0.0 MVar, reactive load=0.0 MVar\n", - "2025-04-25 11:44:30,123 - INFO - Network {CC0 SC0}, slack buses are [BBE2AA1_1] (method='Most meshed bus')\n", - "2025-04-25 11:44:30,123 - INFO - Network {CC0 SC0}, reference bus is BBE2AA1_1 (method='First slack')\n", - "2025-04-25 11:44:30,124 - INFO - Running AC sensitivity analysis with 2 factors and 0 contingencies\n", - "2025-04-25 11:44:30,125 - INFO - Start AC loadflow on network {CC0 SC0}\n", - "2025-04-25 11:44:30,127 - INFO - AC loadflow complete on network {CC0 SC0} (result=AcLoadFlowResult(outerLoopIterations=0, newtonRaphsonIterations=2, solverStatus=CONVERGED, outerLoopStatus=STABLE, slackBusActivePowerMismatch=-3.2095159969713905E-4, distributedActivePower=0.0))\n", - "2025-04-25 11:44:30,128 - INFO - Evaluated network action(s): close NL2 BE3 2, cost: -139.73 (functional: -139.73, virtual: 0.0)\n", - "2025-04-25 11:44:30,129 - INFO - Optimized network action(s): close NL2 BE3 2, cost: -139.73 (functional: -139.73, virtual: 0.0)\n", - "2025-04-25 11:44:30,129 - INFO - Stop criterion reached, other threads may skip optimization.\n", - "2025-04-25 11:44:30,130 - INFO - Remaining leaves to evaluate: 0\n", - "2025-04-25 11:44:30,131 - INFO - Search depth 1 [end]\n", - "2025-04-25 11:44:30,132 - INFO - Search depth 1 best leaf: network action(s): close NL2 BE3 2, cost: -139.73 (functional: -139.73, virtual: 0.0)\n", - "2025-04-25 11:44:30,133 - INFO - Search depth 1 best leaf: No range actions activated\n", - "2025-04-25 11:44:30,134 - INFO - Limiting element #01: margin = 139.73 MW, element NNL2AA1 BBE3AA1 1 at state preventive, CNEC ID = \"NNL2AA1 BBE3AA1 1 - preventive\"\n", - "2025-04-25 11:44:30,135 - INFO - Search-tree RAO completed with status DEFAULT\n", - "2025-04-25 11:44:30,135 - INFO - Best leaf: network action(s): close NL2 BE3 2, cost: -139.73 (functional: -139.73, virtual: 0.0)\n", - "2025-04-25 11:44:30,136 - INFO - Best leaf: No range actions activated\n", - "2025-04-25 11:44:30,136 - INFO - Limiting element #01: margin = 139.73 MW, element NNL2AA1 BBE3AA1 1 at state preventive, CNEC ID = \"NNL2AA1 BBE3AA1 1 - preventive\"\n", - "2025-04-25 11:44:30,137 - INFO - Scenario \"preventive\": initial cost = 90.0 (functional: 90.0, virtual: 0.0), 1 network action(s) activated : close NL2 BE3 2, cost after preventive optimization = -139.73 (functional: -139.73, virtual: 0.0)\n", - "2025-04-25 11:44:30,137 - INFO - Connectable NNL2AA1 BBE3AA1 2 has been connected on each side.\n", - "2025-04-25 11:44:30,138 - INFO - ----- Preventive perimeter optimization [end]\n" + "2025-09-16 12:58:20,985 - WARNING - Running RAO using Open RAO version 4.7.0 from git commit 4d70d0db5169461830fbb40cf4d2014f510e43f1.\n", + "2025-09-16 12:58:20,987 - WARNING - Network {CC0 SC0}: 11 generators have been discarded from active power control because of a targetP equals 0\n", + "2025-09-16 12:58:20,987 - INFO - Network {CC0 SC0} has 12 buses and 16 branches\n", + "2025-09-16 12:58:20,988 - INFO - Network {CC0 SC0} balance: active generation=1000.0 MW, active load=1000.0 MW, reactive generation=0.0 MVar, reactive load=0.0 MVar\n", + "2025-09-16 12:58:20,989 - INFO - Network {CC0 SC0}, slack buses are [BBE2AA1_0] (method='Most meshed bus')\n", + "2025-09-16 12:58:20,989 - INFO - Network {CC0 SC0}, reference bus is BBE2AA1_0 (method='First slack')\n", + "2025-09-16 12:58:20,990 - INFO - Running AC sensitivity analysis with 2 factors and 0 contingencies\n", + "2025-09-16 12:58:20,991 - INFO - Start AC loadflow on network {CC0 SC0}\n", + "2025-09-16 12:58:20,992 - INFO - AC loadflow complete on network {CC0 SC0} (result=AcLoadFlowResult(outerLoopIterations=0, newtonRaphsonIterations=2, solverStatus=CONVERGED, outerLoopStatus=STABLE, slackBusActivePowerMismatch=-0.002028186046532099, distributedActivePower=0.0))\n", + "2025-09-16 12:58:20,993 - INFO - Initial sensitivity analysis: cost = 90.0 (functional: 90.0, virtual: 0.0)\n", + "2025-09-16 12:58:20,994 - INFO - Limiting element #01: margin = -90.0 MW, element NNL2AA1 BBE3AA1 1 at state preventive, CNEC ID = \"NNL2AA1 BBE3AA1 1 - preventive\"\n", + "2025-09-16 12:58:20,994 - INFO - ----- Preventive perimeter optimization [start]\n", + "2025-09-16 12:58:20,995 - INFO - Root leaf, cost: 90.0 (functional: 90.0, virtual: 0.0)\n", + "2025-09-16 12:58:20,996 - INFO - Limiting element #01: margin = -90.0 MW, element NNL2AA1 BBE3AA1 1 at state preventive, CNEC ID = \"NNL2AA1 BBE3AA1 1 - preventive\"\n", + "2025-09-16 12:58:20,996 - INFO - Linear optimization on root leaf\n", + "2025-09-16 12:58:20,997 - INFO - No range actions to optimize\n", + "2025-09-16 12:58:20,998 - INFO - Root leaf, cost: 90.0 (functional: 90.0, virtual: 0.0)\n", + "2025-09-16 12:58:20,999 - INFO - No range actions activated\n", + "2025-09-16 12:58:20,999 - INFO - Limiting element #01: margin = -90.0 MW, element NNL2AA1 BBE3AA1 1 at state preventive, CNEC ID = \"NNL2AA1 BBE3AA1 1 - preventive\"\n", + "2025-09-16 12:58:21,000 - INFO - Using base network '12_node_network' on variant 'PreventiveScenario'\n", + "2025-09-16 12:58:21,001 - INFO - Search depth 1 [start]\n", + "2025-09-16 12:58:21,001 - INFO - Leaves to evaluate: 1\n", + "2025-09-16 12:58:21,002 - INFO - Connectable NNL2AA1 BBE3AA1 2 has been connected on each side.\n", + "2025-09-16 12:58:21,003 - WARNING - Network {CC0 SC0}: 11 generators have been discarded from active power control because of a targetP equals 0\n", + "2025-09-16 12:58:21,004 - INFO - Network {CC0 SC0} has 12 buses and 17 branches\n", + "2025-09-16 12:58:21,004 - INFO - Network {CC0 SC0} balance: active generation=1000.0 MW, active load=1000.0 MW, reactive generation=0.0 MVar, reactive load=0.0 MVar\n", + "2025-09-16 12:58:21,005 - INFO - Network {CC0 SC0}, slack buses are [BBE2AA1_1] (method='Most meshed bus')\n", + "2025-09-16 12:58:21,005 - INFO - Network {CC0 SC0}, reference bus is BBE2AA1_1 (method='First slack')\n", + "2025-09-16 12:58:21,006 - INFO - Running AC sensitivity analysis with 2 factors and 0 contingencies\n", + "2025-09-16 12:58:21,007 - INFO - Start AC loadflow on network {CC0 SC0}\n", + "2025-09-16 12:58:21,007 - INFO - AC loadflow complete on network {CC0 SC0} (result=AcLoadFlowResult(outerLoopIterations=0, newtonRaphsonIterations=2, solverStatus=CONVERGED, outerLoopStatus=STABLE, slackBusActivePowerMismatch=-3.2095159969713905E-4, distributedActivePower=0.0))\n", + "2025-09-16 12:58:21,008 - INFO - Evaluated network action(s): close NL2 BE3 2, cost: -139.73 (functional: -139.73, virtual: 0.0)\n", + "2025-09-16 12:58:21,009 - INFO - Optimized network action(s): close NL2 BE3 2, cost: -139.73 (functional: -139.73, virtual: 0.0)\n", + "2025-09-16 12:58:21,009 - INFO - Stop criterion reached, other threads may skip optimization.\n", + "2025-09-16 12:58:21,010 - INFO - Remaining leaves to evaluate: 0\n", + "2025-09-16 12:58:21,010 - INFO - Search depth 1 [end]\n", + "2025-09-16 12:58:21,011 - INFO - Search depth 1 best leaf: network action(s): close NL2 BE3 2, cost: -139.73 (functional: -139.73, virtual: 0.0)\n", + "2025-09-16 12:58:21,011 - INFO - Search depth 1 best leaf: No range actions activated\n", + "2025-09-16 12:58:21,012 - INFO - Limiting element #01: margin = 139.73 MW, element NNL2AA1 BBE3AA1 1 at state preventive, CNEC ID = \"NNL2AA1 BBE3AA1 1 - preventive\"\n", + "2025-09-16 12:58:21,012 - INFO - Search-tree RAO completed with status DEFAULT\n", + "2025-09-16 12:58:21,013 - INFO - Best leaf: network action(s): close NL2 BE3 2, cost: -139.73 (functional: -139.73, virtual: 0.0)\n", + "2025-09-16 12:58:21,013 - INFO - Best leaf: No range actions activated\n", + "2025-09-16 12:58:21,013 - INFO - Limiting element #01: margin = 139.73 MW, element NNL2AA1 BBE3AA1 1 at state preventive, CNEC ID = \"NNL2AA1 BBE3AA1 1 - preventive\"\n", + "2025-09-16 12:58:21,014 - INFO - Scenario \"preventive\": initial cost = 90.0 (functional: 90.0, virtual: 0.0), 1 network action(s) activated : close NL2 BE3 2, cost after preventive optimization = -139.73 (functional: -139.73, virtual: 0.0)\n", + "2025-09-16 12:58:21,014 - INFO - Connectable NNL2AA1 BBE3AA1 2 has been connected on each side.\n", + "2025-09-16 12:58:21,014 - INFO - ----- Preventive perimeter optimization [end]\n" ] } ], - "execution_count": 47 + "execution_count": 7 }, { "cell_type": "markdown", @@ -573,8 +299,8 @@ "cell_type": "code", "metadata": { "ExecuteTime": { - "end_time": "2025-04-25T09:44:30.294100Z", - "start_time": "2025-04-25T09:44:30.288850Z" + "end_time": "2025-09-16T10:58:21.072194Z", + "start_time": "2025-09-16T10:58:21.067245Z" } }, "source": [ @@ -610,12 +336,12 @@ " 'rangeActionResults': []}" ] }, - "execution_count": 48, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], - "execution_count": 48 + "execution_count": 8 }, { "cell_type": "markdown", @@ -667,8 +393,8 @@ "metadata": { "collapsed": false, "ExecuteTime": { - "end_time": "2025-04-25T09:44:30.404900Z", - "start_time": "2025-04-25T09:44:30.347037Z" + "end_time": "2025-09-16T10:58:21.250890Z", + "start_time": "2025-09-16T10:58:21.130700Z" } }, "outputs": [ @@ -676,101 +402,101 @@ "name": "stderr", "output_type": "stream", "text": [ - "2025-04-25 11:44:30,350 - ERROR - BBE1AA1 BBE2AA1 1 - Real line resistance cannot be negative (0.0 ohm)\n", - "2025-04-25 11:44:30,350 - ERROR - BBE1AA1 BBE3AA1 1 - Real line resistance cannot be negative (0.0 ohm)\n", - "2025-04-25 11:44:30,351 - ERROR - FFR1AA1 FFR2AA1 1 - Real line resistance cannot be negative (0.0 ohm)\n", - "2025-04-25 11:44:30,351 - ERROR - FFR1AA1 FFR3AA1 1 - Real line resistance cannot be negative (0.0 ohm)\n", - "2025-04-25 11:44:30,352 - ERROR - FFR2AA1 FFR3AA1 1 - Real line resistance cannot be negative (0.0 ohm)\n", - "2025-04-25 11:44:30,352 - ERROR - DDE1AA1 DDE2AA1 1 - Real line resistance cannot be negative (0.0 ohm)\n", - "2025-04-25 11:44:30,353 - ERROR - DDE1AA1 DDE3AA1 1 - Real line resistance cannot be negative (0.0 ohm)\n", - "2025-04-25 11:44:30,353 - ERROR - DDE2AA1 DDE3AA1 1 - Real line resistance cannot be negative (0.0 ohm)\n", - "2025-04-25 11:44:30,353 - ERROR - NNL1AA1 NNL2AA1 1 - Real line resistance cannot be negative (0.0 ohm)\n", - "2025-04-25 11:44:30,354 - ERROR - NNL1AA1 NNL3AA1 1 - Real line resistance cannot be negative (0.0 ohm)\n", - "2025-04-25 11:44:30,354 - ERROR - NNL2AA1 NNL3AA1 1 - Real line resistance cannot be negative (0.0 ohm)\n", - "2025-04-25 11:44:30,354 - ERROR - FFR2AA1 DDE3AA1 1 - Real line resistance cannot be negative (0.0 ohm)\n", - "2025-04-25 11:44:30,355 - ERROR - DDE2AA1 NNL3AA1 1 - Real line resistance cannot be negative (0.0 ohm)\n", - "2025-04-25 11:44:30,355 - ERROR - NNL2AA1 BBE3AA1 1 - Real line resistance cannot be negative (0.0 ohm)\n", - "2025-04-25 11:44:30,355 - ERROR - NNL2AA1 BBE3AA1 2 - Real line resistance cannot be negative (0.0 ohm)\n", - "2025-04-25 11:44:30,356 - ERROR - NNL2AA1 BBE3AA1 3 - Real line resistance cannot be negative (0.0 ohm)\n", - "2025-04-25 11:44:30,356 - ERROR - BBE2AA1 FFR3AA1 1 - Real line resistance cannot be negative (0.0 ohm)\n", - "2025-04-25 11:44:30,356 - ERROR - BBE2AA1 BBE3AA1 1 - Blank is not allowed, real transformer resistance must be greater than or equal to zero (0.0 ohm)\n", - "2025-04-25 11:44:30,357 - WARNING - BBE2AA1 BBE3AA1 1 - Blank is not allowed (0.0 S)\n", - "2025-04-25 11:44:30,357 - WARNING - BBE2AA1 BBE3AA1 1 - Transformer shunt conductance must be greater than or equal to zero (0.0 S)\n", - "2025-04-25 11:44:30,357 - WARNING - BBE2AA1 BBE3AA1 1 - For LTCs, transformer angle regulation voltage per tap should not be zero. Its absolute value should not be above 6 % (-0.68 %)\n", - "2025-04-25 11:44:30,363 - WARNING - Running RAO using Open RAO version 4.7.0 from git commit 4d70d0db5169461830fbb40cf4d2014f510e43f1.\n", - "2025-04-25 11:44:30,364 - WARNING - Contingency Contingency DE2 DE3 has an automaton or a curative remedial action but no CNECs associated.\n", - "2025-04-25 11:44:30,365 - WARNING - Network {CC0 SC0}: 11 generators have been discarded from active power control because of a targetP equals 0\n", - "2025-04-25 11:44:30,366 - INFO - Network {CC0 SC0} has 12 buses and 16 branches\n", - "2025-04-25 11:44:30,366 - INFO - Network {CC0 SC0} balance: active generation=1000.0 MW, active load=1000.0 MW, reactive generation=0.0 MVar, reactive load=0.0 MVar\n", - "2025-04-25 11:44:30,367 - INFO - Network {CC0 SC0}, slack buses are [BBE2AA1_0] (method='Most meshed bus')\n", - "2025-04-25 11:44:30,367 - INFO - Network {CC0 SC0}, reference bus is BBE2AA1_0 (method='First slack')\n", - "2025-04-25 11:44:30,368 - INFO - Running AC sensitivity analysis with 4 factors and 1 contingencies\n", - "2025-04-25 11:44:30,368 - INFO - Start AC loadflow on network {CC0 SC0}\n", - "2025-04-25 11:44:30,369 - INFO - AC loadflow complete on network {CC0 SC0} (result=AcLoadFlowResult(outerLoopIterations=0, newtonRaphsonIterations=2, solverStatus=CONVERGED, outerLoopStatus=STABLE, slackBusActivePowerMismatch=-0.002028186046532099, distributedActivePower=0.0))\n", - "2025-04-25 11:44:30,369 - INFO - Simulate contingency 'Contingency DE2 DE3'\n", - "2025-04-25 11:44:30,370 - INFO - Start AC loadflow on network {CC0 SC0}\n", - "2025-04-25 11:44:30,370 - INFO - AC loadflow complete on network {CC0 SC0} (result=AcLoadFlowResult(outerLoopIterations=0, newtonRaphsonIterations=1, solverStatus=CONVERGED, outerLoopStatus=STABLE, slackBusActivePowerMismatch=-0.004776402772810329, distributedActivePower=0.0))\n", - "2025-04-25 11:44:30,371 - INFO - Initial sensitivity analysis: cost = 133.3 (functional: 133.3, virtual: 0.0)\n", - "2025-04-25 11:44:30,371 - INFO - Limiting element #01: margin = -133.3 MW, element NNL2AA1 BBE3AA1 1 at state Contingency DE2 DE3 - outage, CNEC ID = \"NNL2AA1 BBE3AA1 1 - Contingency DE2 DE3 - outage\"\n", - "2025-04-25 11:44:30,371 - INFO - Limiting element #02: margin = -90.0 MW, element NNL2AA1 BBE3AA1 1 at state preventive, CNEC ID = \"NNL2AA1 BBE3AA1 1 - preventive\"\n", - "2025-04-25 11:44:30,372 - INFO - ----- Preventive perimeter optimization [start]\n", - "2025-04-25 11:44:30,372 - INFO - Root leaf, cost: 133.3 (functional: 133.3, virtual: 0.0)\n", - "2025-04-25 11:44:30,372 - INFO - Limiting element #01: margin = -133.3 MW, element NNL2AA1 BBE3AA1 1 at state Contingency DE2 DE3 - outage, CNEC ID = \"NNL2AA1 BBE3AA1 1 - Contingency DE2 DE3 - outage\"\n", - "2025-04-25 11:44:30,373 - INFO - Limiting element #02: margin = -90.0 MW, element NNL2AA1 BBE3AA1 1 at state preventive, CNEC ID = \"NNL2AA1 BBE3AA1 1 - preventive\"\n", - "2025-04-25 11:44:30,374 - INFO - Linear optimization on root leaf\n", - "2025-04-25 11:44:30,376 - WARNING - Network {CC0 SC0}: 11 generators have been discarded from active power control because of a targetP equals 0\n", - "2025-04-25 11:44:30,377 - INFO - Network {CC0 SC0} has 12 buses and 16 branches\n", - "2025-04-25 11:44:30,377 - INFO - Network {CC0 SC0} balance: active generation=1000.0 MW, active load=1000.0 MW, reactive generation=0.0 MVar, reactive load=0.0 MVar\n", - "2025-04-25 11:44:30,378 - INFO - Network {CC0 SC0}, slack buses are [BBE2AA1_0] (method='Most meshed bus')\n", - "2025-04-25 11:44:30,378 - INFO - Network {CC0 SC0}, reference bus is BBE2AA1_0 (method='First slack')\n", - "2025-04-25 11:44:30,379 - INFO - Running AC sensitivity analysis with 4 factors and 1 contingencies\n", - "2025-04-25 11:44:30,379 - INFO - Start AC loadflow on network {CC0 SC0}\n", - "2025-04-25 11:44:30,380 - INFO - AC loadflow complete on network {CC0 SC0} (result=AcLoadFlowResult(outerLoopIterations=0, newtonRaphsonIterations=2, solverStatus=CONVERGED, outerLoopStatus=STABLE, slackBusActivePowerMismatch=7.257322425457957E-4, distributedActivePower=0.0))\n", - "2025-04-25 11:44:30,381 - INFO - Simulate contingency 'Contingency DE2 DE3'\n", - "2025-04-25 11:44:30,382 - INFO - Start AC loadflow on network {CC0 SC0}\n", - "2025-04-25 11:44:30,382 - INFO - AC loadflow complete on network {CC0 SC0} (result=AcLoadFlowResult(outerLoopIterations=0, newtonRaphsonIterations=2, solverStatus=CONVERGED, outerLoopStatus=STABLE, slackBusActivePowerMismatch=-4.960476474025199E-10, distributedActivePower=0.0))\n", - "2025-04-25 11:44:30,383 - INFO - Iteration 1: better solution found with a cost of 42.72 (functional: 42.72)\n", - "2025-04-25 11:44:30,385 - INFO - Iteration 2: same results as previous iterations, optimal solution found\n", - "2025-04-25 11:44:30,385 - INFO - Root leaf, 1 range action(s) activated, cost: 42.72 (functional: 42.72, virtual: 0.0)\n", - "2025-04-25 11:44:30,385 - INFO - range action(s): pst-range-action: -10\n", - "2025-04-25 11:44:30,386 - INFO - Limiting element #01: margin = -42.72 MW, element NNL2AA1 BBE3AA1 1 at state Contingency DE2 DE3 - outage, CNEC ID = \"NNL2AA1 BBE3AA1 1 - Contingency DE2 DE3 - outage\"\n", - "2025-04-25 11:44:30,386 - INFO - Limiting element #02: margin = 18.73 MW, element NNL2AA1 BBE3AA1 1 at state preventive, CNEC ID = \"NNL2AA1 BBE3AA1 1 - preventive\"\n", - "2025-04-25 11:44:30,386 - INFO - Using base network '12_node_network' on variant 'PreventiveScenario'\n", - "2025-04-25 11:44:30,387 - INFO - Search depth 1 [start]\n", - "2025-04-25 11:44:30,387 - INFO - Leaves to evaluate: 1\n", - "2025-04-25 11:44:30,388 - INFO - Connectable NNL2AA1 BBE3AA1 2 has been connected on each side.\n", - "2025-04-25 11:44:30,389 - WARNING - Network {CC0 SC0}: 11 generators have been discarded from active power control because of a targetP equals 0\n", - "2025-04-25 11:44:30,389 - INFO - Network {CC0 SC0} has 12 buses and 17 branches\n", - "2025-04-25 11:44:30,390 - INFO - Network {CC0 SC0} balance: active generation=1000.0 MW, active load=1000.0 MW, reactive generation=0.0 MVar, reactive load=0.0 MVar\n", - "2025-04-25 11:44:30,390 - INFO - Network {CC0 SC0}, slack buses are [BBE2AA1_1] (method='Most meshed bus')\n", - "2025-04-25 11:44:30,391 - INFO - Network {CC0 SC0}, reference bus is BBE2AA1_1 (method='First slack')\n", - "2025-04-25 11:44:30,391 - INFO - Running AC sensitivity analysis with 4 factors and 1 contingencies\n", - "2025-04-25 11:44:30,392 - INFO - Start AC loadflow on network {CC0 SC0}\n", - "2025-04-25 11:44:30,392 - INFO - AC loadflow complete on network {CC0 SC0} (result=AcLoadFlowResult(outerLoopIterations=0, newtonRaphsonIterations=2, solverStatus=CONVERGED, outerLoopStatus=STABLE, slackBusActivePowerMismatch=-0.002408294433209335, distributedActivePower=0.0))\n", - "2025-04-25 11:44:30,393 - INFO - Simulate contingency 'Contingency DE2 DE3'\n", - "2025-04-25 11:44:30,394 - INFO - Start AC loadflow on network {CC0 SC0}\n", - "2025-04-25 11:44:30,394 - INFO - AC loadflow complete on network {CC0 SC0} (result=AcLoadFlowResult(outerLoopIterations=0, newtonRaphsonIterations=2, solverStatus=CONVERGED, outerLoopStatus=STABLE, slackBusActivePowerMismatch=4.3076653355456074E-11, distributedActivePower=0.0))\n", - "2025-04-25 11:44:30,394 - INFO - Evaluated network action(s): close NL2 BE3 2, cost: -187.22 (functional: -187.22, virtual: 0.0)\n", - "2025-04-25 11:44:30,395 - INFO - Optimized network action(s): close NL2 BE3 2, cost: -187.22 (functional: -187.22, virtual: 0.0)\n", - "2025-04-25 11:44:30,395 - INFO - Stop criterion reached, other threads may skip optimization.\n", - "2025-04-25 11:44:30,396 - INFO - Remaining leaves to evaluate: 0\n", - "2025-04-25 11:44:30,396 - INFO - Search depth 1 [end]\n", - "2025-04-25 11:44:30,397 - INFO - Search depth 1 best leaf: network action(s): close NL2 BE3 2, cost: -187.22 (functional: -187.22, virtual: 0.0)\n", - "2025-04-25 11:44:30,397 - INFO - Search depth 1 best leaf: range action(s): pst-range-action: -10\n", - "2025-04-25 11:44:30,397 - INFO - Limiting element #01: margin = 187.22 MW, element NNL2AA1 BBE3AA1 1 at state Contingency DE2 DE3 - outage, CNEC ID = \"NNL2AA1 BBE3AA1 1 - Contingency DE2 DE3 - outage\"\n", - "2025-04-25 11:44:30,398 - INFO - Limiting element #02: margin = 198.5 MW, element NNL2AA1 BBE3AA1 1 at state preventive, CNEC ID = \"NNL2AA1 BBE3AA1 1 - preventive\"\n", - "2025-04-25 11:44:30,398 - INFO - Search-tree RAO completed with status DEFAULT\n", - "2025-04-25 11:44:30,398 - INFO - Best leaf: network action(s): close NL2 BE3 2, cost: -187.22 (functional: -187.22, virtual: 0.0)\n", - "2025-04-25 11:44:30,399 - INFO - Best leaf: range action(s): pst-range-action: -10\n", - "2025-04-25 11:44:30,399 - INFO - Limiting element #01: margin = 187.22 MW, element NNL2AA1 BBE3AA1 1 at state Contingency DE2 DE3 - outage, CNEC ID = \"NNL2AA1 BBE3AA1 1 - Contingency DE2 DE3 - outage\"\n", - "2025-04-25 11:44:30,399 - INFO - Limiting element #02: margin = 198.5 MW, element NNL2AA1 BBE3AA1 1 at state preventive, CNEC ID = \"NNL2AA1 BBE3AA1 1 - preventive\"\n", - "2025-04-25 11:44:30,400 - INFO - Scenario \"preventive\": initial cost = 133.3 (functional: 133.3, virtual: 0.0), 1 network action(s) and 1 range action(s) activated : close NL2 BE3 2 and pst-range-action: -10, cost after preventive optimization = -187.22 (functional: -187.22, virtual: 0.0)\n", - "2025-04-25 11:44:30,401 - INFO - Connectable NNL2AA1 BBE3AA1 2 has been connected on each side.\n", - "2025-04-25 11:44:30,402 - INFO - ----- Preventive perimeter optimization [end]\n" + "2025-09-16 12:58:21,136 - ERROR - BBE1AA1 BBE2AA1 1 - Real line resistance cannot be negative (0.0 ohm)\n", + "2025-09-16 12:58:21,137 - ERROR - BBE1AA1 BBE3AA1 1 - Real line resistance cannot be negative (0.0 ohm)\n", + "2025-09-16 12:58:21,138 - ERROR - FFR1AA1 FFR2AA1 1 - Real line resistance cannot be negative (0.0 ohm)\n", + "2025-09-16 12:58:21,139 - ERROR - FFR1AA1 FFR3AA1 1 - Real line resistance cannot be negative (0.0 ohm)\n", + "2025-09-16 12:58:21,139 - ERROR - FFR2AA1 FFR3AA1 1 - Real line resistance cannot be negative (0.0 ohm)\n", + "2025-09-16 12:58:21,140 - ERROR - DDE1AA1 DDE2AA1 1 - Real line resistance cannot be negative (0.0 ohm)\n", + "2025-09-16 12:58:21,141 - ERROR - DDE1AA1 DDE3AA1 1 - Real line resistance cannot be negative (0.0 ohm)\n", + "2025-09-16 12:58:21,141 - ERROR - DDE2AA1 DDE3AA1 1 - Real line resistance cannot be negative (0.0 ohm)\n", + "2025-09-16 12:58:21,142 - ERROR - NNL1AA1 NNL2AA1 1 - Real line resistance cannot be negative (0.0 ohm)\n", + "2025-09-16 12:58:21,142 - ERROR - NNL1AA1 NNL3AA1 1 - Real line resistance cannot be negative (0.0 ohm)\n", + "2025-09-16 12:58:21,143 - ERROR - NNL2AA1 NNL3AA1 1 - Real line resistance cannot be negative (0.0 ohm)\n", + "2025-09-16 12:58:21,143 - ERROR - FFR2AA1 DDE3AA1 1 - Real line resistance cannot be negative (0.0 ohm)\n", + "2025-09-16 12:58:21,144 - ERROR - DDE2AA1 NNL3AA1 1 - Real line resistance cannot be negative (0.0 ohm)\n", + "2025-09-16 12:58:21,144 - ERROR - NNL2AA1 BBE3AA1 1 - Real line resistance cannot be negative (0.0 ohm)\n", + "2025-09-16 12:58:21,144 - ERROR - NNL2AA1 BBE3AA1 2 - Real line resistance cannot be negative (0.0 ohm)\n", + "2025-09-16 12:58:21,145 - ERROR - NNL2AA1 BBE3AA1 3 - Real line resistance cannot be negative (0.0 ohm)\n", + "2025-09-16 12:58:21,145 - ERROR - BBE2AA1 FFR3AA1 1 - Real line resistance cannot be negative (0.0 ohm)\n", + "2025-09-16 12:58:21,145 - ERROR - BBE2AA1 BBE3AA1 1 - Blank is not allowed, real transformer resistance must be greater than or equal to zero (0.0 ohm)\n", + "2025-09-16 12:58:21,146 - WARNING - BBE2AA1 BBE3AA1 1 - Blank is not allowed (0.0 S)\n", + "2025-09-16 12:58:21,146 - WARNING - BBE2AA1 BBE3AA1 1 - Transformer shunt conductance must be greater than or equal to zero (0.0 S)\n", + "2025-09-16 12:58:21,147 - WARNING - BBE2AA1 BBE3AA1 1 - For LTCs, transformer angle regulation voltage per tap should not be zero. Its absolute value should not be above 6 % (-0.68 %)\n", + "2025-09-16 12:58:21,151 - WARNING - Running RAO using Open RAO version 4.7.0 from git commit 4d70d0db5169461830fbb40cf4d2014f510e43f1.\n", + "2025-09-16 12:58:21,151 - WARNING - Contingency Contingency DE2 DE3 has an automaton or a curative remedial action but no CNECs associated.\n", + "2025-09-16 12:58:21,152 - WARNING - Network {CC0 SC0}: 11 generators have been discarded from active power control because of a targetP equals 0\n", + "2025-09-16 12:58:21,153 - INFO - Network {CC0 SC0} has 12 buses and 16 branches\n", + "2025-09-16 12:58:21,153 - INFO - Network {CC0 SC0} balance: active generation=1000.0 MW, active load=1000.0 MW, reactive generation=0.0 MVar, reactive load=0.0 MVar\n", + "2025-09-16 12:58:21,153 - INFO - Network {CC0 SC0}, slack buses are [BBE2AA1_0] (method='Most meshed bus')\n", + "2025-09-16 12:58:21,154 - INFO - Network {CC0 SC0}, reference bus is BBE2AA1_0 (method='First slack')\n", + "2025-09-16 12:58:21,154 - INFO - Running AC sensitivity analysis with 4 factors and 1 contingencies\n", + "2025-09-16 12:58:21,155 - INFO - Start AC loadflow on network {CC0 SC0}\n", + "2025-09-16 12:58:21,156 - INFO - AC loadflow complete on network {CC0 SC0} (result=AcLoadFlowResult(outerLoopIterations=0, newtonRaphsonIterations=2, solverStatus=CONVERGED, outerLoopStatus=STABLE, slackBusActivePowerMismatch=-0.002028186046532099, distributedActivePower=0.0))\n", + "2025-09-16 12:58:21,156 - INFO - Simulate contingency 'Contingency DE2 DE3'\n", + "2025-09-16 12:58:21,157 - INFO - Start AC loadflow on network {CC0 SC0}\n", + "2025-09-16 12:58:21,158 - INFO - AC loadflow complete on network {CC0 SC0} (result=AcLoadFlowResult(outerLoopIterations=0, newtonRaphsonIterations=1, solverStatus=CONVERGED, outerLoopStatus=STABLE, slackBusActivePowerMismatch=-0.004776402772810329, distributedActivePower=0.0))\n", + "2025-09-16 12:58:21,158 - INFO - Initial sensitivity analysis: cost = 133.3 (functional: 133.3, virtual: 0.0)\n", + "2025-09-16 12:58:21,159 - INFO - Limiting element #01: margin = -133.3 MW, element NNL2AA1 BBE3AA1 1 at state Contingency DE2 DE3 - outage, CNEC ID = \"NNL2AA1 BBE3AA1 1 - Contingency DE2 DE3 - outage\"\n", + "2025-09-16 12:58:21,159 - INFO - Limiting element #02: margin = -90.0 MW, element NNL2AA1 BBE3AA1 1 at state preventive, CNEC ID = \"NNL2AA1 BBE3AA1 1 - preventive\"\n", + "2025-09-16 12:58:21,160 - INFO - ----- Preventive perimeter optimization [start]\n", + "2025-09-16 12:58:21,161 - INFO - Root leaf, cost: 133.3 (functional: 133.3, virtual: 0.0)\n", + "2025-09-16 12:58:21,161 - INFO - Limiting element #01: margin = -133.3 MW, element NNL2AA1 BBE3AA1 1 at state Contingency DE2 DE3 - outage, CNEC ID = \"NNL2AA1 BBE3AA1 1 - Contingency DE2 DE3 - outage\"\n", + "2025-09-16 12:58:21,161 - INFO - Limiting element #02: margin = -90.0 MW, element NNL2AA1 BBE3AA1 1 at state preventive, CNEC ID = \"NNL2AA1 BBE3AA1 1 - preventive\"\n", + "2025-09-16 12:58:21,162 - INFO - Linear optimization on root leaf\n", + "2025-09-16 12:58:21,171 - WARNING - Network {CC0 SC0}: 11 generators have been discarded from active power control because of a targetP equals 0\n", + "2025-09-16 12:58:21,171 - INFO - Network {CC0 SC0} has 12 buses and 16 branches\n", + "2025-09-16 12:58:21,172 - INFO - Network {CC0 SC0} balance: active generation=1000.0 MW, active load=1000.0 MW, reactive generation=0.0 MVar, reactive load=0.0 MVar\n", + "2025-09-16 12:58:21,172 - INFO - Network {CC0 SC0}, slack buses are [BBE2AA1_0] (method='Most meshed bus')\n", + "2025-09-16 12:58:21,173 - INFO - Network {CC0 SC0}, reference bus is BBE2AA1_0 (method='First slack')\n", + "2025-09-16 12:58:21,174 - INFO - Running AC sensitivity analysis with 4 factors and 1 contingencies\n", + "2025-09-16 12:58:21,175 - INFO - Start AC loadflow on network {CC0 SC0}\n", + "2025-09-16 12:58:21,177 - INFO - AC loadflow complete on network {CC0 SC0} (result=AcLoadFlowResult(outerLoopIterations=0, newtonRaphsonIterations=2, solverStatus=CONVERGED, outerLoopStatus=STABLE, slackBusActivePowerMismatch=7.257322425457957E-4, distributedActivePower=0.0))\n", + "2025-09-16 12:58:21,178 - INFO - Simulate contingency 'Contingency DE2 DE3'\n", + "2025-09-16 12:58:21,180 - INFO - Start AC loadflow on network {CC0 SC0}\n", + "2025-09-16 12:58:21,182 - INFO - AC loadflow complete on network {CC0 SC0} (result=AcLoadFlowResult(outerLoopIterations=0, newtonRaphsonIterations=2, solverStatus=CONVERGED, outerLoopStatus=STABLE, slackBusActivePowerMismatch=-4.960476474025199E-10, distributedActivePower=0.0))\n", + "2025-09-16 12:58:21,184 - INFO - Iteration 1: better solution found with a cost of 42.72 (functional: 42.72)\n", + "2025-09-16 12:58:21,187 - INFO - Iteration 2: same results as previous iterations, optimal solution found\n", + "2025-09-16 12:58:21,187 - INFO - Root leaf, 1 range action(s) activated, cost: 42.72 (functional: 42.72, virtual: 0.0)\n", + "2025-09-16 12:58:21,188 - INFO - range action(s): pst-range-action: -10\n", + "2025-09-16 12:58:21,188 - INFO - Limiting element #01: margin = -42.72 MW, element NNL2AA1 BBE3AA1 1 at state Contingency DE2 DE3 - outage, CNEC ID = \"NNL2AA1 BBE3AA1 1 - Contingency DE2 DE3 - outage\"\n", + "2025-09-16 12:58:21,189 - INFO - Limiting element #02: margin = 18.73 MW, element NNL2AA1 BBE3AA1 1 at state preventive, CNEC ID = \"NNL2AA1 BBE3AA1 1 - preventive\"\n", + "2025-09-16 12:58:21,190 - INFO - Using base network '12_node_network' on variant 'PreventiveScenario'\n", + "2025-09-16 12:58:21,190 - INFO - Search depth 1 [start]\n", + "2025-09-16 12:58:21,191 - INFO - Leaves to evaluate: 1\n", + "2025-09-16 12:58:21,192 - INFO - Connectable NNL2AA1 BBE3AA1 2 has been connected on each side.\n", + "2025-09-16 12:58:21,193 - WARNING - Network {CC0 SC0}: 11 generators have been discarded from active power control because of a targetP equals 0\n", + "2025-09-16 12:58:21,194 - INFO - Network {CC0 SC0} has 12 buses and 17 branches\n", + "2025-09-16 12:58:21,194 - INFO - Network {CC0 SC0} balance: active generation=1000.0 MW, active load=1000.0 MW, reactive generation=0.0 MVar, reactive load=0.0 MVar\n", + "2025-09-16 12:58:21,195 - INFO - Network {CC0 SC0}, slack buses are [BBE2AA1_1] (method='Most meshed bus')\n", + "2025-09-16 12:58:21,196 - INFO - Network {CC0 SC0}, reference bus is BBE2AA1_1 (method='First slack')\n", + "2025-09-16 12:58:21,196 - INFO - Running AC sensitivity analysis with 4 factors and 1 contingencies\n", + "2025-09-16 12:58:21,240 - INFO - Start AC loadflow on network {CC0 SC0}\n", + "2025-09-16 12:58:21,241 - INFO - AC loadflow complete on network {CC0 SC0} (result=AcLoadFlowResult(outerLoopIterations=0, newtonRaphsonIterations=2, solverStatus=CONVERGED, outerLoopStatus=STABLE, slackBusActivePowerMismatch=-0.002408294433209335, distributedActivePower=0.0))\n", + "2025-09-16 12:58:21,242 - INFO - Simulate contingency 'Contingency DE2 DE3'\n", + "2025-09-16 12:58:21,243 - INFO - Start AC loadflow on network {CC0 SC0}\n", + "2025-09-16 12:58:21,243 - INFO - AC loadflow complete on network {CC0 SC0} (result=AcLoadFlowResult(outerLoopIterations=0, newtonRaphsonIterations=2, solverStatus=CONVERGED, outerLoopStatus=STABLE, slackBusActivePowerMismatch=4.3076653355456074E-11, distributedActivePower=0.0))\n", + "2025-09-16 12:58:21,244 - INFO - Evaluated network action(s): close NL2 BE3 2, cost: -187.22 (functional: -187.22, virtual: 0.0)\n", + "2025-09-16 12:58:21,244 - INFO - Optimized network action(s): close NL2 BE3 2, cost: -187.22 (functional: -187.22, virtual: 0.0)\n", + "2025-09-16 12:58:21,245 - INFO - Stop criterion reached, other threads may skip optimization.\n", + "2025-09-16 12:58:21,245 - INFO - Remaining leaves to evaluate: 0\n", + "2025-09-16 12:58:21,246 - INFO - Search depth 1 [end]\n", + "2025-09-16 12:58:21,246 - INFO - Search depth 1 best leaf: network action(s): close NL2 BE3 2, cost: -187.22 (functional: -187.22, virtual: 0.0)\n", + "2025-09-16 12:58:21,246 - INFO - Search depth 1 best leaf: range action(s): pst-range-action: -10\n", + "2025-09-16 12:58:21,247 - INFO - Limiting element #01: margin = 187.22 MW, element NNL2AA1 BBE3AA1 1 at state Contingency DE2 DE3 - outage, CNEC ID = \"NNL2AA1 BBE3AA1 1 - Contingency DE2 DE3 - outage\"\n", + "2025-09-16 12:58:21,247 - INFO - Limiting element #02: margin = 198.5 MW, element NNL2AA1 BBE3AA1 1 at state preventive, CNEC ID = \"NNL2AA1 BBE3AA1 1 - preventive\"\n", + "2025-09-16 12:58:21,247 - INFO - Search-tree RAO completed with status DEFAULT\n", + "2025-09-16 12:58:21,247 - INFO - Best leaf: network action(s): close NL2 BE3 2, cost: -187.22 (functional: -187.22, virtual: 0.0)\n", + "2025-09-16 12:58:21,248 - INFO - Best leaf: range action(s): pst-range-action: -10\n", + "2025-09-16 12:58:21,248 - INFO - Limiting element #01: margin = 187.22 MW, element NNL2AA1 BBE3AA1 1 at state Contingency DE2 DE3 - outage, CNEC ID = \"NNL2AA1 BBE3AA1 1 - Contingency DE2 DE3 - outage\"\n", + "2025-09-16 12:58:21,248 - INFO - Limiting element #02: margin = 198.5 MW, element NNL2AA1 BBE3AA1 1 at state preventive, CNEC ID = \"NNL2AA1 BBE3AA1 1 - preventive\"\n", + "2025-09-16 12:58:21,248 - INFO - Scenario \"preventive\": initial cost = 133.3 (functional: 133.3, virtual: 0.0), 1 network action(s) and 1 range action(s) activated : close NL2 BE3 2 and pst-range-action: -10, cost after preventive optimization = -187.22 (functional: -187.22, virtual: 0.0)\n", + "2025-09-16 12:58:21,249 - INFO - Connectable NNL2AA1 BBE3AA1 2 has been connected on each side.\n", + "2025-09-16 12:58:21,249 - INFO - ----- Preventive perimeter optimization [end]\n" ] } ], - "execution_count": 49 + "execution_count": 9 }, { "cell_type": "code", @@ -780,8 +506,8 @@ "metadata": { "collapsed": false, "ExecuteTime": { - "end_time": "2025-04-25T09:44:30.509006Z", - "start_time": "2025-04-25T09:44:30.504404Z" + "end_time": "2025-09-16T10:58:21.313349Z", + "start_time": "2025-09-16T10:58:21.303940Z" } }, "outputs": [ @@ -822,12 +548,12 @@ " 'setpoint': -3.894612745121778}]}]}" ] }, - "execution_count": 50, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], - "execution_count": 50 + "execution_count": 10 }, { "cell_type": "markdown", @@ -877,8 +603,8 @@ "metadata": { "collapsed": false, "ExecuteTime": { - "end_time": "2025-04-25T09:44:30.681403Z", - "start_time": "2025-04-25T09:44:30.560575Z" + "end_time": "2025-09-16T10:58:21.524022Z", + "start_time": "2025-09-16T10:58:21.363828Z" } }, "outputs": [ @@ -886,150 +612,150 @@ "name": "stderr", "output_type": "stream", "text": [ - "2025-04-25 11:44:30,563 - ERROR - BBE1AA1 BBE2AA1 1 - Real line resistance cannot be negative (0.0 ohm)\n", - "2025-04-25 11:44:30,563 - ERROR - BBE1AA1 BBE3AA1 1 - Real line resistance cannot be negative (0.0 ohm)\n", - "2025-04-25 11:44:30,564 - ERROR - FFR1AA1 FFR2AA1 1 - Real line resistance cannot be negative (0.0 ohm)\n", - "2025-04-25 11:44:30,564 - ERROR - FFR1AA1 FFR3AA1 1 - Real line resistance cannot be negative (0.0 ohm)\n", - "2025-04-25 11:44:30,565 - ERROR - FFR2AA1 FFR3AA1 1 - Real line resistance cannot be negative (0.0 ohm)\n", - "2025-04-25 11:44:30,565 - ERROR - DDE1AA1 DDE2AA1 1 - Real line resistance cannot be negative (0.0 ohm)\n", - "2025-04-25 11:44:30,567 - ERROR - DDE1AA1 DDE3AA1 1 - Real line resistance cannot be negative (0.0 ohm)\n", - "2025-04-25 11:44:30,567 - ERROR - DDE2AA1 DDE3AA1 1 - Real line resistance cannot be negative (0.0 ohm)\n", - "2025-04-25 11:44:30,568 - ERROR - NNL1AA1 NNL2AA1 1 - Real line resistance cannot be negative (0.0 ohm)\n", - "2025-04-25 11:44:30,568 - ERROR - NNL1AA1 NNL3AA1 1 - Real line resistance cannot be negative (0.0 ohm)\n", - "2025-04-25 11:44:30,568 - ERROR - NNL2AA1 NNL3AA1 1 - Real line resistance cannot be negative (0.0 ohm)\n", - "2025-04-25 11:44:30,568 - ERROR - FFR2AA1 DDE3AA1 1 - Real line resistance cannot be negative (0.0 ohm)\n", - "2025-04-25 11:44:30,569 - ERROR - DDE2AA1 NNL3AA1 1 - Real line resistance cannot be negative (0.0 ohm)\n", - "2025-04-25 11:44:30,569 - ERROR - NNL2AA1 BBE3AA1 1 - Real line resistance cannot be negative (0.0 ohm)\n", - "2025-04-25 11:44:30,569 - ERROR - NNL2AA1 BBE3AA1 2 - Real line resistance cannot be negative (0.0 ohm)\n", - "2025-04-25 11:44:30,570 - ERROR - NNL2AA1 BBE3AA1 3 - Real line resistance cannot be negative (0.0 ohm)\n", - "2025-04-25 11:44:30,570 - ERROR - BBE2AA1 FFR3AA1 1 - Real line resistance cannot be negative (0.0 ohm)\n", - "2025-04-25 11:44:30,570 - ERROR - BBE2AA1 BBE3AA1 1 - Blank is not allowed, real transformer resistance must be greater than or equal to zero (0.0 ohm)\n", - "2025-04-25 11:44:30,571 - WARNING - BBE2AA1 BBE3AA1 1 - Blank is not allowed (0.0 S)\n", - "2025-04-25 11:44:30,571 - WARNING - BBE2AA1 BBE3AA1 1 - Transformer shunt conductance must be greater than or equal to zero (0.0 S)\n", - "2025-04-25 11:44:30,572 - WARNING - BBE2AA1 BBE3AA1 1 - For LTCs, transformer angle regulation voltage per tap should not be zero. Its absolute value should not be above 6 % (-0.68 %)\n", - "2025-04-25 11:44:30,576 - WARNING - Running RAO using Open RAO version 4.7.0 from git commit 4d70d0db5169461830fbb40cf4d2014f510e43f1.\n", - "2025-04-25 11:44:30,578 - WARNING - Network {CC0 SC0}: 11 generators have been discarded from active power control because of a targetP equals 0\n", - "2025-04-25 11:44:30,578 - INFO - Network {CC0 SC0} has 12 buses and 16 branches\n", - "2025-04-25 11:44:30,579 - INFO - Network {CC0 SC0} balance: active generation=1000.0 MW, active load=1000.0 MW, reactive generation=0.0 MVar, reactive load=0.0 MVar\n", - "2025-04-25 11:44:30,579 - INFO - Network {CC0 SC0}, slack buses are [BBE2AA1_0] (method='Most meshed bus')\n", - "2025-04-25 11:44:30,580 - INFO - Network {CC0 SC0}, reference bus is BBE2AA1_0 (method='First slack')\n", - "2025-04-25 11:44:30,580 - INFO - Running AC sensitivity analysis with 6 factors and 1 contingencies\n", - "2025-04-25 11:44:30,581 - INFO - Start AC loadflow on network {CC0 SC0}\n", - "2025-04-25 11:44:30,582 - INFO - AC loadflow complete on network {CC0 SC0} (result=AcLoadFlowResult(outerLoopIterations=0, newtonRaphsonIterations=2, solverStatus=CONVERGED, outerLoopStatus=STABLE, slackBusActivePowerMismatch=-0.002028186046532099, distributedActivePower=0.0))\n", - "2025-04-25 11:44:30,583 - INFO - Simulate contingency 'Contingency DE2 DE3'\n", - "2025-04-25 11:44:30,584 - INFO - Start AC loadflow on network {CC0 SC0}\n", - "2025-04-25 11:44:30,585 - INFO - AC loadflow complete on network {CC0 SC0} (result=AcLoadFlowResult(outerLoopIterations=0, newtonRaphsonIterations=1, solverStatus=CONVERGED, outerLoopStatus=STABLE, slackBusActivePowerMismatch=-0.004776402772810329, distributedActivePower=0.0))\n", - "2025-04-25 11:44:30,585 - INFO - Initial sensitivity analysis: cost = 133.3 (functional: 133.3, virtual: 0.0)\n", - "2025-04-25 11:44:30,586 - INFO - Limiting element #01: margin = -133.3 MW, element NNL2AA1 BBE3AA1 1 at state Contingency DE2 DE3 - outage, CNEC ID = \"NNL2AA1 BBE3AA1 1 - Contingency DE2 DE3 - outage\"\n", - "2025-04-25 11:44:30,586 - INFO - Limiting element #02: margin = -90.0 MW, element NNL2AA1 BBE3AA1 1 at state preventive, CNEC ID = \"NNL2AA1 BBE3AA1 1 - preventive\"\n", - "2025-04-25 11:44:30,587 - INFO - ----- Preventive perimeter optimization [start]\n", - "2025-04-25 11:44:30,587 - INFO - Root leaf, cost: 133.3 (functional: 133.3, virtual: 0.0)\n", - "2025-04-25 11:44:30,588 - INFO - Limiting element #01: margin = -133.3 MW, element NNL2AA1 BBE3AA1 1 at state Contingency DE2 DE3 - outage, CNEC ID = \"NNL2AA1 BBE3AA1 1 - Contingency DE2 DE3 - outage\"\n", - "2025-04-25 11:44:30,588 - INFO - Limiting element #02: margin = -90.0 MW, element NNL2AA1 BBE3AA1 1 at state preventive, CNEC ID = \"NNL2AA1 BBE3AA1 1 - preventive\"\n", - "2025-04-25 11:44:30,588 - INFO - Linear optimization on root leaf\n", - "2025-04-25 11:44:30,590 - WARNING - Network {CC0 SC0}: 11 generators have been discarded from active power control because of a targetP equals 0\n", - "2025-04-25 11:44:30,591 - INFO - Network {CC0 SC0} has 12 buses and 16 branches\n", - "2025-04-25 11:44:30,591 - INFO - Network {CC0 SC0} balance: active generation=1000.0 MW, active load=1000.0 MW, reactive generation=0.0 MVar, reactive load=0.0 MVar\n", - "2025-04-25 11:44:30,592 - INFO - Network {CC0 SC0}, slack buses are [BBE2AA1_0] (method='Most meshed bus')\n", - "2025-04-25 11:44:30,593 - INFO - Network {CC0 SC0}, reference bus is BBE2AA1_0 (method='First slack')\n", - "2025-04-25 11:44:30,594 - INFO - Running AC sensitivity analysis with 4 factors and 1 contingencies\n", - "2025-04-25 11:44:30,594 - INFO - Start AC loadflow on network {CC0 SC0}\n", - "2025-04-25 11:44:30,595 - INFO - AC loadflow complete on network {CC0 SC0} (result=AcLoadFlowResult(outerLoopIterations=0, newtonRaphsonIterations=2, solverStatus=CONVERGED, outerLoopStatus=STABLE, slackBusActivePowerMismatch=7.257322425457957E-4, distributedActivePower=0.0))\n", - "2025-04-25 11:44:30,596 - INFO - Simulate contingency 'Contingency DE2 DE3'\n", - "2025-04-25 11:44:30,597 - INFO - Start AC loadflow on network {CC0 SC0}\n", - "2025-04-25 11:44:30,597 - INFO - AC loadflow complete on network {CC0 SC0} (result=AcLoadFlowResult(outerLoopIterations=0, newtonRaphsonIterations=2, solverStatus=CONVERGED, outerLoopStatus=STABLE, slackBusActivePowerMismatch=-4.960476474025199E-10, distributedActivePower=0.0))\n", - "2025-04-25 11:44:30,598 - INFO - Iteration 1: better solution found with a cost of 42.72 (functional: 42.72)\n", - "2025-04-25 11:44:30,599 - INFO - Iteration 2: same results as previous iterations, optimal solution found\n", - "2025-04-25 11:44:30,600 - INFO - Root leaf, 1 range action(s) activated, cost: 42.72 (functional: 42.72, virtual: 0.0)\n", - "2025-04-25 11:44:30,600 - INFO - range action(s): pst-range-action: -10\n", - "2025-04-25 11:44:30,601 - INFO - Limiting element #01: margin = -42.72 MW, element NNL2AA1 BBE3AA1 1 at state Contingency DE2 DE3 - outage, CNEC ID = \"NNL2AA1 BBE3AA1 1 - Contingency DE2 DE3 - outage\"\n", - "2025-04-25 11:44:30,601 - INFO - Limiting element #02: margin = 18.73 MW, element NNL2AA1 BBE3AA1 1 at state preventive, CNEC ID = \"NNL2AA1 BBE3AA1 1 - preventive\"\n", - "2025-04-25 11:44:30,602 - INFO - Using base network '12_node_network' on variant 'PreventiveScenario'\n", - "2025-04-25 11:44:30,603 - INFO - Search depth 1 [start]\n", - "2025-04-25 11:44:30,603 - INFO - Leaves to evaluate: 1\n", - "2025-04-25 11:44:30,605 - INFO - Connectable NNL2AA1 BBE3AA1 2 has been connected on each side.\n", - "2025-04-25 11:44:30,606 - WARNING - Network {CC0 SC0}: 11 generators have been discarded from active power control because of a targetP equals 0\n", - "2025-04-25 11:44:30,606 - INFO - Network {CC0 SC0} has 12 buses and 17 branches\n", - "2025-04-25 11:44:30,607 - INFO - Network {CC0 SC0} balance: active generation=1000.0 MW, active load=1000.0 MW, reactive generation=0.0 MVar, reactive load=0.0 MVar\n", - "2025-04-25 11:44:30,608 - INFO - Network {CC0 SC0}, slack buses are [BBE2AA1_1] (method='Most meshed bus')\n", - "2025-04-25 11:44:30,608 - INFO - Network {CC0 SC0}, reference bus is BBE2AA1_1 (method='First slack')\n", - "2025-04-25 11:44:30,609 - INFO - Running AC sensitivity analysis with 4 factors and 1 contingencies\n", - "2025-04-25 11:44:30,610 - INFO - Start AC loadflow on network {CC0 SC0}\n", - "2025-04-25 11:44:30,611 - INFO - AC loadflow complete on network {CC0 SC0} (result=AcLoadFlowResult(outerLoopIterations=0, newtonRaphsonIterations=2, solverStatus=CONVERGED, outerLoopStatus=STABLE, slackBusActivePowerMismatch=-0.002408294433209335, distributedActivePower=0.0))\n", - "2025-04-25 11:44:30,612 - INFO - Simulate contingency 'Contingency DE2 DE3'\n", - "2025-04-25 11:44:30,612 - INFO - Start AC loadflow on network {CC0 SC0}\n", - "2025-04-25 11:44:30,613 - INFO - AC loadflow complete on network {CC0 SC0} (result=AcLoadFlowResult(outerLoopIterations=0, newtonRaphsonIterations=2, solverStatus=CONVERGED, outerLoopStatus=STABLE, slackBusActivePowerMismatch=4.3076653355456074E-11, distributedActivePower=0.0))\n", - "2025-04-25 11:44:30,613 - INFO - Evaluated network action(s): close NL2 BE3 2, cost: -187.22 (functional: -187.22, virtual: 0.0)\n", - "2025-04-25 11:44:30,614 - INFO - Optimized network action(s): close NL2 BE3 2, cost: -187.22 (functional: -187.22, virtual: 0.0)\n", - "2025-04-25 11:44:30,614 - INFO - Stop criterion reached, other threads may skip optimization.\n", - "2025-04-25 11:44:30,615 - INFO - Remaining leaves to evaluate: 0\n", - "2025-04-25 11:44:30,615 - INFO - Search depth 1 [end]\n", - "2025-04-25 11:44:30,616 - INFO - Search depth 1 best leaf: network action(s): close NL2 BE3 2, cost: -187.22 (functional: -187.22, virtual: 0.0)\n", - "2025-04-25 11:44:30,616 - INFO - Search depth 1 best leaf: range action(s): pst-range-action: -10\n", - "2025-04-25 11:44:30,617 - INFO - Limiting element #01: margin = 187.22 MW, element NNL2AA1 BBE3AA1 1 at state Contingency DE2 DE3 - outage, CNEC ID = \"NNL2AA1 BBE3AA1 1 - Contingency DE2 DE3 - outage\"\n", - "2025-04-25 11:44:30,617 - INFO - Limiting element #02: margin = 198.5 MW, element NNL2AA1 BBE3AA1 1 at state preventive, CNEC ID = \"NNL2AA1 BBE3AA1 1 - preventive\"\n", - "2025-04-25 11:44:30,617 - INFO - Search-tree RAO completed with status DEFAULT\n", - "2025-04-25 11:44:30,618 - INFO - Best leaf: network action(s): close NL2 BE3 2, cost: -187.22 (functional: -187.22, virtual: 0.0)\n", - "2025-04-25 11:44:30,618 - INFO - Best leaf: range action(s): pst-range-action: -10\n", - "2025-04-25 11:44:30,618 - INFO - Limiting element #01: margin = 187.22 MW, element NNL2AA1 BBE3AA1 1 at state Contingency DE2 DE3 - outage, CNEC ID = \"NNL2AA1 BBE3AA1 1 - Contingency DE2 DE3 - outage\"\n", - "2025-04-25 11:44:30,619 - INFO - Limiting element #02: margin = 198.5 MW, element NNL2AA1 BBE3AA1 1 at state preventive, CNEC ID = \"NNL2AA1 BBE3AA1 1 - preventive\"\n", - "2025-04-25 11:44:30,620 - INFO - Scenario \"preventive\": initial cost = 133.3 (functional: 133.3, virtual: 0.0), 1 network action(s) and 1 range action(s) activated : close NL2 BE3 2 and pst-range-action: -10, cost after preventive optimization = -187.22 (functional: -187.22, virtual: 0.0)\n", - "2025-04-25 11:44:30,620 - INFO - Connectable NNL2AA1 BBE3AA1 2 has been connected on each side.\n", - "2025-04-25 11:44:30,621 - INFO - ----- Preventive perimeter optimization [end]\n", - "2025-04-25 11:44:30,621 - INFO - Connectable NNL2AA1 BBE3AA1 2 has been connected on each side.\n", - "2025-04-25 11:44:30,623 - WARNING - Network {CC0 SC0}: 11 generators have been discarded from active power control because of a targetP equals 0\n", - "2025-04-25 11:44:30,624 - INFO - Network {CC0 SC0} has 12 buses and 17 branches\n", - "2025-04-25 11:44:30,624 - INFO - Network {CC0 SC0} balance: active generation=1000.0 MW, active load=1000.0 MW, reactive generation=0.0 MVar, reactive load=0.0 MVar\n", - "2025-04-25 11:44:30,625 - INFO - Network {CC0 SC0}, slack buses are [BBE2AA1_1] (method='Most meshed bus')\n", - "2025-04-25 11:44:30,625 - INFO - Network {CC0 SC0}, reference bus is BBE2AA1_1 (method='First slack')\n", - "2025-04-25 11:44:30,626 - INFO - Running AC sensitivity analysis with 6 factors and 1 contingencies\n", - "2025-04-25 11:44:30,627 - INFO - Start AC loadflow on network {CC0 SC0}\n", - "2025-04-25 11:44:30,628 - INFO - AC loadflow complete on network {CC0 SC0} (result=AcLoadFlowResult(outerLoopIterations=0, newtonRaphsonIterations=2, solverStatus=CONVERGED, outerLoopStatus=STABLE, slackBusActivePowerMismatch=-0.002408294433209335, distributedActivePower=0.0))\n", - "2025-04-25 11:44:30,629 - INFO - Simulate contingency 'Contingency DE2 DE3'\n", - "2025-04-25 11:44:30,629 - INFO - Start AC loadflow on network {CC0 SC0}\n", - "2025-04-25 11:44:30,630 - INFO - AC loadflow complete on network {CC0 SC0} (result=AcLoadFlowResult(outerLoopIterations=0, newtonRaphsonIterations=2, solverStatus=CONVERGED, outerLoopStatus=STABLE, slackBusActivePowerMismatch=4.3076653355456074E-11, distributedActivePower=0.0))\n", - "2025-04-25 11:44:30,631 - INFO - Systematic sensitivity analysis after preventive remedial actions: cost = 237.65 (functional: 237.65, virtual: 0.0)\n", - "2025-04-25 11:44:30,631 - INFO - Limiting element #01: margin = -237.65 MW, element BBE1AA1 BBE2AA1 1 at state Contingency DE2 DE3 - curative, CNEC ID = \"BBE1AA1 BBE2AA1 1 - Contingency DE2 DE3 - curative\"\n", - "2025-04-25 11:44:30,632 - INFO - Limiting element #02: margin = 187.22 MW, element NNL2AA1 BBE3AA1 1 at state Contingency DE2 DE3 - outage, CNEC ID = \"NNL2AA1 BBE3AA1 1 - Contingency DE2 DE3 - outage\"\n", - "2025-04-25 11:44:30,632 - INFO - ----- Post-contingency perimeters optimization [start]\n", - "2025-04-25 11:44:30,649 - INFO - Optimizing scenario post-contingency Contingency DE2 DE3.\n", - "2025-04-25 11:44:30,650 - INFO - Optimizing curative state Contingency DE2 DE3 - curative.\n", - "2025-04-25 11:44:30,651 - INFO - Root leaf, cost: 237.65 (functional: 237.65, virtual: 0.0)\n", - "2025-04-25 11:44:30,652 - INFO - Limiting element #01: margin = -237.65 MW, element BBE1AA1 BBE2AA1 1 at state Contingency DE2 DE3 - curative, CNEC ID = \"BBE1AA1 BBE2AA1 1 - Contingency DE2 DE3 - curative\"\n", - "2025-04-25 11:44:30,653 - INFO - Linear optimization on root leaf\n", - "2025-04-25 11:44:30,655 - WARNING - Network {CC0 SC0}: 11 generators have been discarded from active power control because of a targetP equals 0\n", - "2025-04-25 11:44:30,656 - INFO - Network {CC0 SC0} has 12 buses and 17 branches\n", - "2025-04-25 11:44:30,656 - INFO - Network {CC0 SC0} balance: active generation=1000.0 MW, active load=1000.0 MW, reactive generation=0.0 MVar, reactive load=0.0 MVar\n", - "2025-04-25 11:44:30,657 - INFO - Network {CC0 SC0}, slack buses are [BBE2AA1_1] (method='Most meshed bus')\n", - "2025-04-25 11:44:30,658 - INFO - Network {CC0 SC0}, reference bus is BBE2AA1_1 (method='First slack')\n", - "2025-04-25 11:44:30,658 - INFO - Running AC sensitivity analysis with 2 factors and 1 contingencies\n", - "2025-04-25 11:44:30,659 - INFO - Start AC loadflow on network {CC0 SC0}\n", - "2025-04-25 11:44:30,660 - INFO - AC loadflow complete on network {CC0 SC0} (result=AcLoadFlowResult(outerLoopIterations=0, newtonRaphsonIterations=2, solverStatus=CONVERGED, outerLoopStatus=STABLE, slackBusActivePowerMismatch=0.001380331569489357, distributedActivePower=0.0))\n", - "2025-04-25 11:44:30,661 - INFO - Simulate contingency 'Contingency DE2 DE3'\n", - "2025-04-25 11:44:30,662 - INFO - Start AC loadflow on network {CC0 SC0}\n", - "2025-04-25 11:44:30,663 - INFO - AC loadflow complete on network {CC0 SC0} (result=AcLoadFlowResult(outerLoopIterations=0, newtonRaphsonIterations=1, solverStatus=CONVERGED, outerLoopStatus=STABLE, slackBusActivePowerMismatch=-0.0011719159598300166, distributedActivePower=0.0))\n", - "2025-04-25 11:44:30,664 - INFO - Iteration 1: better solution found with a cost of -290.77 (functional: -290.77)\n", - "2025-04-25 11:44:30,666 - INFO - Iteration 2: same results as previous iterations, optimal solution found\n", - "2025-04-25 11:44:30,667 - INFO - Root leaf, 1 range action(s) activated, cost: -290.77 (functional: -290.77, virtual: 0.0)\n", - "2025-04-25 11:44:30,668 - INFO - range action(s): pst-range-action: 6\n", - "2025-04-25 11:44:30,668 - INFO - Limiting element #01: margin = 290.77 MW, element BBE1AA1 BBE2AA1 1 at state Contingency DE2 DE3 - curative, CNEC ID = \"BBE1AA1 BBE2AA1 1 - Contingency DE2 DE3 - curative\"\n", - "2025-04-25 11:44:30,669 - INFO - No network action available\n", - "2025-04-25 11:44:30,670 - INFO - Search-tree RAO completed with status DEFAULT\n", - "2025-04-25 11:44:30,671 - INFO - Best leaf: Root leaf, 1 range action(s) activated, cost: -290.77 (functional: -290.77, virtual: 0.0)\n", - "2025-04-25 11:44:30,672 - INFO - Best leaf: range action(s): pst-range-action: 6\n", - "2025-04-25 11:44:30,673 - INFO - Limiting element #01: margin = 290.77 MW, element BBE1AA1 BBE2AA1 1 at state Contingency DE2 DE3 - curative, CNEC ID = \"BBE1AA1 BBE2AA1 1 - Contingency DE2 DE3 - curative\"\n", - "2025-04-25 11:44:30,674 - INFO - Scenario \"Contingency DE2 DE3\": initial cost = 237.65 (functional: 237.65, virtual: 0.0), 1 range action(s) activated : pst-range-action: 6, cost after curative optimization = -290.77 (functional: -290.77, virtual: 0.0)\n", - "2025-04-25 11:44:30,674 - INFO - Curative state Contingency DE2 DE3 - curative has been optimized.\n", - "2025-04-25 11:44:30,675 - INFO - ----- Post-contingency perimeters optimization [end]\n", - "2025-04-25 11:44:30,676 - INFO - Merging preventive and post-contingency RAO results:\n", - "2025-04-25 11:44:30,676 - INFO - Limiting element #01: margin = 187.22 MW, element NNL2AA1 BBE3AA1 1 at state Contingency DE2 DE3 - outage, CNEC ID = \"NNL2AA1 BBE3AA1 1 - Contingency DE2 DE3 - outage\"\n", - "2025-04-25 11:44:30,677 - INFO - Limiting element #02: margin = 198.5 MW, element NNL2AA1 BBE3AA1 1 at state preventive, CNEC ID = \"NNL2AA1 BBE3AA1 1 - preventive\"\n", - "2025-04-25 11:44:30,677 - INFO - Limiting element #03: margin = 290.77 MW, element BBE1AA1 BBE2AA1 1 at state Contingency DE2 DE3 - curative, CNEC ID = \"BBE1AA1 BBE2AA1 1 - Contingency DE2 DE3 - curative\"\n", - "2025-04-25 11:44:30,678 - INFO - Cost before RAO = 133.3 (functional: 133.3, virtual: 0.0), cost after RAO = -187.22 (functional: -187.22, virtual: 0.0)\n" + "2025-09-16 12:58:21,370 - ERROR - BBE1AA1 BBE2AA1 1 - Real line resistance cannot be negative (0.0 ohm)\n", + "2025-09-16 12:58:21,372 - ERROR - BBE1AA1 BBE3AA1 1 - Real line resistance cannot be negative (0.0 ohm)\n", + "2025-09-16 12:58:21,374 - ERROR - FFR1AA1 FFR2AA1 1 - Real line resistance cannot be negative (0.0 ohm)\n", + "2025-09-16 12:58:21,375 - ERROR - FFR1AA1 FFR3AA1 1 - Real line resistance cannot be negative (0.0 ohm)\n", + "2025-09-16 12:58:21,376 - ERROR - FFR2AA1 FFR3AA1 1 - Real line resistance cannot be negative (0.0 ohm)\n", + "2025-09-16 12:58:21,378 - ERROR - DDE1AA1 DDE2AA1 1 - Real line resistance cannot be negative (0.0 ohm)\n", + "2025-09-16 12:58:21,379 - ERROR - DDE1AA1 DDE3AA1 1 - Real line resistance cannot be negative (0.0 ohm)\n", + "2025-09-16 12:58:21,380 - ERROR - DDE2AA1 DDE3AA1 1 - Real line resistance cannot be negative (0.0 ohm)\n", + "2025-09-16 12:58:21,381 - ERROR - NNL1AA1 NNL2AA1 1 - Real line resistance cannot be negative (0.0 ohm)\n", + "2025-09-16 12:58:21,382 - ERROR - NNL1AA1 NNL3AA1 1 - Real line resistance cannot be negative (0.0 ohm)\n", + "2025-09-16 12:58:21,384 - ERROR - NNL2AA1 NNL3AA1 1 - Real line resistance cannot be negative (0.0 ohm)\n", + "2025-09-16 12:58:21,385 - ERROR - FFR2AA1 DDE3AA1 1 - Real line resistance cannot be negative (0.0 ohm)\n", + "2025-09-16 12:58:21,386 - ERROR - DDE2AA1 NNL3AA1 1 - Real line resistance cannot be negative (0.0 ohm)\n", + "2025-09-16 12:58:21,387 - ERROR - NNL2AA1 BBE3AA1 1 - Real line resistance cannot be negative (0.0 ohm)\n", + "2025-09-16 12:58:21,388 - ERROR - NNL2AA1 BBE3AA1 2 - Real line resistance cannot be negative (0.0 ohm)\n", + "2025-09-16 12:58:21,390 - ERROR - NNL2AA1 BBE3AA1 3 - Real line resistance cannot be negative (0.0 ohm)\n", + "2025-09-16 12:58:21,390 - ERROR - BBE2AA1 FFR3AA1 1 - Real line resistance cannot be negative (0.0 ohm)\n", + "2025-09-16 12:58:21,391 - ERROR - BBE2AA1 BBE3AA1 1 - Blank is not allowed, real transformer resistance must be greater than or equal to zero (0.0 ohm)\n", + "2025-09-16 12:58:21,392 - WARNING - BBE2AA1 BBE3AA1 1 - Blank is not allowed (0.0 S)\n", + "2025-09-16 12:58:21,393 - WARNING - BBE2AA1 BBE3AA1 1 - Transformer shunt conductance must be greater than or equal to zero (0.0 S)\n", + "2025-09-16 12:58:21,393 - WARNING - BBE2AA1 BBE3AA1 1 - For LTCs, transformer angle regulation voltage per tap should not be zero. Its absolute value should not be above 6 % (-0.68 %)\n", + "2025-09-16 12:58:21,398 - WARNING - Running RAO using Open RAO version 4.7.0 from git commit 4d70d0db5169461830fbb40cf4d2014f510e43f1.\n", + "2025-09-16 12:58:21,399 - WARNING - Network {CC0 SC0}: 11 generators have been discarded from active power control because of a targetP equals 0\n", + "2025-09-16 12:58:21,400 - INFO - Network {CC0 SC0} has 12 buses and 16 branches\n", + "2025-09-16 12:58:21,401 - INFO - Network {CC0 SC0} balance: active generation=1000.0 MW, active load=1000.0 MW, reactive generation=0.0 MVar, reactive load=0.0 MVar\n", + "2025-09-16 12:58:21,401 - INFO - Network {CC0 SC0}, slack buses are [BBE2AA1_0] (method='Most meshed bus')\n", + "2025-09-16 12:58:21,402 - INFO - Network {CC0 SC0}, reference bus is BBE2AA1_0 (method='First slack')\n", + "2025-09-16 12:58:21,403 - INFO - Running AC sensitivity analysis with 6 factors and 1 contingencies\n", + "2025-09-16 12:58:21,404 - INFO - Start AC loadflow on network {CC0 SC0}\n", + "2025-09-16 12:58:21,405 - INFO - AC loadflow complete on network {CC0 SC0} (result=AcLoadFlowResult(outerLoopIterations=0, newtonRaphsonIterations=2, solverStatus=CONVERGED, outerLoopStatus=STABLE, slackBusActivePowerMismatch=-0.002028186046532099, distributedActivePower=0.0))\n", + "2025-09-16 12:58:21,407 - INFO - Simulate contingency 'Contingency DE2 DE3'\n", + "2025-09-16 12:58:21,407 - INFO - Start AC loadflow on network {CC0 SC0}\n", + "2025-09-16 12:58:21,408 - INFO - AC loadflow complete on network {CC0 SC0} (result=AcLoadFlowResult(outerLoopIterations=0, newtonRaphsonIterations=1, solverStatus=CONVERGED, outerLoopStatus=STABLE, slackBusActivePowerMismatch=-0.004776402772810329, distributedActivePower=0.0))\n", + "2025-09-16 12:58:21,410 - INFO - Initial sensitivity analysis: cost = 133.3 (functional: 133.3, virtual: 0.0)\n", + "2025-09-16 12:58:21,411 - INFO - Limiting element #01: margin = -133.3 MW, element NNL2AA1 BBE3AA1 1 at state Contingency DE2 DE3 - outage, CNEC ID = \"NNL2AA1 BBE3AA1 1 - Contingency DE2 DE3 - outage\"\n", + "2025-09-16 12:58:21,412 - INFO - Limiting element #02: margin = -90.0 MW, element NNL2AA1 BBE3AA1 1 at state preventive, CNEC ID = \"NNL2AA1 BBE3AA1 1 - preventive\"\n", + "2025-09-16 12:58:21,413 - INFO - ----- Preventive perimeter optimization [start]\n", + "2025-09-16 12:58:21,414 - INFO - Root leaf, cost: 133.3 (functional: 133.3, virtual: 0.0)\n", + "2025-09-16 12:58:21,415 - INFO - Limiting element #01: margin = -133.3 MW, element NNL2AA1 BBE3AA1 1 at state Contingency DE2 DE3 - outage, CNEC ID = \"NNL2AA1 BBE3AA1 1 - Contingency DE2 DE3 - outage\"\n", + "2025-09-16 12:58:21,417 - INFO - Limiting element #02: margin = -90.0 MW, element NNL2AA1 BBE3AA1 1 at state preventive, CNEC ID = \"NNL2AA1 BBE3AA1 1 - preventive\"\n", + "2025-09-16 12:58:21,418 - INFO - Linear optimization on root leaf\n", + "2025-09-16 12:58:21,423 - WARNING - Network {CC0 SC0}: 11 generators have been discarded from active power control because of a targetP equals 0\n", + "2025-09-16 12:58:21,424 - INFO - Network {CC0 SC0} has 12 buses and 16 branches\n", + "2025-09-16 12:58:21,426 - INFO - Network {CC0 SC0} balance: active generation=1000.0 MW, active load=1000.0 MW, reactive generation=0.0 MVar, reactive load=0.0 MVar\n", + "2025-09-16 12:58:21,427 - INFO - Network {CC0 SC0}, slack buses are [BBE2AA1_0] (method='Most meshed bus')\n", + "2025-09-16 12:58:21,428 - INFO - Network {CC0 SC0}, reference bus is BBE2AA1_0 (method='First slack')\n", + "2025-09-16 12:58:21,429 - INFO - Running AC sensitivity analysis with 4 factors and 1 contingencies\n", + "2025-09-16 12:58:21,431 - INFO - Start AC loadflow on network {CC0 SC0}\n", + "2025-09-16 12:58:21,432 - INFO - AC loadflow complete on network {CC0 SC0} (result=AcLoadFlowResult(outerLoopIterations=0, newtonRaphsonIterations=2, solverStatus=CONVERGED, outerLoopStatus=STABLE, slackBusActivePowerMismatch=7.257322425457957E-4, distributedActivePower=0.0))\n", + "2025-09-16 12:58:21,433 - INFO - Simulate contingency 'Contingency DE2 DE3'\n", + "2025-09-16 12:58:21,434 - INFO - Start AC loadflow on network {CC0 SC0}\n", + "2025-09-16 12:58:21,435 - INFO - AC loadflow complete on network {CC0 SC0} (result=AcLoadFlowResult(outerLoopIterations=0, newtonRaphsonIterations=2, solverStatus=CONVERGED, outerLoopStatus=STABLE, slackBusActivePowerMismatch=-4.960476474025199E-10, distributedActivePower=0.0))\n", + "2025-09-16 12:58:21,437 - INFO - Iteration 1: better solution found with a cost of 42.72 (functional: 42.72)\n", + "2025-09-16 12:58:21,443 - INFO - Iteration 2: same results as previous iterations, optimal solution found\n", + "2025-09-16 12:58:21,444 - INFO - Root leaf, 1 range action(s) activated, cost: 42.72 (functional: 42.72, virtual: 0.0)\n", + "2025-09-16 12:58:21,444 - INFO - range action(s): pst-range-action: -10\n", + "2025-09-16 12:58:21,445 - INFO - Limiting element #01: margin = -42.72 MW, element NNL2AA1 BBE3AA1 1 at state Contingency DE2 DE3 - outage, CNEC ID = \"NNL2AA1 BBE3AA1 1 - Contingency DE2 DE3 - outage\"\n", + "2025-09-16 12:58:21,445 - INFO - Limiting element #02: margin = 18.73 MW, element NNL2AA1 BBE3AA1 1 at state preventive, CNEC ID = \"NNL2AA1 BBE3AA1 1 - preventive\"\n", + "2025-09-16 12:58:21,446 - INFO - Using base network '12_node_network' on variant 'PreventiveScenario'\n", + "2025-09-16 12:58:21,448 - INFO - Search depth 1 [start]\n", + "2025-09-16 12:58:21,450 - INFO - Leaves to evaluate: 1\n", + "2025-09-16 12:58:21,453 - INFO - Connectable NNL2AA1 BBE3AA1 2 has been connected on each side.\n", + "2025-09-16 12:58:21,456 - WARNING - Network {CC0 SC0}: 11 generators have been discarded from active power control because of a targetP equals 0\n", + "2025-09-16 12:58:21,456 - INFO - Network {CC0 SC0} has 12 buses and 17 branches\n", + "2025-09-16 12:58:21,458 - INFO - Network {CC0 SC0} balance: active generation=1000.0 MW, active load=1000.0 MW, reactive generation=0.0 MVar, reactive load=0.0 MVar\n", + "2025-09-16 12:58:21,460 - INFO - Network {CC0 SC0}, slack buses are [BBE2AA1_1] (method='Most meshed bus')\n", + "2025-09-16 12:58:21,463 - INFO - Network {CC0 SC0}, reference bus is BBE2AA1_1 (method='First slack')\n", + "2025-09-16 12:58:21,465 - INFO - Running AC sensitivity analysis with 4 factors and 1 contingencies\n", + "2025-09-16 12:58:21,466 - INFO - Start AC loadflow on network {CC0 SC0}\n", + "2025-09-16 12:58:21,468 - INFO - AC loadflow complete on network {CC0 SC0} (result=AcLoadFlowResult(outerLoopIterations=0, newtonRaphsonIterations=2, solverStatus=CONVERGED, outerLoopStatus=STABLE, slackBusActivePowerMismatch=-0.002408294433209335, distributedActivePower=0.0))\n", + "2025-09-16 12:58:21,469 - INFO - Simulate contingency 'Contingency DE2 DE3'\n", + "2025-09-16 12:58:21,472 - INFO - Start AC loadflow on network {CC0 SC0}\n", + "2025-09-16 12:58:21,475 - INFO - AC loadflow complete on network {CC0 SC0} (result=AcLoadFlowResult(outerLoopIterations=0, newtonRaphsonIterations=2, solverStatus=CONVERGED, outerLoopStatus=STABLE, slackBusActivePowerMismatch=4.3076653355456074E-11, distributedActivePower=0.0))\n", + "2025-09-16 12:58:21,477 - INFO - Evaluated network action(s): close NL2 BE3 2, cost: -187.22 (functional: -187.22, virtual: 0.0)\n", + "2025-09-16 12:58:21,477 - INFO - Optimized network action(s): close NL2 BE3 2, cost: -187.22 (functional: -187.22, virtual: 0.0)\n", + "2025-09-16 12:58:21,478 - INFO - Stop criterion reached, other threads may skip optimization.\n", + "2025-09-16 12:58:21,479 - INFO - Remaining leaves to evaluate: 0\n", + "2025-09-16 12:58:21,480 - INFO - Search depth 1 [end]\n", + "2025-09-16 12:58:21,480 - INFO - Search depth 1 best leaf: network action(s): close NL2 BE3 2, cost: -187.22 (functional: -187.22, virtual: 0.0)\n", + "2025-09-16 12:58:21,482 - INFO - Search depth 1 best leaf: range action(s): pst-range-action: -10\n", + "2025-09-16 12:58:21,482 - INFO - Limiting element #01: margin = 187.22 MW, element NNL2AA1 BBE3AA1 1 at state Contingency DE2 DE3 - outage, CNEC ID = \"NNL2AA1 BBE3AA1 1 - Contingency DE2 DE3 - outage\"\n", + "2025-09-16 12:58:21,483 - INFO - Limiting element #02: margin = 198.5 MW, element NNL2AA1 BBE3AA1 1 at state preventive, CNEC ID = \"NNL2AA1 BBE3AA1 1 - preventive\"\n", + "2025-09-16 12:58:21,483 - INFO - Search-tree RAO completed with status DEFAULT\n", + "2025-09-16 12:58:21,483 - INFO - Best leaf: network action(s): close NL2 BE3 2, cost: -187.22 (functional: -187.22, virtual: 0.0)\n", + "2025-09-16 12:58:21,484 - INFO - Best leaf: range action(s): pst-range-action: -10\n", + "2025-09-16 12:58:21,484 - INFO - Limiting element #01: margin = 187.22 MW, element NNL2AA1 BBE3AA1 1 at state Contingency DE2 DE3 - outage, CNEC ID = \"NNL2AA1 BBE3AA1 1 - Contingency DE2 DE3 - outage\"\n", + "2025-09-16 12:58:21,484 - INFO - Limiting element #02: margin = 198.5 MW, element NNL2AA1 BBE3AA1 1 at state preventive, CNEC ID = \"NNL2AA1 BBE3AA1 1 - preventive\"\n", + "2025-09-16 12:58:21,485 - INFO - Scenario \"preventive\": initial cost = 133.3 (functional: 133.3, virtual: 0.0), 1 network action(s) and 1 range action(s) activated : close NL2 BE3 2 and pst-range-action: -10, cost after preventive optimization = -187.22 (functional: -187.22, virtual: 0.0)\n", + "2025-09-16 12:58:21,485 - INFO - Connectable NNL2AA1 BBE3AA1 2 has been connected on each side.\n", + "2025-09-16 12:58:21,485 - INFO - ----- Preventive perimeter optimization [end]\n", + "2025-09-16 12:58:21,486 - INFO - Connectable NNL2AA1 BBE3AA1 2 has been connected on each side.\n", + "2025-09-16 12:58:21,486 - WARNING - Network {CC0 SC0}: 11 generators have been discarded from active power control because of a targetP equals 0\n", + "2025-09-16 12:58:21,487 - INFO - Network {CC0 SC0} has 12 buses and 17 branches\n", + "2025-09-16 12:58:21,487 - INFO - Network {CC0 SC0} balance: active generation=1000.0 MW, active load=1000.0 MW, reactive generation=0.0 MVar, reactive load=0.0 MVar\n", + "2025-09-16 12:58:21,487 - INFO - Network {CC0 SC0}, slack buses are [BBE2AA1_1] (method='Most meshed bus')\n", + "2025-09-16 12:58:21,488 - INFO - Network {CC0 SC0}, reference bus is BBE2AA1_1 (method='First slack')\n", + "2025-09-16 12:58:21,488 - INFO - Running AC sensitivity analysis with 6 factors and 1 contingencies\n", + "2025-09-16 12:58:21,488 - INFO - Start AC loadflow on network {CC0 SC0}\n", + "2025-09-16 12:58:21,489 - INFO - AC loadflow complete on network {CC0 SC0} (result=AcLoadFlowResult(outerLoopIterations=0, newtonRaphsonIterations=2, solverStatus=CONVERGED, outerLoopStatus=STABLE, slackBusActivePowerMismatch=-0.002408294433209335, distributedActivePower=0.0))\n", + "2025-09-16 12:58:21,489 - INFO - Simulate contingency 'Contingency DE2 DE3'\n", + "2025-09-16 12:58:21,490 - INFO - Start AC loadflow on network {CC0 SC0}\n", + "2025-09-16 12:58:21,490 - INFO - AC loadflow complete on network {CC0 SC0} (result=AcLoadFlowResult(outerLoopIterations=0, newtonRaphsonIterations=2, solverStatus=CONVERGED, outerLoopStatus=STABLE, slackBusActivePowerMismatch=4.3076653355456074E-11, distributedActivePower=0.0))\n", + "2025-09-16 12:58:21,490 - INFO - Systematic sensitivity analysis after preventive remedial actions: cost = 237.65 (functional: 237.65, virtual: 0.0)\n", + "2025-09-16 12:58:21,491 - INFO - Limiting element #01: margin = -237.65 MW, element BBE1AA1 BBE2AA1 1 at state Contingency DE2 DE3 - curative, CNEC ID = \"BBE1AA1 BBE2AA1 1 - Contingency DE2 DE3 - curative\"\n", + "2025-09-16 12:58:21,491 - INFO - Limiting element #02: margin = 187.22 MW, element NNL2AA1 BBE3AA1 1 at state Contingency DE2 DE3 - outage, CNEC ID = \"NNL2AA1 BBE3AA1 1 - Contingency DE2 DE3 - outage\"\n", + "2025-09-16 12:58:21,491 - INFO - ----- Post-contingency perimeters optimization [start]\n", + "2025-09-16 12:58:21,493 - INFO - Optimizing scenario post-contingency Contingency DE2 DE3.\n", + "2025-09-16 12:58:21,493 - INFO - Optimizing curative state Contingency DE2 DE3 - curative.\n", + "2025-09-16 12:58:21,494 - INFO - Root leaf, cost: 237.65 (functional: 237.65, virtual: 0.0)\n", + "2025-09-16 12:58:21,494 - INFO - Limiting element #01: margin = -237.65 MW, element BBE1AA1 BBE2AA1 1 at state Contingency DE2 DE3 - curative, CNEC ID = \"BBE1AA1 BBE2AA1 1 - Contingency DE2 DE3 - curative\"\n", + "2025-09-16 12:58:21,494 - INFO - Linear optimization on root leaf\n", + "2025-09-16 12:58:21,496 - WARNING - Network {CC0 SC0}: 11 generators have been discarded from active power control because of a targetP equals 0\n", + "2025-09-16 12:58:21,496 - INFO - Network {CC0 SC0} has 12 buses and 17 branches\n", + "2025-09-16 12:58:21,496 - INFO - Network {CC0 SC0} balance: active generation=1000.0 MW, active load=1000.0 MW, reactive generation=0.0 MVar, reactive load=0.0 MVar\n", + "2025-09-16 12:58:21,497 - INFO - Network {CC0 SC0}, slack buses are [BBE2AA1_1] (method='Most meshed bus')\n", + "2025-09-16 12:58:21,497 - INFO - Network {CC0 SC0}, reference bus is BBE2AA1_1 (method='First slack')\n", + "2025-09-16 12:58:21,497 - INFO - Running AC sensitivity analysis with 2 factors and 1 contingencies\n", + "2025-09-16 12:58:21,498 - INFO - Start AC loadflow on network {CC0 SC0}\n", + "2025-09-16 12:58:21,498 - INFO - AC loadflow complete on network {CC0 SC0} (result=AcLoadFlowResult(outerLoopIterations=0, newtonRaphsonIterations=2, solverStatus=CONVERGED, outerLoopStatus=STABLE, slackBusActivePowerMismatch=0.001380331569489357, distributedActivePower=0.0))\n", + "2025-09-16 12:58:21,499 - INFO - Simulate contingency 'Contingency DE2 DE3'\n", + "2025-09-16 12:58:21,500 - INFO - Start AC loadflow on network {CC0 SC0}\n", + "2025-09-16 12:58:21,500 - INFO - AC loadflow complete on network {CC0 SC0} (result=AcLoadFlowResult(outerLoopIterations=0, newtonRaphsonIterations=1, solverStatus=CONVERGED, outerLoopStatus=STABLE, slackBusActivePowerMismatch=-0.0011719159598300166, distributedActivePower=0.0))\n", + "2025-09-16 12:58:21,501 - INFO - Iteration 1: better solution found with a cost of -290.77 (functional: -290.77)\n", + "2025-09-16 12:58:21,503 - INFO - Iteration 2: same results as previous iterations, optimal solution found\n", + "2025-09-16 12:58:21,503 - INFO - Root leaf, 1 range action(s) activated, cost: -290.77 (functional: -290.77, virtual: 0.0)\n", + "2025-09-16 12:58:21,504 - INFO - range action(s): pst-range-action: 6\n", + "2025-09-16 12:58:21,505 - INFO - Limiting element #01: margin = 290.77 MW, element BBE1AA1 BBE2AA1 1 at state Contingency DE2 DE3 - curative, CNEC ID = \"BBE1AA1 BBE2AA1 1 - Contingency DE2 DE3 - curative\"\n", + "2025-09-16 12:58:21,506 - INFO - No network action available\n", + "2025-09-16 12:58:21,507 - INFO - Search-tree RAO completed with status DEFAULT\n", + "2025-09-16 12:58:21,510 - INFO - Best leaf: Root leaf, 1 range action(s) activated, cost: -290.77 (functional: -290.77, virtual: 0.0)\n", + "2025-09-16 12:58:21,512 - INFO - Best leaf: range action(s): pst-range-action: 6\n", + "2025-09-16 12:58:21,513 - INFO - Limiting element #01: margin = 290.77 MW, element BBE1AA1 BBE2AA1 1 at state Contingency DE2 DE3 - curative, CNEC ID = \"BBE1AA1 BBE2AA1 1 - Contingency DE2 DE3 - curative\"\n", + "2025-09-16 12:58:21,515 - INFO - Scenario \"Contingency DE2 DE3\": initial cost = 237.65 (functional: 237.65, virtual: 0.0), 1 range action(s) activated : pst-range-action: 6, cost after curative optimization = -290.77 (functional: -290.77, virtual: 0.0)\n", + "2025-09-16 12:58:21,517 - INFO - Curative state Contingency DE2 DE3 - curative has been optimized.\n", + "2025-09-16 12:58:21,518 - INFO - ----- Post-contingency perimeters optimization [end]\n", + "2025-09-16 12:58:21,520 - INFO - Merging preventive and post-contingency RAO results:\n", + "2025-09-16 12:58:21,521 - INFO - Limiting element #01: margin = 187.22 MW, element NNL2AA1 BBE3AA1 1 at state Contingency DE2 DE3 - outage, CNEC ID = \"NNL2AA1 BBE3AA1 1 - Contingency DE2 DE3 - outage\"\n", + "2025-09-16 12:58:21,521 - INFO - Limiting element #02: margin = 198.5 MW, element NNL2AA1 BBE3AA1 1 at state preventive, CNEC ID = \"NNL2AA1 BBE3AA1 1 - preventive\"\n", + "2025-09-16 12:58:21,521 - INFO - Limiting element #03: margin = 290.77 MW, element BBE1AA1 BBE2AA1 1 at state Contingency DE2 DE3 - curative, CNEC ID = \"BBE1AA1 BBE2AA1 1 - Contingency DE2 DE3 - curative\"\n", + "2025-09-16 12:58:21,522 - INFO - Cost before RAO = 133.3 (functional: 133.3, virtual: 0.0), cost after RAO = -187.22 (functional: -187.22, virtual: 0.0)\n" ] } ], - "execution_count": 51 + "execution_count": 11 }, { "cell_type": "code", @@ -1039,8 +765,8 @@ "metadata": { "collapsed": false, "ExecuteTime": { - "end_time": "2025-04-25T09:44:31.267614Z", - "start_time": "2025-04-25T09:44:31.259811Z" + "end_time": "2025-09-16T10:58:21.582543Z", + "start_time": "2025-09-16T10:58:21.574572Z" } }, "outputs": [ @@ -1091,12 +817,12 @@ " 'setpoint': 2.337343603803646}]}]}" ] }, - "execution_count": 52, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], - "execution_count": 52 + "execution_count": 12 }, { "cell_type": "markdown", @@ -1116,8 +842,8 @@ "metadata": { "collapsed": false, "ExecuteTime": { - "end_time": "2025-04-25T09:44:31.324625Z", - "start_time": "2025-04-25T09:44:31.319652Z" + "end_time": "2025-09-16T10:58:21.643937Z", + "start_time": "2025-09-16T10:58:21.635968Z" } }, "outputs": [ @@ -1133,12 +859,12 @@ " 'megawatt': {'margin': 290.77, 'side1': {'flow': 9.23}}}}]" ] }, - "execution_count": 53, + "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], - "execution_count": 53 + "execution_count": 13 }, { "cell_type": "markdown", diff --git a/operator_strategy.ipynb b/operator_strategy.ipynb index f47c660..0ccea73 100644 --- a/operator_strategy.ipynb +++ b/operator_strategy.ipynb @@ -5,7 +5,8 @@ "metadata": {}, "source": [ "# Operator strategy notebook " - ] + ], + "id": "1b0280a047f95aea" }, { "cell_type": "markdown", @@ -14,760 +15,89 @@ }, "source": [ "This notebook illustrates how to run a security analysis with remedial actions. For a contingency, an operator strategy groups a list of actions and a condition to apply them. This small tutorial is based on a 6 nodes network, called Metrix, that is easily understandable. We are going to simulate contingencies and various operator strategies to show the available features. Network elements can be monitored in pre-contingency state, after a contingency and after each operator strategy." - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Defaulting to user installation because normal site-packages is not writeable\n", - "Looking in indexes: https://devin-depot.rte-france.com/repository/pypi-all/simple\n", - "Requirement already satisfied: pypowsybl in /home/kuleszahug/.local/lib/python3.8/site-packages (1.4.0.dev1)\n", - "Requirement already satisfied: prettytable in /home/kuleszahug/.local/lib/python3.8/site-packages (from pypowsybl) (2.0.0)\n", - "Requirement already satisfied: numpy>=1.20.0 in /home/kuleszahug/.local/lib/python3.8/site-packages (from pypowsybl) (1.24.3)\n", - "Requirement already satisfied: networkx in /home/kuleszahug/.local/lib/python3.8/site-packages (from pypowsybl) (3.1)\n", - "Requirement already satisfied: pandas>=1.3.5 in /home/kuleszahug/.local/lib/python3.8/site-packages (from pypowsybl) (2.0.3)\n", - "Requirement already satisfied: python-dateutil>=2.8.2 in /home/kuleszahug/.local/lib/python3.8/site-packages (from pandas>=1.3.5->pypowsybl) (2.8.2)\n", - "Requirement already satisfied: pytz>=2020.1 in /home/kuleszahug/.local/lib/python3.8/site-packages (from pandas>=1.3.5->pypowsybl) (2023.3)\n", - "Requirement already satisfied: tzdata>=2022.1 in /home/kuleszahug/.local/lib/python3.8/site-packages (from pandas>=1.3.5->pypowsybl) (2023.3)\n", - "Requirement already satisfied: setuptools in /home/kuleszahug/.local/lib/python3.8/site-packages (from prettytable->pypowsybl) (69.1.1)\n", - "Requirement already satisfied: wcwidth in /home/kuleszahug/.local/lib/python3.8/site-packages (from prettytable->pypowsybl) (0.2.6)\n", - "Requirement already satisfied: six>=1.5 in /home/kuleszahug/.local/lib/python3.8/site-packages (from python-dateutil>=2.8.2->pandas>=1.3.5->pypowsybl) (1.16.0)\n", - "\u001b[33mDEPRECATION: distro-info 0.23ubuntu1 has a non-standard version number. pip 24.1 will enforce this behaviour change. A possible replacement is to upgrade to a newer version of distro-info or contact the author to suggest that they release a version with a conforming version number. Discussion can be found at https://github.com/pypa/pip/issues/12063\u001b[0m\u001b[33m\n", - "\u001b[0m\u001b[33mDEPRECATION: python-debian 0.1.36ubuntu1 has a non-standard version number. pip 24.1 will enforce this behaviour change. A possible replacement is to upgrade to a newer version of python-debian or contact the author to suggest that they release a version with a conforming version number. Discussion can be found at https://github.com/pypa/pip/issues/12063\u001b[0m\u001b[33m\n", - "\u001b[0mNote: you may need to restart the kernel to use updated packages.\n" - ] - } ], - "source": [ - "pip install pypowsybl" - ] + "id": "4f07e59e693da262" }, { "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-15T11:41:33.369752Z", + "start_time": "2025-09-15T11:41:33.361231Z" + } + }, "source": [ "import pypowsybl as pp\n", "import pandas as pd\n", "import numpy as np\n", "from pypowsybl._pypowsybl import ConditionType" - ] + ], + "id": "dc0fa4c0ea4328ed", + "outputs": [], + "execution_count": 189 }, { "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-15T11:41:33.402804Z", + "start_time": "2025-09-15T11:41:33.379187Z" + } + }, "source": [ "six_nodes = pp.network.create_metrix_tutorial_six_buses_network()" - ] + ], + "id": "14e8f5d999dd7e91", + "outputs": [], + "execution_count": 190 }, { "cell_type": "markdown", "metadata": {}, - "source": [ - "![6 nodes network](data/reseau_6_noeuds_ss_HDVC.png)" - ] + "source": "![6 nodes network](images/network_6_nodes_without_HDVC.png)", + "id": "7e21c296f88d2989" }, { "cell_type": "code", - "execution_count": 7, - "metadata": {}, + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-15T11:41:33.453853Z", + "start_time": "2025-09-15T11:41:33.433647Z" + } + }, + "source": [ + "six_nodes.get_network_area_diagram()" + ], + "id": "3ad43659504d12cf", "outputs": [ { "data": { - "image/svg+xml": [ - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " -48\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 48\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " -48\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 48\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " -96\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 96\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " -96\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 96\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " -96\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 96\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 48\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " -48\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 48\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " -48\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 96\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " -96\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 96\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " -96\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 144\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " -144\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 144\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " -144\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 0\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 0\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 0\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 0\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " -144\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 144\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " -144\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 144\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
\n", - "
NE_poste
\n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
\n", - "
\n", - "
380.0 kV / -0.0°
\n", - "
\n", - "
\n", - " \n", - "
\n", - "
NO_poste
\n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
\n", - "
\n", - "
380.0 kV / 0.0°
\n", - "
\n", - "
\n", - " \n", - "
\n", - "
N_poste
\n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
\n", - "
\n", - "
380.0 kV / -0.0°
\n", - "
\n", - "
\n", - " \n", - "
\n", - "
SE_poste
\n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
\n", - "
\n", - "
380.0 kV / -0.1°
\n", - "
\n", - "
\n", - " \n", - "
\n", - "
SO_poste
\n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
\n", - "
\n", - "
380.0 kV / 0.0°
\n", - "
\n", - "
\n", - " \n", - "
\n", - "
S_poste
\n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
\n", - "
\n", - "
380.0 kV / -0.0°
\n", - "
\n", - "
\n", - "
\n", - "
\n" - ], "text/plain": [ - "" - ] + "" + ], + "image/svg+xml": "\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n -48\n \n \n \n \n \n \n \n \n \n \n \n 48\n \n \n \n \n \n \n \n \n \n \n \n \n \n -48\n \n \n \n \n \n \n \n \n \n \n \n 48\n \n \n \n \n \n \n \n \n \n \n \n \n \n -96\n \n \n \n \n \n \n \n \n \n \n \n 96\n \n \n \n \n \n \n \n \n \n \n \n \n \n -96\n \n \n \n \n \n \n \n \n \n \n \n 96\n \n \n \n \n \n \n \n \n \n \n \n \n \n -96\n \n \n \n \n \n \n \n \n \n \n \n 96\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 48\n \n \n \n \n \n \n \n \n \n \n \n -48\n \n \n \n \n \n \n \n \n \n \n \n \n \n 48\n \n \n \n \n \n \n \n \n \n \n \n -48\n \n \n \n \n \n \n \n \n \n \n \n \n \n 96\n \n \n \n \n \n \n \n \n \n \n \n -96\n \n \n \n \n \n \n \n \n \n \n \n \n \n 96\n \n \n \n \n \n \n \n \n \n \n \n -96\n \n \n \n \n \n \n \n \n \n \n \n \n \n 144\n \n \n \n \n \n \n \n \n \n \n \n -144\n \n \n \n \n \n \n \n \n \n \n \n \n \n 144\n \n \n \n \n \n \n \n \n \n \n \n -144\n \n \n \n \n \n \n \n \n \n \n \n \n \n 0\n \n \n \n \n \n \n \n \n \n \n \n 0\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 0\n \n \n \n \n \n \n \n \n \n \n \n 0\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n -144\n \n \n \n \n \n \n \n \n \n \n \n 144\n \n \n \n \n \n \n \n \n \n \n \n \n \n -144\n \n \n \n \n \n \n \n \n \n \n \n 144\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n
NE_poste
\n
\n 380.0 kV / -0.0°
\n
\n
\n
NO_poste
\n
\n 380.0 kV / 0.0°
\n
\n
\n
N_poste
\n
\n 380.0 kV / -0.0°
\n
\n
\n
SE_poste
\n
\n 380.0 kV / -0.1°
\n
\n
\n
SO_poste
\n
\n 380.0 kV / 0.0°
\n
\n
\n
S_poste
\n
\n 380.0 kV / -0.0°
\n
\n
\n
\n
\n" }, - "execution_count": 7, + "execution_count": 191, "metadata": {}, "output_type": "execute_result" } ], - "source": [ - "six_nodes.get_network_area_diagram()" - ] + "execution_count": 191 }, { "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [], + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-15T11:41:33.514614Z", + "start_time": "2025-09-15T11:41:33.508695Z" + } + }, "source": [ "sa = pp.security.create_analysis()" - ] + ], + "id": "bcb3ce751e3c18f4", + "outputs": [], + "execution_count": 192 }, { "cell_type": "markdown", @@ -776,1421 +106,151 @@ }, "source": [ "We simulate a contingency on line S_SO_1. When loosing this line, flows are redirected and line S_SO_2 is overloaded. We are going to test various operator strategies to remove the limit violation." - ] + ], + "id": "e3fce4e38cd1b21a" }, { "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [], + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-15T11:41:33.572162Z", + "start_time": "2025-09-15T11:41:33.567011Z" + } + }, "source": [ "sa.add_single_element_contingency('S_SO_1', 'S_SO_1_contingency')" - ] + ], + "id": "cfb39506a50ada0d", + "outputs": [], + "execution_count": 193 }, { "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [], + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-15T11:41:33.627730Z", + "start_time": "2025-09-15T11:41:33.623954Z" + } + }, "source": [ "sa.add_monitored_elements(branch_ids=['S_SO_2', 'SO_NO_1'])" - ] + ], + "id": "bd361396f785bcd9", + "outputs": [], + "execution_count": 194 }, { "cell_type": "markdown", "metadata": {}, "source": [ "We add a current limit on line S_SO_2" - ] + ], + "id": "7ee406c85a45c88b" }, { "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [], + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-15T11:41:33.689327Z", + "start_time": "2025-09-15T11:41:33.680899Z" + } + }, "source": [ "six_nodes.create_operational_limits(pd.DataFrame.from_records(index='element_id', data=[\n", " {'element_id': 'S_SO_2', 'name': 'permanent_limit', 'element_type': 'LINE', 'side': 'TWO',\n", " 'type': 'CURRENT', 'value': 400,\n", - " 'acceptable_duration': np.Inf, 'is_fictitious': False}\n", + " 'acceptable_duration': np.inf, 'is_fictitious': False}\n", " ]))" - ] + ], + "id": "a91145c3468656aa", + "outputs": [], + "execution_count": 195 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Detailed topology" - ] + ], + "id": "4d50fb96cd1231c5" }, { "cell_type": "markdown", "metadata": {}, "source": [ "### SO_poste" - ] + ], + "id": "9d46aafb1ee45846" }, { "cell_type": "code", - "execution_count": 12, - "metadata": {}, + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-15T11:41:33.769801Z", + "start_time": "2025-09-15T11:41:33.745198Z" + } + }, + "source": [ + "six_nodes.get_single_line_diagram('SO_poste')" + ], + "id": "d63f9a70d0617c48", "outputs": [ { "data": { - "image/svg+xml": [ - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " SOO1_1\n", - " \n", - " \n", - " \n", - " SOO1_mnv\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " -480\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " SO_G1\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 96\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " SO_NO_1\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 96\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " SO_NO_2\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 0\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " AC / DC - VSC\n", - " HVDC1\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 0\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " AC / DC - VSC\n", - " HVDC2\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 144\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " S_SO_1\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 144\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " S_SO_2\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 480\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " SO_L\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " -480\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " SO_G2\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n" - ], "text/plain": [ - "" - ] + "" + ], + "image/svg+xml": "\n\n \n \n \n \n \n \n SOO1_1\n \n \n \n SOO1_mnv\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n -480\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n SO_G1\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 96\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n SO_NO_1\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 96\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n SO_NO_2\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 0\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n AC / DC - VSC\n HVDC1\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 0\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n AC / DC - VSC\n HVDC2\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 144\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n S_SO_1\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 144\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n S_SO_2\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 480\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n SO_L\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n -480\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n SO_G2\n \n \n \n \n \n \n \n \n\n" }, - "execution_count": 12, + "execution_count": 196, "metadata": {}, "output_type": "execute_result" } ], - "source": [ - "six_nodes.get_single_line_diagram('SO_poste')" - ] + "execution_count": 196 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### SE_poste" - ] + ], + "id": "c9fdaeda67f90947" }, { "cell_type": "code", - "execution_count": 13, - "metadata": {}, + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-15T11:41:33.840565Z", + "start_time": "2025-09-15T11:41:33.820027Z" + } + }, + "source": [ + "six_nodes.get_single_line_diagram('SE_poste')" + ], + "id": "d1c444ff76b5274a", "outputs": [ { "data": { - "image/svg+xml": [ - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " SEI1_1\n", - " \n", - " \n", - " \n", - " SEI1_mnv\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " -0\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " SE_G\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " -144\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " S_SE_1\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " -144\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " S_SE_2\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " -96\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " SE_NE_1\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " -96\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " SE_NE_2\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 0\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " AC / DC - VSC\n", - " HVDC1\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 0\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " AC / DC - VSC\n", - " HVDC2\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 480\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " SE_L1\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 0\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " SE_L2\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n" - ], "text/plain": [ - "" - ] + "" + ], + "image/svg+xml": "\n\n \n \n \n \n \n \n SEI1_1\n \n \n \n SEI1_mnv\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n -0\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n SE_G\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n -144\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n S_SE_1\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n -144\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n S_SE_2\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n -96\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n SE_NE_1\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n -96\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n SE_NE_2\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 0\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n AC / DC - VSC\n HVDC1\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 0\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n AC / DC - VSC\n HVDC2\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 480\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n SE_L1\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 0\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n SE_L2\n \n \n \n \n \n \n \n \n\n" }, - "execution_count": 13, + "execution_count": 197, "metadata": {}, "output_type": "execute_result" } ], - "source": [ - "six_nodes.get_single_line_diagram('SE_poste')" - ] + "execution_count": 197 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Topological remedial actions" - ] + ], + "id": "9d43113842d0c203" }, { "cell_type": "markdown", @@ -2200,59 +260,91 @@ "source": [ "You have to add all the actions involved in the strategies you want to test. Here, we want to see the effect of opening switches SS1_SS1_DJ_OMN or/and SOO1_SOO1_DJ_OMN: opening only the first one, only the second one or both.\n", "Operator strategies have the condition ANY_VIOLATION_CONDITION " - ] + ], + "id": "d6f86589013952a1" }, { "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [], + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-15T11:41:33.901914Z", + "start_time": "2025-09-15T11:41:33.897759Z" + } + }, "source": [ "sa.add_switch_action(action_id='Switch_SS1_SS1_DJ_OMN_OPEN', switch_id='SS1_SS1_DJ_OMN', open=True)" - ] + ], + "id": "647af507098f6e3", + "outputs": [], + "execution_count": 198 }, { "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [], + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-15T11:41:33.956010Z", + "start_time": "2025-09-15T11:41:33.952334Z" + } + }, "source": [ "sa.add_switch_action(action_id='Switch_SOO1_SOO1_DJ_OMN_OPEN', switch_id='SOO1_SOO1_DJ_OMN', open=True)" - ] + ], + "id": "92ae9b8777f508ef", + "outputs": [], + "execution_count": 199 }, { "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [], + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-15T11:41:34.013685Z", + "start_time": "2025-09-15T11:41:34.008558Z" + } + }, "source": [ "sa.add_operator_strategy('StrategyOpenSS1_SS1', 'S_SO_1_contingency', ['Switch_SS1_SS1_DJ_OMN_OPEN'], ConditionType.ANY_VIOLATION_CONDITION) " - ] + ], + "id": "a92d5ab2f749d3d4", + "outputs": [], + "execution_count": 200 }, { "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [], + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-15T11:41:34.069289Z", + "start_time": "2025-09-15T11:41:34.064093Z" + } + }, "source": [ "sa.add_operator_strategy('StrategyOpenSOO1_SOO1', 'S_SO_1_contingency', ['Switch_SOO1_SOO1_DJ_OMN_OPEN'], ConditionType.ANY_VIOLATION_CONDITION) " - ] + ], + "id": "519c2de05c20647a", + "outputs": [], + "execution_count": 201 }, { "cell_type": "code", - "execution_count": 18, - "metadata": {}, - "outputs": [], + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-15T11:41:34.124810Z", + "start_time": "2025-09-15T11:41:34.121324Z" + } + }, "source": [ "sa.add_operator_strategy('StrategyOpenBothSwitchs', 'S_SO_1_contingency', ['Switch_SS1_SS1_DJ_OMN_OPEN', 'Switch_SOO1_SOO1_DJ_OMN_OPEN'], ConditionType.ANY_VIOLATION_CONDITION) " - ] + ], + "id": "35fa47a5301cf143", + "outputs": [], + "execution_count": 202 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Redispatch remedial actions" - ] + ], + "id": "b257fa60aae196ee" }, { "cell_type": "markdown", @@ -2261,68 +353,99 @@ }, "source": [ "An other strategy could be to modify the active power target of some generators, in a way the two modifications compensate (also called re-dispatching). Decreasing active power target of generator SO_G2 and increasing active power of SE_G (closer to loads) could be efficient." - ] + ], + "id": "666ac7b1aa783de9" }, { "cell_type": "code", - "execution_count": 19, - "metadata": {}, - "outputs": [], + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-15T11:41:34.181168Z", + "start_time": "2025-09-15T11:41:34.176223Z" + } + }, "source": [ "sa.add_generator_active_power_action(action_id='Simple_Redispatch_SO_G2', generator_id='SO_G2', is_relative=True, active_power=-100)\n", "sa.add_generator_active_power_action(action_id='Simple_Redispatch_SE_G', generator_id='SE_G', is_relative=True, active_power=100)" - ] + ], + "id": "5ab7c10f9bd71676", + "outputs": [], + "execution_count": 203 }, { "cell_type": "code", - "execution_count": 20, - "metadata": {}, - "outputs": [], + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-15T11:41:34.238793Z", + "start_time": "2025-09-15T11:41:34.235181Z" + } + }, "source": [ "sa.add_operator_strategy('StrategyRedispatch', 'S_SO_1_contingency', ['Simple_Redispatch_SO_G2', 'Simple_Redispatch_SE_G'], ConditionType.ANY_VIOLATION_CONDITION)" - ] + ], + "id": "bf1ce6bee49176b0", + "outputs": [], + "execution_count": 204 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Run the security analysis " - ] + ], + "id": "af204906980f0e20" }, { "cell_type": "code", - "execution_count": 21, - "metadata": {}, - "outputs": [], + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-15T11:41:34.305639Z", + "start_time": "2025-09-15T11:41:34.291887Z" + } + }, "source": [ "sa_result = sa.run_ac(six_nodes)" - ] + ], + "id": "43ae2463b4d09085", + "outputs": [], + "execution_count": 205 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Check the results at each steps" - ] + ], + "id": "fb32175c4cdfc1ba" }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Pre contingency step" - ] + ], + "id": "a83c52bfe9b129e5" }, { "cell_type": "markdown", "metadata": {}, "source": [ "We should have no limit violations at the pre contingency state." - ] + ], + "id": "89166bdd75b36cd" }, { "cell_type": "code", - "execution_count": 22, - "metadata": {}, + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-15T11:41:34.356305Z", + "start_time": "2025-09-15T11:41:34.349906Z" + } + }, + "source": [ + "sa_result.pre_contingency_result" + ], + "id": "47c05b893ec1b062", "outputs": [ { "data": { @@ -2330,33 +453,41 @@ "PreContingencyResult(, status=CONVERGED, limit_violations=[0])" ] }, - "execution_count": 22, + "execution_count": 206, "metadata": {}, "output_type": "execute_result" } ], - "source": [ - "sa_result.pre_contingency_result" - ] + "execution_count": 206 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Post contingency step" - ] + ], + "id": "58fa05fb3c90eb27" }, { "cell_type": "markdown", "metadata": {}, "source": [ "Then the first contingency trigger the current limit installed on S_SO_2" - ] + ], + "id": "7e8ed3b0c79c1b18" }, { "cell_type": "code", - "execution_count": 23, - "metadata": {}, + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-15T11:41:34.418804Z", + "start_time": "2025-09-15T11:41:34.412276Z" + } + }, + "source": [ + "sa_result.find_post_contingency_result('S_SO_1_contingency')" + ], + "id": "5d9ab85a779a3b5d", "outputs": [ { "data": { @@ -2364,60 +495,73 @@ "PostContingencyResult(contingency_id='S_SO_1_contingency', status=CONVERGED, limit_violations=[1])" ] }, - "execution_count": 23, + "execution_count": 207, "metadata": {}, "output_type": "execute_result" } ], - "source": [ - "sa_result.find_post_contingency_result('S_SO_1_contingency')" - ] + "execution_count": 207 }, { "cell_type": "code", - "execution_count": 24, - "metadata": {}, + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-15T11:41:34.484330Z", + "start_time": "2025-09-15T11:41:34.474789Z" + } + }, + "source": [ + "sa_result.find_post_contingency_result('S_SO_1_contingency').limit_violations[0]" + ], + "id": "11306df26b311f86", "outputs": [ { "data": { "text/plain": [ - "LimitViolation(subject_id='S_SO_2', subject_name='', limit_type=CURRENT, limit=400.0, limit_name='permanent', acceptable_duration=2147483647, limit_reduction=1.0, value=419.2577908692318, side=TWO)" + "LimitViolation(subject_id='S_SO_2', subject_name='', limit_type=CURRENT, limit=400.0, limit_name='permanent', acceptable_duration=2147483647, limit_reduction=1.0, value=419.25779086638283, side=TWO)" ] }, - "execution_count": 24, + "execution_count": 208, "metadata": {}, "output_type": "execute_result" } ], - "source": [ - "sa_result.find_post_contingency_result('S_SO_1_contingency').limit_violations[0]" - ] + "execution_count": 208 }, { "cell_type": "markdown", "metadata": {}, "source": [ "We see that the flow is at 419.25." - ] + ], + "id": "e571b6f51eb0f24d" }, { "cell_type": "markdown", "metadata": {}, "source": [ "### StrategyOpenSS1_SS1" - ] + ], + "id": "ecb73b22d5542449" }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's check results for StrategyOpenSS1_SS1 :" - ] + ], + "id": "3d35d85ccb6e31d1" }, { "cell_type": "code", - "execution_count": 25, - "metadata": {}, + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-15T11:41:34.547807Z", + "start_time": "2025-09-15T11:41:34.540530Z" + } + }, + "source": "sa_result.operator_strategy_results['StrategyOpenSS1_SS1']", + "id": "4596b24f0b81143e", "outputs": [ { "data": { @@ -2425,60 +569,73 @@ "OperatorStrategyResult(operator_strategy_id='StrategyOpenSS1_SS1', status=CONVERGED, limit_violations=[0])" ] }, - "execution_count": 25, + "execution_count": 209, "metadata": {}, "output_type": "execute_result" } ], - "source": [ - " sa_result.operator_strategy_results['StrategyOpenSS1_SS1']" - ] + "execution_count": 209 }, { "cell_type": "code", - "execution_count": 26, - "metadata": {}, + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-15T11:41:34.614515Z", + "start_time": "2025-09-15T11:41:34.604387Z" + } + }, + "source": [ + "sa_result.branch_results.loc['S_SO_1_contingency', 'StrategyOpenSS1_SS1', 'S_SO_2']['i2']" + ], + "id": "26d5d2be34df1fa7", "outputs": [ { "data": { "text/plain": [ - "378.3380062100674" + "np.float64(378.3380062100348)" ] }, - "execution_count": 26, + "execution_count": 210, "metadata": {}, "output_type": "execute_result" } ], - "source": [ - "sa_result.branch_results.loc['S_SO_1_contingency', 'StrategyOpenSS1_SS1', 'S_SO_2']['i2']" - ] + "execution_count": 210 }, { "cell_type": "markdown", "metadata": {}, "source": [ "We no longer have a limit violation, and we see that flow on S_SO2 is under 400." - ] + ], + "id": "3598bf16ad30c1e2" }, { "cell_type": "markdown", "metadata": {}, "source": [ "### StrategyOpenSOO1_SOO1" - ] + ], + "id": "39bfb255e04836ec" }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's check results for StrategyOpenSOO1_SOO1 :" - ] + ], + "id": "35d7f311615a83d5" }, { "cell_type": "code", - "execution_count": 27, - "metadata": {}, + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-15T11:41:34.674994Z", + "start_time": "2025-09-15T11:41:34.669052Z" + } + }, + "source": "sa_result.operator_strategy_results['StrategyOpenSOO1_SOO1']", + "id": "7771bd4cd9f297b1", "outputs": [ { "data": { @@ -2486,80 +643,97 @@ "OperatorStrategyResult(operator_strategy_id='StrategyOpenSOO1_SOO1', status=CONVERGED, limit_violations=[2])" ] }, - "execution_count": 27, + "execution_count": 211, "metadata": {}, "output_type": "execute_result" } ], - "source": [ - " sa_result.operator_strategy_results['StrategyOpenSOO1_SOO1']" - ] + "execution_count": 211 }, { "cell_type": "code", - "execution_count": 28, - "metadata": {}, + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-15T11:41:34.737651Z", + "start_time": "2025-09-15T11:41:34.731059Z" + } + }, + "source": "sa_result.operator_strategy_results['StrategyOpenSOO1_SOO1'].limit_violations[0]", + "id": "9b2f75a1d140e946", "outputs": [ { "data": { "text/plain": [ - "LimitViolation(subject_id='SO_NO_1', subject_name='', limit_type=CURRENT, limit=700.0, limit_name=\"10'\", acceptable_duration=1, limit_reduction=1.0, value=1044.4966633667539, side=ONE)" + "LimitViolation(subject_id='SO_NO_1', subject_name='', limit_type=CURRENT, limit=700.0, limit_name=\"10'\", acceptable_duration=1, limit_reduction=1.0, value=1044.4966633667482, side=ONE)" ] }, - "execution_count": 28, + "execution_count": 212, "metadata": {}, "output_type": "execute_result" } ], - "source": [ - " sa_result.operator_strategy_results['StrategyOpenSOO1_SOO1'].limit_violations[0]" - ] + "execution_count": 212 }, { "cell_type": "code", - "execution_count": 29, - "metadata": {}, + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-15T11:41:34.795858Z", + "start_time": "2025-09-15T11:41:34.789530Z" + } + }, + "source": [ + "sa_result.operator_strategy_results['StrategyOpenSOO1_SOO1'].limit_violations[1]" + ], + "id": "8dcd1830734d74a5", "outputs": [ { "data": { "text/plain": [ - "LimitViolation(subject_id='SO_NO_1', subject_name='', limit_type=CURRENT, limit=600.0, limit_name='permanent', acceptable_duration=2147483647, limit_reduction=1.0, value=1044.4966633667539, side=TWO)" + "LimitViolation(subject_id='SO_NO_1', subject_name='', limit_type=CURRENT, limit=600.0, limit_name='permanent', acceptable_duration=2147483647, limit_reduction=1.0, value=1044.4966633667477, side=TWO)" ] }, - "execution_count": 29, + "execution_count": 213, "metadata": {}, "output_type": "execute_result" } ], - "source": [ - "sa_result.operator_strategy_results['StrategyOpenSOO1_SOO1'].limit_violations[1]" - ] + "execution_count": 213 }, { "cell_type": "markdown", "metadata": {}, "source": [ "We see that we have two new limit violation on SO_NO_1. But still no limit violation on S_SO2" - ] + ], + "id": "acc51c99fff318fb" }, { "cell_type": "markdown", "metadata": {}, "source": [ "### StrategyOpenBothSwitchs" - ] + ], + "id": "4c7e60050aea7936" }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's check results for StrategyOpenBothSwitchs :" - ] + ], + "id": "6c05427aab4ad741" }, { "cell_type": "code", - "execution_count": 30, - "metadata": {}, + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-15T11:41:34.869027Z", + "start_time": "2025-09-15T11:41:34.864124Z" + } + }, + "source": "sa_result.operator_strategy_results['StrategyOpenBothSwitchs']", + "id": "a61c5a890e6ed82a", "outputs": [ { "data": { @@ -2567,80 +741,99 @@ "OperatorStrategyResult(operator_strategy_id='StrategyOpenBothSwitchs', status=CONVERGED, limit_violations=[2])" ] }, - "execution_count": 30, + "execution_count": 214, "metadata": {}, "output_type": "execute_result" } ], - "source": [ - " sa_result.operator_strategy_results['StrategyOpenBothSwitchs']" - ] + "execution_count": 214 }, { "cell_type": "code", - "execution_count": 31, - "metadata": {}, + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-15T11:41:34.920379Z", + "start_time": "2025-09-15T11:41:34.917504Z" + } + }, + "source": [ + "sa_result.operator_strategy_results['StrategyOpenSOO1_SOO1'].limit_violations[0]" + ], + "id": "b6ac97e8f513b01c", "outputs": [ { "data": { "text/plain": [ - "LimitViolation(subject_id='SO_NO_1', subject_name='', limit_type=CURRENT, limit=700.0, limit_name=\"10'\", acceptable_duration=1, limit_reduction=1.0, value=1044.4966633667539, side=ONE)" + "LimitViolation(subject_id='SO_NO_1', subject_name='', limit_type=CURRENT, limit=700.0, limit_name=\"10'\", acceptable_duration=1, limit_reduction=1.0, value=1044.4966633667482, side=ONE)" ] }, - "execution_count": 31, + "execution_count": 215, "metadata": {}, "output_type": "execute_result" } ], - "source": [ - "sa_result.operator_strategy_results['StrategyOpenSOO1_SOO1'].limit_violations[0]" - ] + "execution_count": 215 }, { "cell_type": "code", - "execution_count": 32, - "metadata": {}, + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-15T11:41:34.971744Z", + "start_time": "2025-09-15T11:41:34.967955Z" + } + }, + "source": [ + "sa_result.operator_strategy_results['StrategyOpenSOO1_SOO1'].limit_violations[1]" + ], + "id": "f187ed1370f6b05b", "outputs": [ { "data": { "text/plain": [ - "LimitViolation(subject_id='SO_NO_1', subject_name='', limit_type=CURRENT, limit=600.0, limit_name='permanent', acceptable_duration=2147483647, limit_reduction=1.0, value=1044.4966633667539, side=TWO)" + "LimitViolation(subject_id='SO_NO_1', subject_name='', limit_type=CURRENT, limit=600.0, limit_name='permanent', acceptable_duration=2147483647, limit_reduction=1.0, value=1044.4966633667477, side=TWO)" ] }, - "execution_count": 32, + "execution_count": 216, "metadata": {}, "output_type": "execute_result" } ], - "source": [ - "sa_result.operator_strategy_results['StrategyOpenSOO1_SOO1'].limit_violations[1]" - ] + "execution_count": 216 }, { "cell_type": "markdown", "metadata": {}, "source": [ "We also have some violations on SO_NO_1 but still no violation on S_SO2." - ] + ], + "id": "46c16bee67991daa" }, { "cell_type": "markdown", "metadata": {}, "source": [ "### StrategyRedispatch" - ] + ], + "id": "e4d658e0eb0acf95" }, { "cell_type": "markdown", "metadata": {}, "source": [ "Finally the StrategyRedispatch :" - ] + ], + "id": "3a79790e2cc6dff6" }, { "cell_type": "code", - "execution_count": 33, - "metadata": {}, + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-15T11:41:35.023737Z", + "start_time": "2025-09-15T11:41:35.020447Z" + } + }, + "source": "sa_result.operator_strategy_results['StrategyRedispatch']", + "id": "e32d2c03037446a0", "outputs": [ { "data": { @@ -2648,43 +841,113 @@ "OperatorStrategyResult(operator_strategy_id='StrategyRedispatch', status=CONVERGED, limit_violations=[0])" ] }, - "execution_count": 33, + "execution_count": 217, "metadata": {}, "output_type": "execute_result" } ], - "source": [ - " sa_result.operator_strategy_results['StrategyRedispatch']" - ] + "execution_count": 217 }, { "cell_type": "markdown", "metadata": {}, "source": [ "No more limit violations !" - ] + ], + "id": "8b60a6945b213cbf" }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Observe the flow on each step of the analysis" - ] + ], + "id": "b17f517a80399ebd" }, { "cell_type": "markdown", "metadata": {}, "source": [ "To have an overview on the flows on S_SO_2 you can print the whole monitored branche results : " - ] + ], + "id": "c55402d21b4e20e4" }, { "cell_type": "code", - "execution_count": 34, - "metadata": {}, + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-15T11:41:35.094560Z", + "start_time": "2025-09-15T11:41:35.080416Z" + } + }, + "source": [ + "sa_result.branch_results" + ], + "id": "118cc45a700bc16", "outputs": [ { "data": { + "text/plain": [ + " p1 q1 \\\n", + "contingency_id operator_strategy_id branch_id \n", + " SO_NO_1 54.531480 -110.016475 \n", + " S_SO_2 -133.377630 85.519336 \n", + "S_SO_1_contingency SO_NO_1 79.418783 -124.999658 \n", + " S_SO_2 -249.100890 153.754036 \n", + " StrategyOpenSS1_SS1 SO_NO_1 92.554967 -133.720643 \n", + " S_SO_2 -226.152625 136.898071 \n", + " StrategyOpenSOO1_SOO1 SO_NO_1 451.041734 -580.734940 \n", + " S_SO_2 -136.449843 11.254213 \n", + " StrategyOpenBothSwitchs SO_NO_1 451.153915 -580.693806 \n", + " S_SO_2 -125.372756 9.603396 \n", + " StrategyRedispatch SO_NO_1 59.361505 -124.265372 \n", + " S_SO_2 -185.947605 155.624093 \n", + "\n", + " i1 p2 \\\n", + "contingency_id operator_strategy_id branch_id \n", + " SO_NO_1 174.419119 -53.892618 \n", + " S_SO_2 226.042956 134.297347 \n", + "S_SO_1_contingency SO_NO_1 210.365186 -78.489460 \n", + " S_SO_2 419.257791 252.264878 \n", + " StrategyOpenSS1_SS1 SO_NO_1 231.007243 -91.434316 \n", + " S_SO_2 378.338006 228.729139 \n", + " StrategyOpenSOO1_SOO1 SO_NO_1 1044.496663 -428.131295 \n", + " S_SO_2 199.930622 137.169344 \n", + " StrategyOpenBothSwitchs SO_NO_1 1044.548275 -428.241212 \n", + " S_SO_2 183.434100 125.978421 \n", + " StrategyRedispatch SO_NO_1 195.621373 -58.557883 \n", + " S_SO_2 346.465621 188.108297 \n", + "\n", + " q2 i2 \\\n", + "contingency_id operator_strategy_id branch_id \n", + " SO_NO_1 110.107741 174.419119 \n", + " S_SO_2 -85.366050 226.042956 \n", + "S_SO_1_contingency SO_NO_1 125.132419 210.365186 \n", + " S_SO_2 -153.226705 419.257791 \n", + " StrategyOpenSS1_SS1 SO_NO_1 133.880736 231.007243 \n", + " S_SO_2 -136.468652 378.338006 \n", + " StrategyOpenSOO1_SOO1 SO_NO_1 584.007860 1044.496663 \n", + " S_SO_2 -11.134296 199.930622 \n", + " StrategyOpenBothSwitchs SO_NO_1 583.967050 1044.548275 \n", + " S_SO_2 -9.502452 183.434100 \n", + " StrategyRedispatch SO_NO_1 124.380175 195.621373 \n", + " S_SO_2 -155.263977 346.465621 \n", + "\n", + " flow_transfer \n", + "contingency_id operator_strategy_id branch_id \n", + " SO_NO_1 NaN \n", + " S_SO_2 NaN \n", + "S_SO_1_contingency SO_NO_1 NaN \n", + " S_SO_2 NaN \n", + " StrategyOpenSS1_SS1 SO_NO_1 NaN \n", + " S_SO_2 NaN \n", + " StrategyOpenSOO1_SOO1 SO_NO_1 NaN \n", + " S_SO_2 NaN \n", + " StrategyOpenBothSwitchs SO_NO_1 NaN \n", + " S_SO_2 NaN \n", + " StrategyRedispatch SO_NO_1 NaN \n", + " S_SO_2 NaN " + ], "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", + " 30\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " -30\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 20\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " -20\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 20\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " -20\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 30\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " -30\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 106\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " -100\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 30\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " -30\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 30\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " -30\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 40\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " -40\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
\n", + "
\n", + "
BUS 10_VL
\n", + "
\n", + " 402.8 kV / -0.0°
\n", + "
\n", + "
\n", + "
BUS 1_VL
\n", + "
\n", + " 73.1 kV / 12.6°
\n", + "
\n", + "
\n", + "
BUS 5_VL
\n", + "
\n", + " 68.0 kV / 0.2°
\n", + "
\n", + "
\n", + "
BUS 6_VL
\n", + "
\n", + " 402.9 kV / 0.1°
\n", + "
\n", + " 402.9 kV / 0.1°
\n", + "
\n", + " 402.9 kV / 0.1°
\n", + "
\n", + "
\n", + "
\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Load initial situation\n", + "network_file = 'data/dynaflow/PhaseShifters.iidm'\n", + "network = pn.load(network_file)\n", + "network.get_network_area_diagram()" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-26T14:44:50.397262Z", + "start_time": "2025-09-26T14:44:50.373083Z" + } + }, + "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", + "
sidetapsolved_tap_positionlow_taphigh_tapstep_countoltcregulatingregulation_moderegulation_valuetarget_deadbandregulating_bus_id
id
_BUS____5-BUS____6-1_PS13NaN12525TrueTrueCURRENT_LIMITER770.00.0_BUS____5_VL_0
_BUS____5-BUS____7-2_PS13NaN12525TrueTrueCURRENT_LIMITER770.00.0_BUS____5_VL_0
\n", + "
" + ], + "text/plain": [ + " side tap solved_tap_position low_tap high_tap \\\n", + "id \n", + "_BUS____5-BUS____6-1_PS 13 NaN 1 25 \n", + "_BUS____5-BUS____7-2_PS 13 NaN 1 25 \n", + "\n", + " step_count oltc regulating regulation_mode \\\n", + "id \n", + "_BUS____5-BUS____6-1_PS 25 True True CURRENT_LIMITER \n", + "_BUS____5-BUS____7-2_PS 25 True True CURRENT_LIMITER \n", + "\n", + " regulation_value target_deadband regulating_bus_id \n", + "id \n", + "_BUS____5-BUS____6-1_PS 770.0 0.0 _BUS____5_VL_0 \n", + "_BUS____5-BUS____7-2_PS 770.0 0.0 _BUS____5_VL_0 " + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Initial tap positions\n", + "network.get_phase_tap_changers()" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-26T14:44:52.276724Z", + "start_time": "2025-09-26T14:44:50.497441Z" + } + }, + "outputs": [], + "source": [ + "# 1st Dynaflow simulation: identical time constants (defined in file \"setting-1.xml\")\n", + "p = lf.Parameters(provider_parameters={'svcRegulationOn' : 'true',\n", + " 'shuntRegulationOn' : 'true',\n", + " 'automaticSlackBusOn' : 'true',\n", + " 'dsoVoltageLevel' : '63.0',\n", + " 'activePowerCompensation' : 'P',\n", + " 'settingPath' : os.getcwd() + '/data/dynaflow/setting-1.xml',\n", + " 'assemblingPath' : os.getcwd() + '/data/dynaflow/assembling.xml',\n", + " 'stopTime' : '300',\n", + " 'chosenOutputs' : 'STEADYSTATE, LOSTEQ, TIMELINE, CONSTRAINTS',\n", + " 'timeStep' : '2.6'})\n", + "lf.run_ac(network, parameters=p, provider='DynaFlow')\n", + "network1 = network" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-26T14:44:52.425033Z", + "start_time": "2025-09-26T14:44:52.411767Z" + } + }, + "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", + "
sidetapsolved_tap_positionlow_taphigh_tapstep_countoltcregulatingregulation_moderegulation_valuetarget_deadbandregulating_bus_id
id
_BUS____5-BUS____6-1_PS131812525TrueTrueCURRENT_LIMITER770.00.0_BUS____5_VL_0
_BUS____5-BUS____7-2_PS131812525TrueTrueCURRENT_LIMITER770.00.0_BUS____5_VL_0
\n", + "
" + ], + "text/plain": [ + " side tap solved_tap_position low_tap high_tap \\\n", + "id \n", + "_BUS____5-BUS____6-1_PS 13 18 1 25 \n", + "_BUS____5-BUS____7-2_PS 13 18 1 25 \n", + "\n", + " step_count oltc regulating regulation_mode \\\n", + "id \n", + "_BUS____5-BUS____6-1_PS 25 True True CURRENT_LIMITER \n", + "_BUS____5-BUS____7-2_PS 25 True True CURRENT_LIMITER \n", + "\n", + " regulation_value target_deadband regulating_bus_id \n", + "id \n", + "_BUS____5-BUS____6-1_PS 770.0 0.0 _BUS____5_VL_0 \n", + "_BUS____5-BUS____7-2_PS 770.0 0.0 _BUS____5_VL_0 " + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Final tap positions after N-1 simulation with identical time constants\n", + "network1.get_phase_tap_changers()" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-26T14:44:54.313691Z", + "start_time": "2025-09-26T14:44:52.580837Z" + } + }, + "outputs": [], + "source": [ + "# 2nd Dynaflow simulation: different time constants (defined in file \"setting-2.xml\")\n", + "network = pn.load(network_file)\n", + "p = lf.Parameters(provider_parameters={'svcRegulationOn' : 'true',\n", + " 'shuntRegulationOn' : 'true',\n", + " 'automaticSlackBusOn' : 'true',\n", + " 'dsoVoltageLevel' : '63.0',\n", + " 'activePowerCompensation' : 'P',\n", + " 'settingPath' : os.getcwd() + '/data/dynaflow//setting-2.xml',\n", + " 'assemblingPath' : os.getcwd() + '/data/dynaflow/assembling.xml',\n", + " 'stopTime' : '300',\n", + " 'chosenOutputs' : 'STEADYSTATE, LOSTEQ, TIMELINE, CONSTRAINTS',\n", + " 'timeStep' : '2.6'})\n", + "lf.run_ac(network, parameters=p, provider='DynaFlow')\n", + "network2 = network" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-26T14:44:54.455940Z", + "start_time": "2025-09-26T14:44:54.440486Z" + } + }, + "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", + "
sidetapsolved_tap_positionlow_taphigh_tapstep_countoltcregulatingregulation_moderegulation_valuetarget_deadbandregulating_bus_id
id
_BUS____5-BUS____6-1_PS131812525TrueTrueCURRENT_LIMITER770.00.0_BUS____5_VL_0
_BUS____5-BUS____7-2_PS131712525TrueTrueCURRENT_LIMITER770.00.0_BUS____5_VL_0
\n", + "
" + ], + "text/plain": [ + " side tap solved_tap_position low_tap high_tap \\\n", + "id \n", + "_BUS____5-BUS____6-1_PS 13 18 1 25 \n", + "_BUS____5-BUS____7-2_PS 13 17 1 25 \n", + "\n", + " step_count oltc regulating regulation_mode \\\n", + "id \n", + "_BUS____5-BUS____6-1_PS 25 True True CURRENT_LIMITER \n", + "_BUS____5-BUS____7-2_PS 25 True True CURRENT_LIMITER \n", + "\n", + " regulation_value target_deadband regulating_bus_id \n", + "id \n", + "_BUS____5-BUS____6-1_PS 770.0 0.0 _BUS____5_VL_0 \n", + "_BUS____5-BUS____7-2_PS 770.0 0.0 _BUS____5_VL_0 " + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Final tap positions after N-1 simulation with different time constants\n", + "network2.get_phase_tap_changers()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-26T14:44:54.575758Z", + "start_time": "2025-09-26T14:44:54.564035Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Transits in transformers with identical time constants:\n" + ] + }, + { + "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", + "
i1i2
id
_BUS____5-BUS____6-1_PS233.95231939.468929
_BUS____5-BUS____7-2_PS233.95231939.468929
_BUS____5-BUS____8-1_PT383.85538964.758329
\n", + "
" + ], + "text/plain": [ + " i1 i2\n", + "id \n", + "_BUS____5-BUS____6-1_PS 233.952319 39.468929\n", + "_BUS____5-BUS____7-2_PS 233.952319 39.468929\n", + "_BUS____5-BUS____8-1_PT 383.855389 64.758329" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "print('Transits in transformers with identical time constants:')\n", + "network1.get_2_windings_transformers()[['i1','i2']]" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-26T14:44:54.831940Z", + "start_time": "2025-09-26T14:44:54.813348Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Transits in transformers with different time constants:\n" + ] + }, + { + "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", + "
i1i2
id
_BUS____5-BUS____6-1_PS223.95950837.783092
_BUS____5-BUS____7-2_PS253.93470442.840058
_BUS____5-BUS____8-1_PT373.86051663.072144
\n", + "
" + ], + "text/plain": [ + " i1 i2\n", + "id \n", + "_BUS____5-BUS____6-1_PS 223.959508 37.783092\n", + "_BUS____5-BUS____7-2_PS 253.934704 42.840058\n", + "_BUS____5-BUS____8-1_PT 373.860516 63.072144" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "print('\\nTransits in transformers with different time constants:')\n", + "network2.get_2_windings_transformers()[['i1','i2']]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The currents in both phase shifters are compared in both cases. Depending on the time constants of the phase shifter, the steady-state after the event is different.\n", + "This cannot be captured by a fully static simulator, in which all the phase shifters are activated at the same time with an external loop." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.10.12" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/pypowsybl_dynawo.ipynb b/pypowsybl_dynawo.ipynb index eac9c2d..ac35f03 100644 --- a/pypowsybl_dynawo.ipynb +++ b/pypowsybl_dynawo.ipynb @@ -28,10 +28,10 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**For Windows**\n", + "##### For Windows\n", "Follow [this link](https://github.com/dynawo/dynawo?tab=readme-ov-file#installation) to install Dynawo.\n", - "**For Linux**\n", - "You can launch the following commands to download the latest distribution:" + "##### For Linux\n", + "You can launch the following cell to download the latest distribution:" ] }, { @@ -55,35 +55,21 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## 2 - Powsybl install" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "ExecuteTime": { - "end_time": "2025-09-30T13:27:41.889985Z", - "start_time": "2025-09-30T13:27:40.967241Z" - } - }, - "outputs": [], - "source": [ - "pip install pypowsybl matplotlib pypowsybl-jupyter" + "## 2 - Powsybl config" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "The `config.yml` file provided with the notebook has to be edited for some properties:\n", + "The `config.yml` file provided with the notebook has to be put in a `.itools` folder of your home folder and edited for some properties:\n", "- `dynawo/homeDir` with the Dynawo installation path\n", "- `dynawo-simulation-default-parameters` properties with the path of the provided parameters files:\n", - " - `parametersFile` with `Nordic.par`\n", - " - `network.parametersFile` with `Network.par`\n", + " - `parametersFile` with the path of `Nordic.par`\n", + " - `network.parametersFile` with the path of `Network.par`\n", " - `solver.parametersFile` with the path of `Solver.par`\n", "\n", - "For Linux users, you can run the following commands:" + "For Linux users, you can run the cell below for doing so. Note that if a config.yml file existed, it is overridden. It is thus saved beforehand in a `config_YYYYMMDD_HHMMSS.yml` file." ] }, { @@ -97,10 +83,12 @@ }, "outputs": [], "source": [ - "!mkdir /home/$USER/.itools/\n", - "!cp data/dynawo/nordic_case/config.yml /home/$USER/.itools/\n", - "!sed -i \"s|WORKING_DIR|$(pwd)|g\" /home/$USER/.itools/config.yml\n", - "!cat /home/$USER/.itools/config.yml" + "CONFIG_DIR=\"$HOME/.itools\"\n", + "!mkdir \"$CONFIG_DIR\"\n", + "![ -e \"$CONFIG_DIR/config.yml\" ] && mv \"$CONFIG_DIR/config.yml\" \"$CONFIG_DIR/config_$(date +%Y%m%d_%H%M%S).yml\"\n", + "!cp data/dynawo/nordic_case/config.yml \"$CONFIG_DIR/config.yml\"\n", + "!sed -i \"s|WORKING_DIR|$(pwd)|g\" \"$CONFIG_DIR/config.yml\"\n", + "!cat \"$CONFIG_DIR/config.yml\"" ] }, { @@ -112,7 +100,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 3, "metadata": { "ExecuteTime": { "end_time": "2025-09-30T13:27:42.963054Z", @@ -140,7 +128,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 4, "metadata": { "ExecuteTime": { "end_time": "2025-09-30T13:27:43.165839Z", @@ -151,7 +139,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "522976f69fff459e86b12783f9d2d41e", + "model_id": "33d2d81e7fb241bea2cdabd3316327c0", "version_major": 2, "version_minor": 1 }, @@ -159,7 +147,7 @@ "NadWidget(diagram_data={'svg_data': '\\n\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " -48\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 48\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " -48\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 48\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " -96\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 96\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " -96\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 96\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " -96\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 96\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 48\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " -48\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 48\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " -48\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 96\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " -96\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 96\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " -96\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 144\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " -144\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 144\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " -144\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 0\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 0\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 0\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 0\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " -144\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 144\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " -144\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 144\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
\n", + "
\n", + "
NE_poste
\n", + "
\n", + " 380.0 kV / -0.0°
\n", + "
\n", + "
\n", + "
NO_poste
\n", + "
\n", + " 380.0 kV / 0.0°
\n", + "
\n", + "
\n", + "
N_poste
\n", + "
\n", + " 380.0 kV / -0.0°
\n", + "
\n", + "
\n", + "
SE_poste
\n", + "
\n", + " 380.0 kV / -0.1°
\n", + "
\n", + "
\n", + "
SO_poste
\n", + "
\n", + " 380.0 kV / 0.0°
\n", + "
\n", + "
\n", + "
S_poste
\n", + "
\n", + " 380.0 kV / -0.0°
\n", + "
\n", + "
\n", + "
\n", + "
\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "n6.get_network_area_diagram()" ] }, { "cell_type": "markdown", + "id": "976c877bc72a9dec", "metadata": {}, "source": [ "If we wish to get a more detailed view of the network, featuring each component (busbars, switches, generators, loads etc.), we can display a single-line diagram.\n", @@ -116,15 +745,693 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 4, + "id": "9ff44765df054dd3", + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-15T11:22:13.345067Z", + "start_time": "2025-09-15T11:22:13.314887Z" + } + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " SO_poste\n", + " \n", + " \n", + " \n", + " SOO1_1\n", + " \n", + " \n", + " \n", + " SOO1_mnv\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " -480\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " SO_G1\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 96\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " SO_NO_1\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 96\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " SO_NO_2\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 0\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " AC / DC - VSC\n", + " HVDC1\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 0\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " AC / DC - VSC\n", + " HVDC2\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 144\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " S_SO_1\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 144\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " S_SO_2\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 480\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " SO_L\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " -480\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " SO_G2\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "n6.get_single_line_diagram('SO')" ] }, { "cell_type": "markdown", + "id": "8cfc8a5e6f031e8f", "metadata": {}, "source": [ "We can display node info:" @@ -132,15 +1439,111 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 5, + "id": "1fd05d36b15c34da", + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-15T11:22:13.408706Z", + "start_time": "2025-09-15T11:22:13.396557Z" + } + }, + "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", + "
nameTSOgeo_tagscountry
id
NO
S
SO
SE
N
\n", + "
" + ], + "text/plain": [ + " name TSO geo_tags country\n", + "id \n", + "NO \n", + "S \n", + "SO \n", + "SE \n", + "N " + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "n6.get_substations()" ] }, { "cell_type": "markdown", + "id": "41857cb818f4713a", "metadata": {}, "source": [ "Generator info:" @@ -148,15 +1551,214 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 6, + "id": "75dfe70c4e70fb31", + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-15T11:22:13.526861Z", + "start_time": "2025-09-15T11:22:13.517176Z" + } + }, + "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", + "
nameenergy_sourcetarget_pmin_pmax_pmin_qmax_qrated_sreactive_limits_kindtarget_vtarget_qvoltage_regulator_onregulated_element_idpqivoltage_level_idbus_idconnected
id
SO_G1THERMAL480.00.02000.0NaNNaNNaNCURVE406.4500432.35231TrueSO_G1-480.0NaNNaNSO_posteSO_poste_0True
SO_G2THERMAL480.00.02000.0NaNNaNNaNCURVE406.4500432.35231TrueSO_G2-480.0NaNNaNSO_posteSO_poste_0True
SE_GTHERMAL100.00.0600.0NaNNaNNaNCURVE406.4500436.45498TrueSE_G-0.0NaNNaNSE_posteSE_poste_0True
N_GTHERMAL0.00.0600.0NaNNaNNaNCURVE406.4500437.48158TrueN_G-0.0NaNNaNN_posteN_poste_0True
\n", + "
" + ], + "text/plain": [ + " name energy_source target_p min_p max_p min_q max_q rated_s \\\n", + "id \n", + "SO_G1 THERMAL 480.0 0.0 2000.0 NaN NaN NaN \n", + "SO_G2 THERMAL 480.0 0.0 2000.0 NaN NaN NaN \n", + "SE_G THERMAL 100.0 0.0 600.0 NaN NaN NaN \n", + "N_G THERMAL 0.0 0.0 600.0 NaN NaN NaN \n", + "\n", + " reactive_limits_kind target_v target_q voltage_regulator_on \\\n", + "id \n", + "SO_G1 CURVE 406.450043 2.35231 True \n", + "SO_G2 CURVE 406.450043 2.35231 True \n", + "SE_G CURVE 406.450043 6.45498 True \n", + "N_G CURVE 406.450043 7.48158 True \n", + "\n", + " regulated_element_id p q i voltage_level_id bus_id \\\n", + "id \n", + "SO_G1 SO_G1 -480.0 NaN NaN SO_poste SO_poste_0 \n", + "SO_G2 SO_G2 -480.0 NaN NaN SO_poste SO_poste_0 \n", + "SE_G SE_G -0.0 NaN NaN SE_poste SE_poste_0 \n", + "N_G N_G -0.0 NaN NaN N_poste N_poste_0 \n", + "\n", + " connected \n", + "id \n", + "SO_G1 True \n", + "SO_G2 True \n", + "SE_G True \n", + "N_G True " + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "n6.get_generators()" ] }, { "cell_type": "markdown", + "id": "ff87ac635ef03cb2", "metadata": {}, "source": [ "Load info:" @@ -164,15 +1766,131 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 7, + "id": "af7a00602276dd0b", + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-15T11:22:13.793374Z", + "start_time": "2025-09-15T11:22:13.783354Z" + } + }, + "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", + "
nametypep0q0pqivoltage_level_idbus_idconnected
id
SO_LUNDEFINED480.04.8480.0NaNNaNSO_posteSO_poste_0True
SE_L1UNDEFINED480.04.8480.0NaNNaNSE_posteSE_poste_0True
SE_L2UNDEFINED0.04.80.0NaNNaNSE_posteSE_poste_0True
\n", + "
" + ], + "text/plain": [ + " name type p0 q0 p q i voltage_level_id bus_id \\\n", + "id \n", + "SO_L UNDEFINED 480.0 4.8 480.0 NaN NaN SO_poste SO_poste_0 \n", + "SE_L1 UNDEFINED 480.0 4.8 480.0 NaN NaN SE_poste SE_poste_0 \n", + "SE_L2 UNDEFINED 0.0 4.8 0.0 NaN NaN SE_poste SE_poste_0 \n", + "\n", + " connected \n", + "id \n", + "SO_L True \n", + "SE_L1 True \n", + "SE_L2 True " + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "n6.get_loads()" ] }, { "cell_type": "markdown", + "id": "9db506679810e4f2", "metadata": {}, "source": [ "## 2- Production and demand trends" @@ -180,6 +1898,7 @@ }, { "cell_type": "markdown", + "id": "2c7e82feeffa7aff", "metadata": {}, "source": [ "Let's consider that production and demand evolve over 3 hourly time steps:\n", @@ -198,6 +1917,7 @@ } }, "cell_type": "markdown", + "id": "73d6cfe12faa745c", "metadata": {}, "source": [ "![network_with_production_consumption.png](attachment:network_with_production_consumption.png)" @@ -205,6 +1925,7 @@ }, { "cell_type": "markdown", + "id": "1d04eaed58b9822", "metadata": {}, "source": [ "Let's take a look at the first time step and change the production accordingly:" @@ -212,8 +1933,14 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, + "execution_count": 8, + "id": "e50154dec7ae82fe", + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-15T11:22:13.937910Z", + "start_time": "2025-09-15T11:22:13.928878Z" + } + }, "outputs": [], "source": [ "n6.update_generators(id='SO_G1', target_p=0)\n", @@ -223,15 +1950,214 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 9, + "id": "34347961db166e60", + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-15T11:22:14.078721Z", + "start_time": "2025-09-15T11:22:14.058678Z" + } + }, + "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", + "
nameenergy_sourcetarget_pmin_pmax_pmin_qmax_qrated_sreactive_limits_kindtarget_vtarget_qvoltage_regulator_onregulated_element_idpqivoltage_level_idbus_idconnected
id
SO_G1THERMAL0.00.02000.0NaNNaNNaNCURVE406.4500432.35231TrueSO_G1-480.0NaNNaNSO_posteSO_poste_0True
SO_G2THERMAL960.00.02000.0NaNNaNNaNCURVE406.4500432.35231TrueSO_G2-480.0NaNNaNSO_posteSO_poste_0True
SE_GTHERMAL0.00.0600.0NaNNaNNaNCURVE406.4500436.45498TrueSE_G-0.0NaNNaNSE_posteSE_poste_0True
N_GTHERMAL0.00.0600.0NaNNaNNaNCURVE406.4500437.48158TrueN_G-0.0NaNNaNN_posteN_poste_0True
\n", + "
" + ], + "text/plain": [ + " name energy_source target_p min_p max_p min_q max_q rated_s \\\n", + "id \n", + "SO_G1 THERMAL 0.0 0.0 2000.0 NaN NaN NaN \n", + "SO_G2 THERMAL 960.0 0.0 2000.0 NaN NaN NaN \n", + "SE_G THERMAL 0.0 0.0 600.0 NaN NaN NaN \n", + "N_G THERMAL 0.0 0.0 600.0 NaN NaN NaN \n", + "\n", + " reactive_limits_kind target_v target_q voltage_regulator_on \\\n", + "id \n", + "SO_G1 CURVE 406.450043 2.35231 True \n", + "SO_G2 CURVE 406.450043 2.35231 True \n", + "SE_G CURVE 406.450043 6.45498 True \n", + "N_G CURVE 406.450043 7.48158 True \n", + "\n", + " regulated_element_id p q i voltage_level_id bus_id \\\n", + "id \n", + "SO_G1 SO_G1 -480.0 NaN NaN SO_poste SO_poste_0 \n", + "SO_G2 SO_G2 -480.0 NaN NaN SO_poste SO_poste_0 \n", + "SE_G SE_G -0.0 NaN NaN SE_poste SE_poste_0 \n", + "N_G N_G -0.0 NaN NaN N_poste N_poste_0 \n", + "\n", + " connected \n", + "id \n", + "SO_G1 True \n", + "SO_G2 True \n", + "SE_G True \n", + "N_G True " + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "n6.get_generators()" ] }, { "cell_type": "markdown", + "id": "da69f512282cb82f", "metadata": {}, "source": [ "Then, we modify the active power loads and display the data:" @@ -239,8 +2165,14 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, + "execution_count": 10, + "id": "530a52aa06c07bf2", + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-15T11:22:14.180683Z", + "start_time": "2025-09-15T11:22:14.173675Z" + } + }, "outputs": [], "source": [ "n6.update_loads(id='SO_L', p0=0)\n", @@ -250,15 +2182,131 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 11, + "id": "905f4a54587ff216", + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-15T11:22:14.313732Z", + "start_time": "2025-09-15T11:22:14.306258Z" + } + }, + "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", + "
nametypep0q0pqivoltage_level_idbus_idconnected
id
SO_LUNDEFINED0.04.8480.0NaNNaNSO_posteSO_poste_0True
SE_L1UNDEFINED960.04.8480.0NaNNaNSE_posteSE_poste_0True
SE_L2UNDEFINED0.04.80.0NaNNaNSE_posteSE_poste_0True
\n", + "
" + ], + "text/plain": [ + " name type p0 q0 p q i voltage_level_id bus_id \\\n", + "id \n", + "SO_L UNDEFINED 0.0 4.8 480.0 NaN NaN SO_poste SO_poste_0 \n", + "SE_L1 UNDEFINED 960.0 4.8 480.0 NaN NaN SE_poste SE_poste_0 \n", + "SE_L2 UNDEFINED 0.0 4.8 0.0 NaN NaN SE_poste SE_poste_0 \n", + "\n", + " connected \n", + "id \n", + "SO_L True \n", + "SE_L1 True \n", + "SE_L2 True " + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "n6.get_loads()" ] }, { "cell_type": "markdown", + "id": "e5f1353aa46f7278", "metadata": {}, "source": [ "## 3 - Load flow computation" @@ -266,6 +2314,7 @@ }, { "cell_type": "markdown", + "id": "5ccd08c5ee24e305", "metadata": {}, "source": [ "Let's run a load flow in order to analyze the base case. It is an analysis that calculates the magnitude and angle of the voltage as well as the power flow on each electrical bus of a network. \n", @@ -275,8 +2324,14 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, + "execution_count": 12, + "id": "cde46e9261cff514", + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-15T11:22:14.437122Z", + "start_time": "2025-09-15T11:22:14.421916Z" + } + }, "outputs": [], "source": [ "results = pp.loadflow.run_dc(n6)" @@ -284,33 +2339,1058 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 13, + "id": "2482abffc8524317", + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-15T11:22:14.593280Z", + "start_time": "2025-09-15T11:22:14.589803Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[ComponentResult(connected_component_num=0, synchronous_component_num=0, status=CONVERGED, status_text=Converged, iteration_count=0, reference_bus_id='NE_poste_0', slack_bus_results=[SlackBusResult(id='NE_poste_0', active_power_mismatch=-0.0)], distributed_active_power=-0.0)]" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "results" ] }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 14, + "id": "771062589ab2a89a", + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-15T11:22:14.655788Z", + "start_time": "2025-09-15T11:22:14.643229Z" + } + }, + "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", + "
namerxg1b1g2b2p1q1i1p2q2i2voltage_level1_idvoltage_level2_idbus1_idbus2_idconnected1connected2
id
NO_N_11.01.00.00.00.00.0101.040745NaNNaN-101.040745NaNNaNNO_posteN_posteNO_poste_0N_poste_0TrueTrue
NO_N_22.01.00.00.00.00.0101.040745NaNNaN-101.040745NaNNaNNO_posteN_posteNO_poste_0N_poste_0TrueTrue
S_SE_13.01.00.00.00.00.0290.520372NaNNaN-290.520372NaNNaNS_posteSE_posteS_poste_0SE_poste_0TrueTrue
S_SE_24.01.00.00.00.00.0290.520372NaNNaN-290.520372NaNNaNS_posteSE_posteS_poste_0SE_poste_0TrueTrue
S_SO_15.01.00.00.00.00.0-290.520372NaNNaN290.520372NaNNaNS_posteSO_posteS_poste_0SO_poste_0TrueTrue
S_SO_26.01.00.00.00.00.0-290.520372NaNNaN290.520372NaNNaNS_posteSO_posteS_poste_0SO_poste_0TrueTrue
SO_NO_17.01.00.00.00.00.0189.479628NaNNaN-189.479628NaNNaNSO_posteNO_posteSO_poste_0NO_poste_0TrueTrue
SO_NO_28.01.00.00.00.00.0189.479628NaNNaN-189.479628NaNNaNSO_posteNO_posteSO_poste_0NO_poste_0TrueTrue
NE_N_19.01.00.00.00.00.0-101.040745NaNNaN101.040745NaNNaNNE_posteN_posteNE_poste_0N_poste_0TrueTrue
NE_N_210.01.00.00.00.00.0-101.040745NaNNaN101.040745NaNNaNNE_posteN_posteNE_poste_0N_poste_0TrueTrue
SE_NE_111.01.00.00.00.00.0-189.479628NaNNaN189.479628NaNNaNSE_posteNE_posteSE_poste_0NE_poste_0TrueTrue
SE_NE_212.01.00.00.00.00.0-189.479628NaNNaN189.479628NaNNaNSE_posteNE_posteSE_poste_0NE_poste_0TrueTrue
\n", + "
" + ], + "text/plain": [ + " name r x g1 b1 g2 b2 p1 q1 i1 p2 \\\n", + "id \n", + "NO_N_1 1.0 1.0 0.0 0.0 0.0 0.0 101.040745 NaN NaN -101.040745 \n", + "NO_N_2 2.0 1.0 0.0 0.0 0.0 0.0 101.040745 NaN NaN -101.040745 \n", + "S_SE_1 3.0 1.0 0.0 0.0 0.0 0.0 290.520372 NaN NaN -290.520372 \n", + "S_SE_2 4.0 1.0 0.0 0.0 0.0 0.0 290.520372 NaN NaN -290.520372 \n", + "S_SO_1 5.0 1.0 0.0 0.0 0.0 0.0 -290.520372 NaN NaN 290.520372 \n", + "S_SO_2 6.0 1.0 0.0 0.0 0.0 0.0 -290.520372 NaN NaN 290.520372 \n", + "SO_NO_1 7.0 1.0 0.0 0.0 0.0 0.0 189.479628 NaN NaN -189.479628 \n", + "SO_NO_2 8.0 1.0 0.0 0.0 0.0 0.0 189.479628 NaN NaN -189.479628 \n", + "NE_N_1 9.0 1.0 0.0 0.0 0.0 0.0 -101.040745 NaN NaN 101.040745 \n", + "NE_N_2 10.0 1.0 0.0 0.0 0.0 0.0 -101.040745 NaN NaN 101.040745 \n", + "SE_NE_1 11.0 1.0 0.0 0.0 0.0 0.0 -189.479628 NaN NaN 189.479628 \n", + "SE_NE_2 12.0 1.0 0.0 0.0 0.0 0.0 -189.479628 NaN NaN 189.479628 \n", + "\n", + " q2 i2 voltage_level1_id voltage_level2_id bus1_id bus2_id \\\n", + "id \n", + "NO_N_1 NaN NaN NO_poste N_poste NO_poste_0 N_poste_0 \n", + "NO_N_2 NaN NaN NO_poste N_poste NO_poste_0 N_poste_0 \n", + "S_SE_1 NaN NaN S_poste SE_poste S_poste_0 SE_poste_0 \n", + "S_SE_2 NaN NaN S_poste SE_poste S_poste_0 SE_poste_0 \n", + "S_SO_1 NaN NaN S_poste SO_poste S_poste_0 SO_poste_0 \n", + "S_SO_2 NaN NaN S_poste SO_poste S_poste_0 SO_poste_0 \n", + "SO_NO_1 NaN NaN SO_poste NO_poste SO_poste_0 NO_poste_0 \n", + "SO_NO_2 NaN NaN SO_poste NO_poste SO_poste_0 NO_poste_0 \n", + "NE_N_1 NaN NaN NE_poste N_poste NE_poste_0 N_poste_0 \n", + "NE_N_2 NaN NaN NE_poste N_poste NE_poste_0 N_poste_0 \n", + "SE_NE_1 NaN NaN SE_poste NE_poste SE_poste_0 NE_poste_0 \n", + "SE_NE_2 NaN NaN SE_poste NE_poste SE_poste_0 NE_poste_0 \n", + "\n", + " connected1 connected2 \n", + "id \n", + "NO_N_1 True True \n", + "NO_N_2 True True \n", + "S_SE_1 True True \n", + "S_SE_2 True True \n", + "S_SO_1 True True \n", + "S_SO_2 True True \n", + "SO_NO_1 True True \n", + "SO_NO_2 True True \n", + "NE_N_1 True True \n", + "NE_N_2 True True \n", + "SE_NE_1 True True \n", + "SE_NE_2 True True " + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "n6.get_lines()" ] }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 15, + "id": "d62ddd16014f7559", + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-15T11:22:14.773878Z", + "start_time": "2025-09-15T11:22:14.761108Z" + } + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " -101\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 101\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " -101\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 101\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " -189\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 189\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " -189\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 189\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " -177\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 177\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 101\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " -101\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 101\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " -101\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 189\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " -189\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 189\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " -189\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 291\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " -291\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 291\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " -291\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 0\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " -0\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 0\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " -0\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " -291\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 291\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " -291\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 291\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
\n", + "
\n", + "
NE_poste
\n", + "
\n", + " kV / 0.0°
\n", + "
\n", + "
\n", + "
NO_poste
\n", + "
\n", + " kV / 0.1°
\n", + "
\n", + "
\n", + "
N_poste
\n", + "
\n", + " kV / 0.0°
\n", + "
\n", + "
\n", + "
SE_poste
\n", + "
\n", + " kV / -0.1°
\n", + "
\n", + "
\n", + "
SO_poste
\n", + "
\n", + " kV / 0.2°
\n", + "
\n", + "
\n", + "
S_poste
\n", + "
\n", + " kV / 0.0°
\n", + "
\n", + "
\n", + "
\n", + "
\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "n6.get_network_area_diagram()" ] }, { "cell_type": "markdown", + "id": "a0039c667113c25e", "metadata": {}, "source": [ "In the base case, the generating units and the loads are both located south. The flow takes the path of least resistance so it goes mostly through the SO -> S -> SE lines. There is also flow on the PST, and to the north." @@ -323,6 +3403,7 @@ } }, "cell_type": "markdown", + "id": "16e1d7b0dc87854a", "metadata": {}, "source": [ "![network_after_LF.png](attachment:network_after_LF.png)" @@ -330,6 +3411,7 @@ }, { "cell_type": "markdown", + "id": "8321798731300c2f", "metadata": {}, "source": [ "Now, let's assume we're faced with the loss of the `S_SO_1` line. \n", @@ -341,17 +3423,40 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 16, + "id": "8839747a2e11823a", + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-15T11:22:14.895817Z", + "start_time": "2025-09-15T11:22:14.891789Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "n6.disconnect(id='S_SO_1')" ] }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, + "execution_count": 17, + "id": "887d602d87257d0d", + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-15T11:22:14.950917Z", + "start_time": "2025-09-15T11:22:14.948164Z" + } + }, "outputs": [], "source": [ "results = pp.loadflow.run_dc(n6)" @@ -359,33 +3464,1058 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 18, + "id": "b687b09fc86e5822", + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-15T11:22:15.006065Z", + "start_time": "2025-09-15T11:22:15.000333Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[ComponentResult(connected_component_num=0, synchronous_component_num=0, status=CONVERGED, status_text=Converged, iteration_count=0, reference_bus_id='NE_poste_0', slack_bus_results=[SlackBusResult(id='NE_poste_0', active_power_mismatch=-0.0)], distributed_active_power=-0.0)]" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "results" ] }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 19, + "id": "4fec5edb2e9aa8bb", + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-15T11:22:15.086945Z", + "start_time": "2025-09-15T11:22:15.064648Z" + } + }, + "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", + "
namerxg1b1g2b2p1q1i1p2q2i2voltage_level1_idvoltage_level2_idbus1_idbus2_idconnected1connected2
id
NO_N_11.01.00.00.00.00.0125.250843NaNNaN-125.250843NaNNaNNO_posteN_posteNO_poste_0N_poste_0TrueTrue
NO_N_22.01.00.00.00.00.0125.250843NaNNaN-125.250843NaNNaNNO_posteN_posteNO_poste_0N_poste_0TrueTrue
S_SE_13.01.00.00.00.00.0242.100337NaNNaN-242.100337NaNNaNS_posteSE_posteS_poste_0SE_poste_0TrueTrue
S_SE_24.01.00.00.00.00.0242.100337NaNNaN-242.100337NaNNaNS_posteSE_posteS_poste_0SE_poste_0TrueTrue
S_SO_15.01.00.00.00.00.0NaNNaNNaNNaNNaNNaNS_posteSO_posteFalseFalse
S_SO_26.01.00.00.00.00.0-484.200674NaNNaN484.200674NaNNaNS_posteSO_posteS_poste_0SO_poste_0TrueTrue
SO_NO_17.01.00.00.00.00.0237.899663NaNNaN-237.899663NaNNaNSO_posteNO_posteSO_poste_0NO_poste_0TrueTrue
SO_NO_28.01.00.00.00.00.0237.899663NaNNaN-237.899663NaNNaNSO_posteNO_posteSO_poste_0NO_poste_0TrueTrue
NE_N_19.01.00.00.00.00.0-125.250843NaNNaN125.250843NaNNaNNE_posteN_posteNE_poste_0N_poste_0TrueTrue
NE_N_210.01.00.00.00.00.0-125.250843NaNNaN125.250843NaNNaNNE_posteN_posteNE_poste_0N_poste_0TrueTrue
SE_NE_111.01.00.00.00.00.0-237.899663NaNNaN237.899663NaNNaNSE_posteNE_posteSE_poste_0NE_poste_0TrueTrue
SE_NE_212.01.00.00.00.00.0-237.899663NaNNaN237.899663NaNNaNSE_posteNE_posteSE_poste_0NE_poste_0TrueTrue
\n", + "
" + ], + "text/plain": [ + " name r x g1 b1 g2 b2 p1 q1 i1 p2 \\\n", + "id \n", + "NO_N_1 1.0 1.0 0.0 0.0 0.0 0.0 125.250843 NaN NaN -125.250843 \n", + "NO_N_2 2.0 1.0 0.0 0.0 0.0 0.0 125.250843 NaN NaN -125.250843 \n", + "S_SE_1 3.0 1.0 0.0 0.0 0.0 0.0 242.100337 NaN NaN -242.100337 \n", + "S_SE_2 4.0 1.0 0.0 0.0 0.0 0.0 242.100337 NaN NaN -242.100337 \n", + "S_SO_1 5.0 1.0 0.0 0.0 0.0 0.0 NaN NaN NaN NaN \n", + "S_SO_2 6.0 1.0 0.0 0.0 0.0 0.0 -484.200674 NaN NaN 484.200674 \n", + "SO_NO_1 7.0 1.0 0.0 0.0 0.0 0.0 237.899663 NaN NaN -237.899663 \n", + "SO_NO_2 8.0 1.0 0.0 0.0 0.0 0.0 237.899663 NaN NaN -237.899663 \n", + "NE_N_1 9.0 1.0 0.0 0.0 0.0 0.0 -125.250843 NaN NaN 125.250843 \n", + "NE_N_2 10.0 1.0 0.0 0.0 0.0 0.0 -125.250843 NaN NaN 125.250843 \n", + "SE_NE_1 11.0 1.0 0.0 0.0 0.0 0.0 -237.899663 NaN NaN 237.899663 \n", + "SE_NE_2 12.0 1.0 0.0 0.0 0.0 0.0 -237.899663 NaN NaN 237.899663 \n", + "\n", + " q2 i2 voltage_level1_id voltage_level2_id bus1_id bus2_id \\\n", + "id \n", + "NO_N_1 NaN NaN NO_poste N_poste NO_poste_0 N_poste_0 \n", + "NO_N_2 NaN NaN NO_poste N_poste NO_poste_0 N_poste_0 \n", + "S_SE_1 NaN NaN S_poste SE_poste S_poste_0 SE_poste_0 \n", + "S_SE_2 NaN NaN S_poste SE_poste S_poste_0 SE_poste_0 \n", + "S_SO_1 NaN NaN S_poste SO_poste \n", + "S_SO_2 NaN NaN S_poste SO_poste S_poste_0 SO_poste_0 \n", + "SO_NO_1 NaN NaN SO_poste NO_poste SO_poste_0 NO_poste_0 \n", + "SO_NO_2 NaN NaN SO_poste NO_poste SO_poste_0 NO_poste_0 \n", + "NE_N_1 NaN NaN NE_poste N_poste NE_poste_0 N_poste_0 \n", + "NE_N_2 NaN NaN NE_poste N_poste NE_poste_0 N_poste_0 \n", + "SE_NE_1 NaN NaN SE_poste NE_poste SE_poste_0 NE_poste_0 \n", + "SE_NE_2 NaN NaN SE_poste NE_poste SE_poste_0 NE_poste_0 \n", + "\n", + " connected1 connected2 \n", + "id \n", + "NO_N_1 True True \n", + "NO_N_2 True True \n", + "S_SE_1 True True \n", + "S_SE_2 True True \n", + "S_SO_1 False False \n", + "S_SO_2 True True \n", + "SO_NO_1 True True \n", + "SO_NO_2 True True \n", + "NE_N_1 True True \n", + "NE_N_2 True True \n", + "SE_NE_1 True True \n", + "SE_NE_2 True True " + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "n6.get_lines()" ] }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 20, + "id": "9c079651d94da643", + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-15T11:22:15.222316Z", + "start_time": "2025-09-15T11:22:15.209432Z" + } + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " -125\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 125\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " -125\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 125\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " -238\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 238\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " -238\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 238\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " -225\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 225\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 125\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " -125\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 125\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " -125\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 238\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " -238\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 238\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " -238\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 242\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " -242\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 242\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " -242\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 0\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " -0\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 0\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " -0\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " -484\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 484\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
\n", + "
\n", + "
NE_poste
\n", + "
\n", + " kV / 0.0°
\n", + "
\n", + "
\n", + "
NO_poste
\n", + "
\n", + " kV / 0.1°
\n", + "
\n", + "
\n", + "
N_poste
\n", + "
\n", + " kV / 0.0°
\n", + "
\n", + "
\n", + "
SE_poste
\n", + "
\n", + " kV / -0.1°
\n", + "
\n", + "
\n", + "
SO_poste
\n", + "
\n", + " kV / 0.2°
\n", + "
\n", + "
\n", + "
S_poste
\n", + "
\n", + " kV / 0.0°
\n", + "
\n", + "
\n", + "
\n", + "
\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "n6.get_network_area_diagram()" ] }, { "cell_type": "markdown", + "id": "dcf26afcd6dade1c", "metadata": {}, "source": [ "The 'S_SO_2' line is overloaded. The network is not secure in this N-1 case. " @@ -398,6 +4528,7 @@ } }, "cell_type": "markdown", + "id": "f46b4fe5091f8cf9", "metadata": {}, "source": [ "![network_after_LF_and_contingency.png](attachment:network_after_LF_and_contingency.png)" @@ -405,6 +4536,7 @@ }, { "cell_type": "markdown", + "id": "5e3ce92fe7d894f4", "metadata": {}, "source": [ "## 4 - Security Analysis" @@ -412,6 +4544,7 @@ }, { "cell_type": "markdown", + "id": "40ac599ae4d6c621", "metadata": {}, "source": [ "Dispatchers monitor the network in real time. Part of their work is also to anticipate N-1 cases by simulating them and planning actions to be taken if a fault actually occurs.\n", @@ -421,6 +4554,7 @@ }, { "cell_type": "markdown", + "id": "fb074222f61b0a8a", "metadata": {}, "source": [ "Before performing a security analysis, let's reconnect the `S_SO_1` line and consider the second hourly time step. " @@ -428,17 +4562,40 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 21, + "id": "b35c250cb633b16", + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-15T11:22:15.333024Z", + "start_time": "2025-09-15T11:22:15.329716Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "n6.connect(id='S_SO_1')" ] }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, + "execution_count": 22, + "id": "d2c6a65986f711ad", + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-15T11:22:15.392345Z", + "start_time": "2025-09-15T11:22:15.388790Z" + } + }, "outputs": [], "source": [ "n6.update_generators(id='SO_G1', target_p=960)\n", @@ -447,15 +4604,214 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 23, + "id": "48426775ada6b72d", + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-15T11:22:15.454276Z", + "start_time": "2025-09-15T11:22:15.444173Z" + } + }, + "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", + "
nameenergy_sourcetarget_pmin_pmax_pmin_qmax_qrated_sreactive_limits_kindtarget_vtarget_qvoltage_regulator_onregulated_element_idpqivoltage_level_idbus_idconnected
id
SO_G1THERMAL960.00.02000.0NaNNaNNaNCURVE406.4500432.35231TrueSO_G1-0.0-0.0NaNSO_posteSO_poste_0True
SO_G2THERMAL0.00.02000.0NaNNaNNaNCURVE406.4500432.35231TrueSO_G2-960.0-0.0NaNSO_posteSO_poste_0True
SE_GTHERMAL0.00.0600.0NaNNaNNaNCURVE406.4500436.45498TrueSE_G-0.0-0.0NaNSE_posteSE_poste_0True
N_GTHERMAL0.00.0600.0NaNNaNNaNCURVE406.4500437.48158TrueN_G-0.0-0.0NaNN_posteN_poste_0True
\n", + "
" + ], + "text/plain": [ + " name energy_source target_p min_p max_p min_q max_q rated_s \\\n", + "id \n", + "SO_G1 THERMAL 960.0 0.0 2000.0 NaN NaN NaN \n", + "SO_G2 THERMAL 0.0 0.0 2000.0 NaN NaN NaN \n", + "SE_G THERMAL 0.0 0.0 600.0 NaN NaN NaN \n", + "N_G THERMAL 0.0 0.0 600.0 NaN NaN NaN \n", + "\n", + " reactive_limits_kind target_v target_q voltage_regulator_on \\\n", + "id \n", + "SO_G1 CURVE 406.450043 2.35231 True \n", + "SO_G2 CURVE 406.450043 2.35231 True \n", + "SE_G CURVE 406.450043 6.45498 True \n", + "N_G CURVE 406.450043 7.48158 True \n", + "\n", + " regulated_element_id p q i voltage_level_id bus_id \\\n", + "id \n", + "SO_G1 SO_G1 -0.0 -0.0 NaN SO_poste SO_poste_0 \n", + "SO_G2 SO_G2 -960.0 -0.0 NaN SO_poste SO_poste_0 \n", + "SE_G SE_G -0.0 -0.0 NaN SE_poste SE_poste_0 \n", + "N_G N_G -0.0 -0.0 NaN N_poste N_poste_0 \n", + "\n", + " connected \n", + "id \n", + "SO_G1 True \n", + "SO_G2 True \n", + "SE_G True \n", + "N_G True " + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "n6.get_generators()" ] }, { "cell_type": "markdown", + "id": "a816f0e15042cc06", "metadata": {}, "source": [ "### 4.1 - Security analysis" @@ -463,6 +4819,7 @@ }, { "cell_type": "markdown", + "id": "dcf40779f5d1a88", "metadata": {}, "source": [ "In order to perform a security analysis, you need a network and at least one contingency (i.e. one failure) on that network. \n", @@ -473,8 +4830,14 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, + "execution_count": 24, + "id": "cf2a921fb306de06", + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-15T11:22:15.589168Z", + "start_time": "2025-09-15T11:22:15.575294Z" + } + }, "outputs": [], "source": [ "security_analysis = pp.security.create_analysis()" @@ -482,8 +4845,14 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, + "execution_count": 25, + "id": "40badf1e50b6eda", + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-15T11:22:15.731265Z", + "start_time": "2025-09-15T11:22:15.726236Z" + } + }, "outputs": [], "source": [ "security_analysis.add_single_element_contingency('S_SO_1', 'First contingency')" @@ -491,8 +4860,14 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, + "execution_count": 26, + "id": "961b9b321b341c7f", + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-15T11:22:15.793608Z", + "start_time": "2025-09-15T11:22:15.786735Z" + } + }, "outputs": [], "source": [ "sa_result = security_analysis.run_dc(n6)" @@ -500,15 +4875,33 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 27, + "id": "82c3a4015f713df3", + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-15T11:22:15.840698Z", + "start_time": "2025-09-15T11:22:15.836776Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "PreContingencyResult(, status=CONVERGED, limit_violations=[0])" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "sa_result.pre_contingency_result " ] }, { "cell_type": "markdown", + "id": "2b5d52d85d210c5a", "metadata": {}, "source": [ "There is no pre-contingency violations because the base case is secured." @@ -516,33 +4909,268 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 28, + "id": "8a67cb9015010f5e", + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-15T11:22:15.911198Z", + "start_time": "2025-09-15T11:22:15.903195Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{'First contingency': PostContingencyResult(contingency_id='First contingency', status=CONVERGED, limit_violations=[2])}" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "sa_result.post_contingency_results" ] }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 29, + "id": "600bbc9793749cf2", + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-15T11:22:15.977017Z", + "start_time": "2025-09-15T11:22:15.962800Z" + } + }, + "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", + "
subject_namelimit_typelimit_namelimitacceptable_durationlimit_reductionvalueside
contingency_idsubject_id
First contingencyS_SO_2CURRENT10'600.00000011.0735.666815ONE
S_SO_2CURRENTpermanent500.00006121474836471.0735.666815TWO
\n", + "
" + ], + "text/plain": [ + " subject_name limit_type limit_name limit \\\n", + "contingency_id subject_id \n", + "First contingency S_SO_2 CURRENT 10' 600.000000 \n", + " S_SO_2 CURRENT permanent 500.000061 \n", + "\n", + " acceptable_duration limit_reduction \\\n", + "contingency_id subject_id \n", + "First contingency S_SO_2 1 1.0 \n", + " S_SO_2 2147483647 1.0 \n", + "\n", + " value side \n", + "contingency_id subject_id \n", + "First contingency S_SO_2 735.666815 ONE \n", + " S_SO_2 735.666815 TWO " + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "sa_result.limit_violations" ] }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 30, + "id": "b9848f10ec538e11", + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-15T11:22:16.156443Z", + "start_time": "2025-09-15T11:22:16.143655Z" + } + }, + "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", + "
element_typesidenametypevalueacceptable_duration
element_id
S_SO_2LINEONEpermanent_limitCURRENT5.000001e+02-1
S_SO_2LINEONE20'CURRENT5.500000e+021200
S_SO_2LINEONE10'CURRENT6.000000e+02600
S_SO_2LINEONE1'CURRENT1.797693e+3081
S_SO_2LINETWOpermanent_limitCURRENT5.000001e+02-1
\n", + "
" + ], + "text/plain": [ + " element_type side name type value \\\n", + "element_id \n", + "S_SO_2 LINE ONE permanent_limit CURRENT 5.000001e+02 \n", + "S_SO_2 LINE ONE 20' CURRENT 5.500000e+02 \n", + "S_SO_2 LINE ONE 10' CURRENT 6.000000e+02 \n", + "S_SO_2 LINE ONE 1' CURRENT 1.797693e+308 \n", + "S_SO_2 LINE TWO permanent_limit CURRENT 5.000001e+02 \n", + "\n", + " acceptable_duration \n", + "element_id \n", + "S_SO_2 -1 \n", + "S_SO_2 1200 \n", + "S_SO_2 600 \n", + "S_SO_2 1 \n", + "S_SO_2 -1 " + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "n6.get_operational_limits().loc['S_SO_2']" ] }, { "cell_type": "markdown", + "id": "55134651f3de087d", "metadata": {}, "source": [ "The contingency on the `S_SO_1` line leads to an overload on the `S_SO_2` line. " @@ -550,6 +5178,7 @@ }, { "cell_type": "markdown", + "id": "c9647c9edf9766e4", "metadata": {}, "source": [ "### 4.2 - Adding monitored Elements" @@ -557,6 +5186,7 @@ }, { "cell_type": "markdown", + "id": "b9066238d78747bb", "metadata": {}, "source": [ "This feature is used to obtain information on various elements of the network after the load flow computations. Information can be obtained on buses, branches and three-winding transformers." @@ -564,8 +5194,14 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, + "execution_count": 31, + "id": "56f48e1bd29678e7", + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-15T11:22:16.435404Z", + "start_time": "2025-09-15T11:22:16.433220Z" + } + }, "outputs": [], "source": [ "sa = pp.security.create_analysis()" @@ -573,8 +5209,14 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, + "execution_count": 32, + "id": "4771237c2a11a8b5", + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-15T11:22:16.488579Z", + "start_time": "2025-09-15T11:22:16.485453Z" + } + }, "outputs": [], "source": [ "# S_SO_1: one of the two lines connecting the S and SO substations\n", @@ -583,8 +5225,14 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, + "execution_count": 33, + "id": "3947611197e07605", + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-15T11:22:16.546255Z", + "start_time": "2025-09-15T11:22:16.542619Z" + } + }, "outputs": [], "source": [ "# S_SO_1 and S_SO_2: lines connecting the S and SO substations\n", @@ -594,8 +5242,14 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, + "execution_count": 34, + "id": "4e50ec5da6d95fa6", + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-15T11:22:16.613735Z", + "start_time": "2025-09-15T11:22:16.604337Z" + } + }, "outputs": [], "source": [ "sa_result = sa.run_dc(n6)" @@ -603,24 +5257,291 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 35, + "id": "7aadb52dc5e8e1ee", + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-15T11:22:16.663701Z", + "start_time": "2025-09-15T11:22:16.656342Z" + } + }, + "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", + "
subject_namelimit_typelimit_namelimitacceptable_durationlimit_reductionvalueside
contingency_idsubject_id
S_SO_1S_SO_2CURRENT10'600.00000011.0735.666815ONE
S_SO_2CURRENTpermanent500.00006121474836471.0735.666815TWO
\n", + "
" + ], + "text/plain": [ + " subject_name limit_type limit_name limit \\\n", + "contingency_id subject_id \n", + "S_SO_1 S_SO_2 CURRENT 10' 600.000000 \n", + " S_SO_2 CURRENT permanent 500.000061 \n", + "\n", + " acceptable_duration limit_reduction value \\\n", + "contingency_id subject_id \n", + "S_SO_1 S_SO_2 1 1.0 735.666815 \n", + " S_SO_2 2147483647 1.0 735.666815 \n", + "\n", + " side \n", + "contingency_id subject_id \n", + "S_SO_1 S_SO_2 ONE \n", + " S_SO_2 TWO " + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "sa_result.limit_violations" ] }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 36, + "id": "be31440bd5313916", + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-15T11:22:16.828830Z", + "start_time": "2025-09-15T11:22:16.814860Z" + } + }, + "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", + "
p1q1i1p2q2i2flow_transfer
contingency_idoperator_strategy_idbranch_id
SO_NO_2189.479628NaN287.884510-189.479628NaN287.884510NaN
SO_NO_1189.479628NaN287.884510-189.479628NaN287.884510NaN
S_SO_2-290.520372NaN441.400040290.520372NaN441.400040NaN
S_SO_1-290.520372NaN441.400040290.520372NaN441.400040NaN
S_SO_1SO_NO_1237.899663NaN361.451143-237.899663NaN361.451143-0.166667
SO_NO_2237.899663NaN361.451143-237.899663NaN361.451143-0.166667
S_SO_2-484.200674NaN735.666815484.200674NaN735.6668150.666667
\n", + "
" + ], + "text/plain": [ + " p1 q1 i1 \\\n", + "contingency_id operator_strategy_id branch_id \n", + " SO_NO_2 189.479628 NaN 287.884510 \n", + " SO_NO_1 189.479628 NaN 287.884510 \n", + " S_SO_2 -290.520372 NaN 441.400040 \n", + " S_SO_1 -290.520372 NaN 441.400040 \n", + "S_SO_1 SO_NO_1 237.899663 NaN 361.451143 \n", + " SO_NO_2 237.899663 NaN 361.451143 \n", + " S_SO_2 -484.200674 NaN 735.666815 \n", + "\n", + " p2 q2 i2 \\\n", + "contingency_id operator_strategy_id branch_id \n", + " SO_NO_2 -189.479628 NaN 287.884510 \n", + " SO_NO_1 -189.479628 NaN 287.884510 \n", + " S_SO_2 290.520372 NaN 441.400040 \n", + " S_SO_1 290.520372 NaN 441.400040 \n", + "S_SO_1 SO_NO_1 -237.899663 NaN 361.451143 \n", + " SO_NO_2 -237.899663 NaN 361.451143 \n", + " S_SO_2 484.200674 NaN 735.666815 \n", + "\n", + " flow_transfer \n", + "contingency_id operator_strategy_id branch_id \n", + " SO_NO_2 NaN \n", + " SO_NO_1 NaN \n", + " S_SO_2 NaN \n", + " S_SO_1 NaN \n", + "S_SO_1 SO_NO_1 -0.166667 \n", + " SO_NO_2 -0.166667 \n", + " S_SO_2 0.666667 " + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "sa_result.branch_results" ] }, { "cell_type": "markdown", + "id": "257508905ef1da30", "metadata": {}, "source": [ "After the contingency of the line `S_SO_1`, 2/3 of the flow goes to the branch `S_SO_2`, 1/6 to the branch `SO_NO_1` and 1/6 to the branch `SO_NO_2`. \n", @@ -642,6 +5563,7 @@ } }, "cell_type": "markdown", + "id": "e1cb4367cc521317", "metadata": {}, "source": [ "![Curative_remedial_actions-2.png](attachment:Curative_remedial_actions-2.png)" @@ -649,6 +5571,7 @@ }, { "cell_type": "markdown", + "id": "e60c43838d3763d5", "metadata": {}, "source": [ "## 5 - Sensitivity Analysis" @@ -656,6 +5579,7 @@ }, { "cell_type": "markdown", + "id": "3b6199a58318ab01", "metadata": {}, "source": [ "In case of an increase in electricity demand, the national dispatching center has several production adjustment possibilities.\n", @@ -669,6 +5593,7 @@ }, { "cell_type": "markdown", + "id": "caa50430f9e31a12", "metadata": {}, "source": [ "### 5.1 - Increase the production of a generator" @@ -684,6 +5609,7 @@ }, { "cell_type": "markdown", + "id": "7cda9597f32feb3a", "metadata": { "tags": [] }, @@ -701,6 +5627,7 @@ }, { "cell_type": "markdown", + "id": "8433c289bb3521e7", "metadata": {}, "source": [ "`pypowsybl` provides a method to define the variables (injection, phase shifter) through their ids (variables_ids) and the functions through the branch ids (branches_ids). \n", @@ -710,8 +5637,14 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, + "execution_count": 37, + "id": "8743adf1b4906e28", + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-15T11:22:17.100576Z", + "start_time": "2025-09-15T11:22:17.093193Z" + } + }, "outputs": [], "source": [ "# SE_G = generator in the SE voltage level\n", @@ -724,15 +5657,67 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 38, + "id": "da9eb5bf75ae6fd4", + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-15T11:22:17.151741Z", + "start_time": "2025-09-15T11:22:17.146585Z" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
S_SO_1S_SO_2
SE_G0.30.3
\n", + "
" + ], + "text/plain": [ + " S_SO_1 S_SO_2\n", + "SE_G 0.3 0.3" + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "result.get_sensitivity_matrix()" ] }, { "cell_type": "markdown", + "id": "8c4e317c0ef401d2", "metadata": {}, "source": [ "An increase of 1 MW on generator SE_G impacts the lines S_SO_1 and S_SO_2 with a 0.3 MW increase of the active power flow from side 1 to side 2.\n" @@ -740,6 +5725,7 @@ }, { "cell_type": "markdown", + "id": "d7b5578334157a65", "metadata": {}, "source": [ "### 5.2 - Transfer electricity production from one zone to another" @@ -747,6 +5733,7 @@ }, { "cell_type": "markdown", + "id": "5e295b676f25c865", "metadata": {}, "source": [ "Now let's imagine that we will transfer the electricity production from one country to another.\n", @@ -759,7 +5746,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -773,7 +5760,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.10" + "version": "3.10.12" } }, "nbformat": 4, diff --git a/requirements.in b/requirements.in new file mode 100644 index 0000000..b823e7f --- /dev/null +++ b/requirements.in @@ -0,0 +1,5 @@ +pypowsybl==1.12.0 +pypowsybl-jupyter==1.2.1 +matplotlib==3.10.6 +plotly==6.3.0 +pycountry==24.6.1 \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index b422c2f..b4f9e9a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,111 @@ -# needed by pypowsybl-jupyter, for Binder -anywidget - +# +# This file is autogenerated by pip-compile with Python 3.10 +# by the following command: +# +# pip-compile requirements.in +# +anywidget==0.9.18 + # via pypowsybl-jupyter +asttokens==3.0.0 + # via stack-data +comm==0.2.3 + # via ipywidgets +contourpy==1.3.2 + # via matplotlib +cycler==0.12.1 + # via matplotlib +decorator==5.2.1 + # via ipython +exceptiongroup==1.3.0 + # via ipython +executing==2.2.1 + # via stack-data +fonttools==4.60.1 + # via matplotlib +ipython==8.37.0 + # via ipywidgets +ipywidgets==8.1.7 + # via anywidget +jedi==0.19.2 + # via ipython +jupyterlab-widgets==3.0.15 + # via ipywidgets +kiwisolver==1.4.9 + # via matplotlib +matplotlib==3.10.6 + # via -r requirements.in +matplotlib-inline==0.1.7 + # via ipython +narwhals==2.5.0 + # via plotly +networkx==3.4.2 + # via pypowsybl +numpy==2.2.6 + # via + # contourpy + # matplotlib + # pandas +packaging==25.0 + # via + # matplotlib + # plotly +pandas==2.3.2 + # via pypowsybl +parso==0.8.5 + # via jedi +pexpect==4.9.0 + # via ipython +pillow==11.3.0 + # via matplotlib +plotly==6.3.0 + # via -r requirements.in +prettytable==3.16.0 + # via pypowsybl +prompt-toolkit==3.0.52 + # via ipython +psygnal==0.14.1 + # via anywidget +ptyprocess==0.7.0 + # via pexpect +pure-eval==0.2.3 + # via stack-data +pycountry==24.6.1 + # via -r requirements.in +pygments==2.19.2 + # via ipython +pyparsing==3.2.5 + # via matplotlib +pypowsybl==1.12.0 + # via + # -r requirements.in + # pypowsybl-jupyter +pypowsybl-jupyter==1.2.1 + # via -r requirements.in +python-dateutil==2.9.0.post0 + # via + # matplotlib + # pandas +pytz==2025.2 + # via pandas +six==1.17.0 + # via python-dateutil +stack-data==0.6.3 + # via ipython +traitlets==5.14.3 + # via + # ipython + # ipywidgets + # matplotlib-inline +typing-extensions==4.15.0 + # via + # anywidget + # exceptiongroup + # ipython +tzdata==2025.2 + # via pandas +wcwidth==0.2.13 + # via + # prettytable + # prompt-toolkit +widgetsnbextension==4.0.14 + # via ipywidgets diff --git a/runtime.txt b/runtime.txt index 8fdd907..5509089 100644 --- a/runtime.txt +++ b/runtime.txt @@ -1 +1 @@ -python-3.9 +python-3.10 diff --git a/sensitivity_analysis.ipynb b/sensitivity_analysis.ipynb index e0c0c64..7a4d2d6 100644 --- a/sensitivity_analysis.ipynb +++ b/sensitivity_analysis.ipynb @@ -17,26 +17,22 @@ "\n", "It is also possible to calculate Power Transfer Distribution Factors (PTDF). In this case, zones are defined and the effect of the variation of the net position of a zone on a branch between this zone and another one.\n", "\n", - "The first step is to install pypowsybl and import the library." + "The first step is to import the library." ] }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "pip install pypowsybl" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-15T11:15:52.382937Z", + "start_time": "2025-09-15T11:15:51.440528Z" + } + }, "source": [ "import pypowsybl as pp" - ] + ], + "outputs": [], + "execution_count": 1 }, { "cell_type": "markdown", @@ -47,12 +43,17 @@ }, { "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-15T11:15:52.460564Z", + "start_time": "2025-09-15T11:15:52.402886Z" + } + }, "source": [ "n6 = pp.network.create_metrix_tutorial_six_buses_network()" - ] + ], + "outputs": [], + "execution_count": 2 }, { "cell_type": "markdown", @@ -63,687 +64,29 @@ }, { "cell_type": "code", - "execution_count": 3, - "metadata": {}, + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-15T11:15:52.579225Z", + "start_time": "2025-09-15T11:15:52.518591Z" + } + }, + "source": [ + "n6.get_network_area_diagram()" + ], "outputs": [ { "data": { - "image/svg+xml": [ - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " -48\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 48\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " -48\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 48\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " -96\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 96\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " -96\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 96\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " -96\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 96\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 48\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " -48\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 48\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " -48\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 96\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " -96\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 96\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " -96\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 144\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " -144\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 144\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " -144\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 0\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 0\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 0\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 0\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " -144\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 144\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " -144\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 144\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
\n", - "
NE_poste
\n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
\n", - "
\n", - "
380.0 kV / -0.0°
\n", - "
\n", - "
\n", - " \n", - "
\n", - "
NO_poste
\n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
\n", - "
\n", - "
380.0 kV / 0.0°
\n", - "
\n", - "
\n", - " \n", - "
\n", - "
N_poste
\n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
\n", - "
\n", - "
380.0 kV / -0.0°
\n", - "
\n", - "
\n", - " \n", - "
\n", - "
SE_poste
\n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
\n", - "
\n", - "
380.0 kV / -0.1°
\n", - "
\n", - "
\n", - " \n", - "
\n", - "
SO_poste
\n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
\n", - "
\n", - "
380.0 kV / 0.0°
\n", - "
\n", - "
\n", - " \n", - "
\n", - "
S_poste
\n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
\n", - "
\n", - "
380.0 kV / -0.0°
\n", - "
\n", - "
\n", - "
\n", - "
\n" - ], "text/plain": [ - "" - ] + "" + ], + "image/svg+xml": "\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n -48\n \n \n \n \n \n \n \n \n \n \n \n 48\n \n \n \n \n \n \n \n \n \n \n \n \n \n -48\n \n \n \n \n \n \n \n \n \n \n \n 48\n \n \n \n \n \n \n \n \n \n \n \n \n \n -96\n \n \n \n \n \n \n \n \n \n \n \n 96\n \n \n \n \n \n \n \n \n \n \n \n \n \n -96\n \n \n \n \n \n \n \n \n \n \n \n 96\n \n \n \n \n \n \n \n \n \n \n \n \n \n -96\n \n \n \n \n \n \n \n \n \n \n \n 96\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 48\n \n \n \n \n \n \n \n \n \n \n \n -48\n \n \n \n \n \n \n \n \n \n \n \n \n \n 48\n \n \n \n \n \n \n \n \n \n \n \n -48\n \n \n \n \n \n \n \n \n \n \n \n \n \n 96\n \n \n \n \n \n \n \n \n \n \n \n -96\n \n \n \n \n \n \n \n \n \n \n \n \n \n 96\n \n \n \n \n \n \n \n \n \n \n \n -96\n \n \n \n \n \n \n \n \n \n \n \n \n \n 144\n \n \n \n \n \n \n \n \n \n \n \n -144\n \n \n \n \n \n \n \n \n \n \n \n \n \n 144\n \n \n \n \n \n \n \n \n \n \n \n -144\n \n \n \n \n \n \n \n \n \n \n \n \n \n 0\n \n \n \n \n \n \n \n \n \n \n \n 0\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 0\n \n \n \n \n \n \n \n \n \n \n \n 0\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n -144\n \n \n \n \n \n \n \n \n \n \n \n 144\n \n \n \n \n \n \n \n \n \n \n \n \n \n -144\n \n \n \n \n \n \n \n \n \n \n \n 144\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n
NE_poste
\n
\n 380.0 kV / -0.0°
\n
\n
\n
NO_poste
\n
\n 380.0 kV / 0.0°
\n
\n
\n
N_poste
\n
\n 380.0 kV / -0.0°
\n
\n
\n
SE_poste
\n
\n 380.0 kV / -0.1°
\n
\n
\n
SO_poste
\n
\n 380.0 kV / 0.0°
\n
\n
\n
S_poste
\n
\n 380.0 kV / -0.0°
\n
\n
\n
\n
\n" }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], - "source": [ - "n6.get_network_area_diagram()" - ] + "execution_count": 3 }, { "cell_type": "markdown", @@ -765,12 +108,17 @@ }, { "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-15T11:15:52.640242Z", + "start_time": "2025-09-15T11:15:52.635338Z" + } + }, "source": [ "analysis = pp.sensitivity.create_dc_analysis()" - ] + ], + "outputs": [], + "execution_count": 4 }, { "cell_type": "markdown", @@ -783,12 +131,17 @@ }, { "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-15T11:15:52.703913Z", + "start_time": "2025-09-15T11:15:52.698237Z" + } + }, "source": [ "analysis.add_branch_flow_factor_matrix(branches_ids=['S_SO_1', 'S_SO_2'], variables_ids=['SE_G'])" - ] + ], + "outputs": [], + "execution_count": 5 }, { "cell_type": "markdown", @@ -799,12 +152,17 @@ }, { "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [], + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-15T11:15:52.770267Z", + "start_time": "2025-09-15T11:15:52.754779Z" + } + }, "source": [ "result = analysis.run(n6)" - ] + ], + "outputs": [], + "execution_count": 6 }, { "cell_type": "markdown", @@ -815,11 +173,22 @@ }, { "cell_type": "code", - "execution_count": 7, - "metadata": {}, + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-15T11:15:52.849031Z", + "start_time": "2025-09-15T11:15:52.826166Z" + } + }, + "source": [ + "result.get_reference_matrix()" + ], "outputs": [ { "data": { + "text/plain": [ + " S_SO_1 S_SO_2\n", + "reference_values -120.433341 -120.433341" + ], "text/html": [ "
\n", "\n", - " \n", - " \n", - " \n", - " S1VL2\n", - " \n", - " \n", - " \n", - " S1VL2_BBS1\n", - " \n", - " \n", - " \n", - " S1VL2_BBS2\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 5\n", - " \n", - " \n", - " \n", - " \n", - " 80\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " TWT\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " -512\n", - " \n", - " \n", - " \n", - " \n", - " 10\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " AC / DC - VSC\n", - " HVDC1\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " -85\n", - " \n", - " \n", - " \n", - " \n", - " -512\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " GH1\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " -512\n", - " \n", - " \n", - " \n", - " \n", - " -90\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " GH2\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " -156\n", - " \n", - " \n", - " \n", - " \n", - " -512\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " GH3\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 5\n", - " \n", - " \n", - " \n", - " \n", - " 60\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " LD2\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 60\n", - " \n", - " \n", - " \n", - " \n", - " 5\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " LD3\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 5\n", - " \n", - " \n", - " \n", - " \n", - " 40\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " LD4\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 1,920\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " SHUNT\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 81\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " AC / DC - LCC\n", - " HVDC2\n", - " \n", - " \n", - " \n", - " S1VL1\n", - " \n", - " \n", - " \n", - " S1VL1_BBS\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " 80\n", - " \n", - " \n", - " \n", - " \n", - " 10\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " LD1\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " -10\n", - " \n", - " \n", - " \n", - " \n", - " -80\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " TWT\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n" - ], "text/plain": [ - "" - ] + "" + ], + "image/svg+xml": "\n\n \n \n \n \n \n S1VL2\n \n \n \n S1VL2_BBS1\n \n \n \n S1VL2_BBS2\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 5\n \n \n \n \n 80\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n TWT\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n -512\n \n \n \n \n 10\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n AC / DC - VSC\n HVDC1\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n -85\n \n \n \n \n -512\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n GH1\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n -512\n \n \n \n \n -90\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n GH2\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n -156\n \n \n \n \n -512\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n GH3\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 5\n \n \n \n \n 60\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n LD2\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 60\n \n \n \n \n 5\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n LD3\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 5\n \n \n \n \n 40\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n LD4\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 1,920\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n SHUNT\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 81\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n AC / DC - LCC\n HVDC2\n \n \n \n \n \n S1VL1\n \n \n \n S1VL1_BBS\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 80\n \n \n \n \n 10\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n LD1\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n -10\n \n \n \n \n -80\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n TWT\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n" }, - "execution_count": 7, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], - "source": [ - "sld" - ] + "execution_count": 6 }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-15T11:26:15.276670Z", + "start_time": "2025-09-15T11:26:15.274851Z" + } + }, + "source": [], + "id": "d03d7ee265e1e9b3", "outputs": [], - "source": [] + "execution_count": null } ], "metadata": {