{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Use of the static grid equivalents\n", "This tutorial gives a quick overview of the grid equivalents function. This script gives an example to reduce a grid area using the IEEE case9 grid." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Determination of grid areas\n", "\n", "The user can determine the grid area of interest (internal area), the grid area for the reduction (external area), and the boundary buses between them. The figure below schows an example of the grid with identified grid areas:\n", "\n", "- internal area (buses): [0, 3, 4, 8]\n", "- boundary buses: [4, 8] (boundary buses belong to the internal area)\n", "- external area (buses): [1, 2, 5, 6, 7] \n", "\n", "\"ALT\"\n", "\n", "In order to identify the user-defined area, the boundary buses and one of the internal buses must be provided as inputs.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Required inputs\n", "\n", "The most important inputs for grid equivalents are:\n", "- net: pandapower grid including power flow results\n", "- eq_type: the method used to determine the equivalent grid, e.g., \"rei\", \"ward\", \"xward\"\n", "- boundary_buses: indices of boundary buses (as a list) that divide the original grid into the internal areas and the external areas. Based on the figure above, boundary_buses = [4, 8] \n", "- internal_buses: bus indices (as a list), which are within the internal area. Based on the figure above, internal_buses = [0]. Just one of the internal buses is enough, the function will find and consider the remaining internal buses during the equivalent calculation. If 'internal_buses' is an empty list or None, the complete grid is treated as an external area." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Example: REI-equivalent\n", "In the following, the reduction of the external grid (buses [1, 2, 5, 6, 7] of the grid case 9) in the figure above is shown.\n", "First, the necessary libraries need to be imported." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "\n", "import pandapower as pp\n", "import pandapower.plotting as plotting\n", "import pandapower.networks\n", "import pandapower.grid_equivalents" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Subsequently, the IEEE case 9 grid model is created, and its power flow is calculated." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "This pandapower network includes the following parameter tables:\n", " - bus (9 elements)\n", " - load (3 elements)\n", " - gen (2 elements)\n", " - ext_grid (1 element)\n", " - line (9 elements)\n", " - poly_cost (3 elements)\n", " - bus_geodata (9 elements)\n", " and the following results tables:\n", " - res_bus (9 elements)\n", " - res_line (9 elements)\n", " - res_ext_grid (1 element)\n", " - res_load (3 elements)\n", " - res_gen (2 elements)" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "net = pp.networks.case9()\n", "net.sn_mva = 1.0\n", "pp.runpp(net)\n", "net" ] }, { "cell_type": "raw", "metadata": {}, "source": [ "Next, we define the input parameters according to the figure above and obtain the REI-equivalent." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "# equivalent type\n", "eq_type = \"rei\"\n", "\n", "# boundary buses\n", "boundary_buses = [4, 8]\n", "\n", "# internal buses \n", "internal_buses = [0]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Next, the equivalent function is called, and the grid reduction is executed." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "hp.pandapower.grid_equivalents.get_equivalent - INFO: rei equivalent calculation started\n", "hp.pandapower.toolbox - INFO: dropped 2 gen elements\n", "hp.pandapower.toolbox - INFO: dropped 5 lines with 0 line switches\n", "hp.pandapower.toolbox - INFO: dropped 0 switches\n", "hp.pandapower.toolbox - INFO: dropped 1 lines with 0 line switches\n", "hp.pandapower.toolbox - INFO: dropped 1 load elements\n", "hp.pandapower.toolbox - INFO: dropped 1 ext_grid elements\n", "hp.pandapower.toolbox - INFO: dropped 2 lines with 0 line switches\n", "hp.pandapower.toolbox - INFO: dropped 0 switches\n", "hp.pandapower.toolbox - INFO: dropped 1 lines with 0 line switches\n", "hp.pandapower.toolbox - INFO: dropped 3 impedance elements\n", "hp.pandapower.toolbox - INFO: dropped 5 lines with 0 line switches\n", "hp.pandapower.toolbox - INFO: dropped 0 switches\n", "hp.pandapower.toolbox - INFO: dropped 3 impedance elements\n", "hp.pandapower.toolbox - INFO: dropped 1 lines with 0 line switches\n", "hp.pandapower.toolbox - INFO: dropped 0 lines with 0 line switches\n", "hp.pandapower.toolbox - INFO: dropped 2 load elements\n", "hp.pandapower.toolbox - INFO: dropped 2 ext_grid elements\n", "hp.pandapower.grid_equivalents.get_equivalent - INFO: \"rei\" equivalent finished in 1.67 seconds:\n" ] } ], "source": [ "net_eq = pp.grid_equivalents.get_equivalent(net, eq_type, boundary_buses, internal_buses)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now, the grid equivalent is obtained: \"net_eq\" is the REI-equivalent grid model. We can compare the power flow results between the original grid \"net\" and the reduced grid \"net_eq\". " ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "--- power flow (original grid) ---\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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
vm_puva_degreep_mwq_mvar
01.0000000.000000-71.954702-24.068958
11.0000009.668741-163.000000-14.460120
21.0000004.771073-85.0000003.649026
30.987007-2.4066440.0000000.000000
40.975472-4.01726490.00000030.000000
51.0033751.9256020.0000000.000000
60.9856450.621545100.00000035.000000
70.9961853.7991200.0000000.000000
80.957621-4.349934125.00000050.000000
\n", "
" ], "text/plain": [ " vm_pu va_degree p_mw q_mvar\n", "0 1.000000 0.000000 -71.954702 -24.068958\n", "1 1.000000 9.668741 -163.000000 -14.460120\n", "2 1.000000 4.771073 -85.000000 3.649026\n", "3 0.987007 -2.406644 0.000000 0.000000\n", "4 0.975472 -4.017264 90.000000 30.000000\n", "5 1.003375 1.925602 0.000000 0.000000\n", "6 0.985645 0.621545 100.000000 35.000000\n", "7 0.996185 3.799120 0.000000 0.000000\n", "8 0.957621 -4.349934 125.000000 50.000000" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "--- power flow (reduced grid) ---\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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
vm_puva_degreep_mwq_mvar
01.0000000.000000-71.954702-24.068958
30.987007-2.4066440.0000000.000000
40.975472-4.01726489.2838968.224645
80.957621-4.349934124.58189632.419383
90.9856450.62154599.3174210.635364
101.0000009.668741-162.192474-24.665476
111.0000004.771073-83.866102-11.311074
\n", "
" ], "text/plain": [ " vm_pu va_degree p_mw q_mvar\n", "0 1.000000 0.000000 -71.954702 -24.068958\n", "3 0.987007 -2.406644 0.000000 0.000000\n", "4 0.975472 -4.017264 89.283896 8.224645\n", "8 0.957621 -4.349934 124.581896 32.419383\n", "9 0.985645 0.621545 99.317421 0.635364\n", "10 1.000000 9.668741 -162.192474 -24.665476\n", "11 1.000000 4.771073 -83.866102 -11.311074" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "print(\"--- power flow (original grid) ---\")\n", "display(net.res_bus)\n", "print(\"--- power flow (reduced grid) ---\")\n", "display(net_eq.res_bus)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It can be seen that the power flow results (*vm_pu*, *va_degree*) of the internal buses [0, 3, 4, 8] in both grids are the same , i.e., the equivalent calculation is successful. The *p_mw* and *q_mvar* values at the boundary buses [4, 8] are different due to the equivalent devices. During the grid reduction, additional equivalent devices (e.g., additional buses [9, 10, 11], impedance, shunts, etc.) are created, representing the interaction between the internal area and the external area, and maintaining the grid states in the internal area. We can see the additional shunts in the grid equivalent:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "--- shunts (original grid) ---\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
busnameq_mvarp_mwvn_kvstepmax_stepin_service
\n", "
" ], "text/plain": [ "Empty DataFrame\n", "Columns: [bus, name, q_mvar, p_mw, vn_kv, step, max_step, in_service]\n", "Index: []" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "--- shunts (reduced grid) ---\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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
busnameq_mvarp_mwvn_kvstepmax_stepin_service
04eq_shunt-22.884186-0.752570345.011True
18eq_shunt-19.171087-0.455928345.011True
29eq_shunt-35.372912-0.702606345.011True
310eq_shunt-10.2053560.807526345.011True
411eq_shunt-14.9601001.133898345.011True
\n", "
" ], "text/plain": [ " bus name q_mvar p_mw vn_kv step max_step in_service\n", "0 4 eq_shunt -22.884186 -0.752570 345.0 1 1 True\n", "1 8 eq_shunt -19.171087 -0.455928 345.0 1 1 True\n", "2 9 eq_shunt -35.372912 -0.702606 345.0 1 1 True\n", "3 10 eq_shunt -10.205356 0.807526 345.0 1 1 True\n", "4 11 eq_shunt -14.960100 1.133898 345.0 1 1 True" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "print(\"--- shunts (original grid) ---\")\n", "display(net.shunt)\n", "print(\"--- shunts (reduced grid) ---\")\n", "display(net_eq.shunt)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Example: (X)Ward-equivalent" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In the following, we demonstrate an example for the (x)ward-equivalent. We change the equivalent type and repeat the equivalent calculation." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "hp.pandapower.grid_equivalents.get_equivalent - INFO: ward equivalent calculation started\n", "hp.pandapower.toolbox - INFO: dropped 2 gen elements\n", "hp.pandapower.toolbox - INFO: dropped 5 lines with 0 line switches\n", "hp.pandapower.toolbox - INFO: dropped 0 switches\n", "hp.pandapower.toolbox - INFO: dropped 1 lines with 0 line switches\n", "hp.pandapower.toolbox - INFO: dropped 1 load elements\n", "hp.pandapower.toolbox - INFO: dropped 1 ext_grid elements\n", "hp.pandapower.toolbox - INFO: dropped 2 lines with 0 line switches\n", "hp.pandapower.toolbox - INFO: dropped 0 switches\n", "hp.pandapower.toolbox - INFO: dropped 1 lines with 0 line switches\n", "hp.pandapower.toolbox - INFO: dropped 2 gen elements\n", "hp.pandapower.toolbox - INFO: dropped 5 lines with 0 line switches\n", "hp.pandapower.toolbox - INFO: dropped 0 switches\n", "hp.pandapower.toolbox - INFO: dropped 1 lines with 0 line switches\n", "hp.pandapower.toolbox - INFO: dropped 1 load elements\n", "hp.pandapower.toolbox - INFO: dropped 0 lines with 0 line switches\n", "hp.pandapower.toolbox - INFO: dropped 2 load elements\n", "hp.pandapower.toolbox - INFO: dropped 2 ext_grid elements\n", "hp.pandapower.grid_equivalents.get_equivalent - INFO: \"ward\" equivalent finished in 0.22 seconds:\n" ] } ], "source": [ "# equivalent type\n", "eq_type = \"ward\" # for xward-equivalent: eq_type = \"xward\"\n", "\n", "# run equivalent calculation\n", "net_eq_ward = pp.grid_equivalents.get_equivalent(net, eq_type, boundary_buses, \n", " internal_buses)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now, the ward equivalent is obtained. We can verify the power flow results." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "--- power flow (original grid) ---\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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
vm_puva_degreep_mwq_mvar
01.0000000.000000-71.954702-24.068958
11.0000009.668741-163.000000-14.460120
21.0000004.771073-85.0000003.649026
30.987007-2.4066440.0000000.000000
40.975472-4.01726490.00000030.000000
51.0033751.9256020.0000000.000000
60.9856450.621545100.00000035.000000
70.9961853.7991200.0000000.000000
80.957621-4.349934125.00000050.000000
\n", "
" ], "text/plain": [ " vm_pu va_degree p_mw q_mvar\n", "0 1.000000 0.000000 -71.954702 -24.068958\n", "1 1.000000 9.668741 -163.000000 -14.460120\n", "2 1.000000 4.771073 -85.000000 3.649026\n", "3 0.987007 -2.406644 0.000000 0.000000\n", "4 0.975472 -4.017264 90.000000 30.000000\n", "5 1.003375 1.925602 0.000000 0.000000\n", "6 0.985645 0.621545 100.000000 35.000000\n", "7 0.996185 3.799120 0.000000 0.000000\n", "8 0.957621 -4.349934 125.000000 50.000000" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "--- power flow (reduced grid) ---\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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
vm_puva_degreep_mwq_mvar
01.0000000.000000-71.954702-24.068958
30.987007-2.4066440.0000000.000000
40.975472-4.01726428.82087910.232062
80.957621-4.34993442.68186139.100723
\n", "
" ], "text/plain": [ " vm_pu va_degree p_mw q_mvar\n", "0 1.000000 0.000000 -71.954702 -24.068958\n", "3 0.987007 -2.406644 0.000000 0.000000\n", "4 0.975472 -4.017264 28.820879 10.232062\n", "8 0.957621 -4.349934 42.681861 39.100723" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "print(\"--- power flow (original grid) ---\")\n", "display(net.res_bus)\n", "print(\"--- power flow (reduced grid) ---\")\n", "display(net_eq_ward.res_bus)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The power flow results (*vm_pu*, *va_degree*) for the internal buses [0, 3, 4, 8] in both grids are the same. The external area is represented by the addtional *ward* elements in the grid model \"net_eq_ward\", attached at the boundary buses [4, 8]: " ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "--- ward (original grid) ---\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
namebusps_mwqs_mvarqz_mvarpz_mwin_service
\n", "
" ], "text/plain": [ "Empty DataFrame\n", "Columns: [name, bus, ps_mw, qs_mvar, qz_mvar, pz_mw, in_service]\n", "Index: []" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "--- ward (reduced grid) ---\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", " \n", " \n", " \n", " \n", " \n", "
namebusps_mwqs_mvarqz_mvarpz_mwin_service
0network_equivalent4-61.25428431.921715-54.3217600.07899True
1network_equivalent8-83.13711836.970310-52.2002190.89307True
\n", "
" ], "text/plain": [ " name bus ps_mw qs_mvar qz_mvar pz_mw \\\n", "0 network_equivalent 4 -61.254284 31.921715 -54.321760 0.07899 \n", "1 network_equivalent 8 -83.137118 36.970310 -52.200219 0.89307 \n", "\n", " in_service \n", "0 True \n", "1 True " ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "print(\"--- ward (original grid) ---\")\n", "display(net.ward)\n", "print(\"--- ward (reduced grid) ---\")\n", "display(net_eq_ward.ward)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Defining the zones based on boundary branches\n", "\n", "For this example we will use the lines between the buses 4 ... 5 and 7 ... 8\n", "\n", "With the function *set_bus_zone_by_boundary_branches* we first define the zones of the grid based on this separation. Thereafter, with the function *get_boundaries_by_bus_zone_with_boundary_branches*, we obtain the boundary buses that we can use with the functions for obtaining the grid equivalents, as showed in previous sections." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "boundary_branches = {\"line\": [2, 7]}\n", "pp.grid_equivalents.set_bus_zone_by_boundary_branches(net, boundary_branches)\n", "buses, branches = pp.grid_equivalents.get_boundaries_by_bus_zone_with_boundary_branches(net)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The dictionary *buses* contains the biundary buses, internal buses and external buses from the point of view of each of the zones." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{0: {'all': {4, 5, 7, 8}, 'internal': {4, 8}, 'external': {5, 7}, 1: {5, 7}},\n", " 1: {'all': {4, 5, 7, 8}, 'internal': {5, 7}, 'external': {4, 8}, 0: {4, 8}},\n", " 'all': {4, 5, 7, 8}}" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "buses" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The resulting separation can be seen in the figure below. The green buses are the nodes of the boundary lines that are part of the internal zone. The red buses are the nodes of the boundary lines that are in the external zone. The red dashed lines are the boundary lines." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "zone = 1\n", "\n", "plotting.generic_geodata.create_generic_coordinates(net, overwrite=True)\n", "plotting.plotting_toolbox.set_line_geodata_from_bus_geodata(net, overwrite=True)\n", "plotting.geo.convert_geodata_to_gis(net)\n", "\n", "fig, ax=plt.subplots(figsize=(7,11))\n", "\n", "net.line_geodata.plot(ax=ax)\n", "net.line_geodata.loc[list(boundary_branches[\"line\"])].plot(ax=ax, color='red', linestyle=\"--\")\n", "net.bus_geodata.plot(column=net.bus.zone.values, ax=ax,zorder=10)\n", "net.bus_geodata.loc[net.ext_grid.bus.values].plot(ax=ax, color='k', marker=\"s\", markersize=200)\n", "\n", "net.bus_geodata.loc[list(buses[zone][\"external\"])].plot(color='r', ax=ax, zorder=100, markersize=100)\n", "net.bus_geodata.loc[list(buses[zone][\"internal\"])].plot(color='g', ax=ax, zorder=100, markersize=100)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now, we can obtain the grid equivalent to reduce the zone 0" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "hp.pandapower.grid_equivalents.get_equivalent - INFO: rei equivalent calculation started\n", "hp.pandapower.toolbox - INFO: dropped 1 gen elements\n", "hp.pandapower.toolbox - INFO: dropped 5 lines with 0 line switches\n", "hp.pandapower.toolbox - INFO: dropped 0 switches\n", "hp.pandapower.toolbox - INFO: dropped 3 lines with 0 line switches\n", "hp.pandapower.toolbox - INFO: dropped 3 load elements\n", "hp.pandapower.toolbox - INFO: dropped 1 gen elements\n", "hp.pandapower.toolbox - INFO: dropped 1 lines with 0 line switches\n", "hp.pandapower.toolbox - INFO: dropped 0 switches\n", "hp.pandapower.toolbox - INFO: dropped 4 impedance elements\n", "hp.pandapower.toolbox - INFO: dropped 5 lines with 0 line switches\n", "hp.pandapower.toolbox - INFO: dropped 0 switches\n", "hp.pandapower.toolbox - INFO: dropped 2 impedance elements\n", "hp.pandapower.toolbox - INFO: dropped 3 lines with 0 line switches\n", "hp.pandapower.toolbox - INFO: dropped 0 lines with 0 line switches\n", "hp.pandapower.toolbox - INFO: dropped 3 ext_grid elements\n", "hp.pandapower.grid_equivalents.get_equivalent - INFO: \"rei\" equivalent finished in 0.88 seconds:\n" ] } ], "source": [ "b_internal = [net.bus.loc[net.bus.zone==1].index[0]]\n", "net_eq = pp.grid_equivalents.get_equivalent(net, \"rei\", buses[1][\"internal\"], b_internal)" ] }, { "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
in_servicemax_vm_pumin_vm_punametypevn_kvzone
0True1.10.91b345.00
1True1.10.92b345.01
5True1.10.96b345.01
7True1.10.98b345.01
8True1.10.9load_integrated-total 2b345.0None
9TrueNaNNaNgen_separate-total 2b345.0None
\n", "
" ], "text/plain": [ " in_service max_vm_pu min_vm_pu name type vn_kv zone\n", "0 True 1.1 0.9 1 b 345.0 0\n", "1 True 1.1 0.9 2 b 345.0 1\n", "5 True 1.1 0.9 6 b 345.0 1\n", "7 True 1.1 0.9 8 b 345.0 1\n", "8 True 1.1 0.9 load_integrated-total 2 b 345.0 None\n", "9 True NaN NaN gen_separate-total 2 b 345.0 None" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "net_eq.bus" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Grid equivalents with DC lines" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "hp.pandapower.toolbox - INFO: dropped 1 lines with 0 line switches\n" ] } ], "source": [ "pp.drop_lines(net, [2])\n", "pp.create_dcline(net, 4, 5, 50, 0.5, 0.7, 1.0, 1.0)\n", "pp.runpp(net)" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "hp.pandapower.grid_equivalents.get_equivalent - INFO: replaced dcline [0] by gen elements\n", "hp.pandapower.grid_equivalents.get_equivalent - INFO: rei equivalent calculation started\n", "hp.pandapower.toolbox - INFO: dropped 1 dcline elements\n", "hp.pandapower.toolbox - INFO: dropped 3 gen elements\n", "hp.pandapower.toolbox - INFO: dropped 4 lines with 0 line switches\n", "hp.pandapower.toolbox - INFO: dropped 0 switches\n", "hp.pandapower.toolbox - INFO: dropped 1 lines with 0 line switches\n", "hp.pandapower.toolbox - INFO: dropped 1 load elements\n", "hp.pandapower.toolbox - INFO: dropped 1 ext_grid elements\n", "hp.pandapower.toolbox - INFO: dropped 2 lines with 0 line switches\n", "hp.pandapower.toolbox - INFO: dropped 0 switches\n", "hp.pandapower.toolbox - INFO: dropped 1 lines with 0 line switches\n", "hp.pandapower.toolbox - INFO: dropped 1 dcline elements\n", "hp.pandapower.toolbox - INFO: dropped 4 impedance elements\n", "hp.pandapower.toolbox - INFO: dropped 4 lines with 0 line switches\n", "hp.pandapower.toolbox - INFO: dropped 0 switches\n", "hp.pandapower.toolbox - INFO: dropped 4 impedance elements\n", "hp.pandapower.toolbox - INFO: dropped 1 lines with 0 line switches\n", "hp.pandapower.toolbox - INFO: dropped 0 lines with 0 line switches\n", "hp.pandapower.toolbox - INFO: dropped 2 load elements\n", "hp.pandapower.toolbox - INFO: dropped 2 ext_grid elements\n", "hp.pandapower.toolbox - INFO: dropped 1 gen elements\n", "hp.pandapower.grid_equivalents.get_equivalent - INFO: \"rei\" equivalent finished in 0.37 seconds:\n" ] } ], "source": [ "net_eq = pp.grid_equivalents.get_equivalent(net, \"rei\", [4,8], [0])" ] }, { "cell_type": "code", "execution_count": 17, "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", "
in_servicemax_vm_pumin_vm_punametypevn_kvzone
0True1.10.91b345.00
3True1.10.94b345.00
4True1.10.95b345.00
8True1.10.99b345.00
9True1.10.9load_integrated-total 1b345.0None
10TrueNaNNaNgen_separate-total 1b345.0None
11TrueNaNNaNgen_separate-total 2b345.0None
12TrueNaNNaNgen_separate-total 5b345.0None
\n", "
" ], "text/plain": [ " in_service max_vm_pu min_vm_pu name type vn_kv \\\n", "0 True 1.1 0.9 1 b 345.0 \n", "3 True 1.1 0.9 4 b 345.0 \n", "4 True 1.1 0.9 5 b 345.0 \n", "8 True 1.1 0.9 9 b 345.0 \n", "9 True 1.1 0.9 load_integrated-total 1 b 345.0 \n", "10 True NaN NaN gen_separate-total 1 b 345.0 \n", "11 True NaN NaN gen_separate-total 2 b 345.0 \n", "12 True NaN NaN gen_separate-total 5 b 345.0 \n", "\n", " zone \n", "0 0 \n", "3 0 \n", "4 0 \n", "8 0 \n", "9 None \n", "10 None \n", "11 None \n", "12 None " ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "net_eq.bus" ] } ], "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.9.13" } }, "nbformat": 4, "nbformat_minor": 2 }