Created
April 4, 2017 14:05
-
-
Save jkrstulo/4a5dc0bca21764463135f2004ad161f1 to your computer and use it in GitHub Desktop.
first zip loads in pandapower test case
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"# ZIP load model (test with GridCal)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## GridCal case 5 example with zip load at bus 2" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 1, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"Setting the bus [0] as slack instead of pv\n", | |
"Setting the bus [0] as slack instead of pv\n", | |
"[[0, 1, 2, 3, 4]]\n", | |
"PowerFlow at Grid\n", | |
"Setting the bus [0] as slack instead of pv\n" | |
] | |
} | |
], | |
"source": [ | |
"import numpy as np\n", | |
"\n", | |
"from GridCal.grid.CalculationEngine import *\n", | |
"\n", | |
"np.set_printoptions(precision=4)\n", | |
"grid = MultiCircuit()\n", | |
"\n", | |
"\n", | |
"# Add buses\n", | |
"bus1 = Bus('Bus 1', vnom=20)\n", | |
"# bus1.is_slack = True\n", | |
"bus1.controlled_generators.append(ControlledGenerator('Slack Generator', voltage_module=1.0))\n", | |
"grid.add_bus(bus1)\n", | |
"\n", | |
"bus2 = Bus('Bus 2', vnom=20)\n", | |
"bus2.loads.append(Load('load 2', power=0.5*complex(40, 20),\n", | |
" impedance=1/(10.-5.j),\n", | |
" current=np.conj(10.+5.j) / (20 * np.sqrt(3)))\n", | |
" )\n", | |
"grid.add_bus(bus2)\n", | |
"\n", | |
"bus3 = Bus('Bus 3', vnom=20)\n", | |
"bus3.loads.append(Load('load 3', power=complex(25, 15)))\n", | |
"grid.add_bus(bus3)\n", | |
"\n", | |
"bus4 = Bus('Bus 4', vnom=20)\n", | |
"bus4.loads.append(Load('load 4', power=complex(40, 20)))\n", | |
"grid.add_bus(bus4)\n", | |
"\n", | |
"bus5 = Bus('Bus 5', vnom=20)\n", | |
"bus5.loads.append(Load('load 5', power=complex(50, 20)))\n", | |
"grid.add_bus(bus5)\n", | |
"\n", | |
"\n", | |
"# add branches (Lines in this case)\n", | |
"grid.add_branch(Branch(bus1, bus2, 'line 1-2', r=0.05, x=0.11, b=0.02))\n", | |
"\n", | |
"grid.add_branch(Branch(bus1, bus3, 'line 1-3', r=0.05, x=0.11, b=0.02))\n", | |
"\n", | |
"grid.add_branch(Branch(bus1, bus5, 'line 1-5', r=0.03, x=0.08, b=0.02))\n", | |
"\n", | |
"grid.add_branch(Branch(bus2, bus3, 'line 2-3', r=0.04, x=0.09, b=0.02))\n", | |
"\n", | |
"grid.add_branch(Branch(bus2, bus5, 'line 2-5', r=0.04, x=0.09, b=0.02))\n", | |
"\n", | |
"grid.add_branch(Branch(bus3, bus4, 'line 3-4', r=0.06, x=0.13, b=0.03))\n", | |
"\n", | |
"grid.add_branch(Branch(bus4, bus5, 'line 4-5', r=0.04, x=0.09, b=0.02))\n", | |
"\n", | |
"\n", | |
"grid.compile()\n", | |
"\n", | |
"# print('Ybus:\\n', grid.circuits[0].power_flow_input.Ybus.todense())\n", | |
"\n", | |
"options = PowerFlowOptions(SolverType.NR, verbose=False, robust=False)\n", | |
"power_flow = PowerFlow(grid, options)\n", | |
"power_flow.run()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 2, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"\t|V|: [ 1. 0.9562 0.9553 0.9338 0.9538]\n", | |
"\tVang: [ 0. -2.3839 -2.3523 -3.6375 -2.6778]\n", | |
"\t|Sbus|: [ 0.00+0.j -0.20-0.1j -0.25-0.15j -0.40-0.2j -0.50-0.2j ]\n", | |
"\t|Sbranch|: [ 49.1041 49.3071 75.565 1.8908 5.3234 19.6851 24.2913]\n", | |
"\t|loading|: [ 4910.4096 4930.7092 7556.4998 189.0838 532.3418 1968.5141 2429.1295]\n", | |
"\terr: 1.778955111e-08\n", | |
"\tConv: True\n" | |
] | |
} | |
], | |
"source": [ | |
"# print('\\n\\n', grid.name)\n", | |
"print('\\t|V|:', abs(grid.power_flow_results.voltage))\n", | |
"print('\\tVang:', np.rad2deg(np.angle(grid.power_flow_results.voltage)))\n", | |
"print('\\t|Sbus|:', grid.power_flow_results.Sbus)\n", | |
"print('\\t|Sbranch|:', abs(grid.power_flow_results.Sbranch))\n", | |
"print('\\t|loading|:', abs(grid.power_flow_results.loading) * 100)\n", | |
"print('\\terr:', grid.power_flow_results.error)\n", | |
"print('\\tConv:', grid.power_flow_results.converged)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## PandaPower" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 3, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [], | |
"source": [ | |
"import sys\n", | |
"sys.path.append('/Users/jko/github/pandapower')\n", | |
"\n", | |
"import pandapower as pp #import pandapower\n", | |
"from pandapower import converter as ppconv\n", | |
"\n", | |
"# ppc case generated according to GridCal\n", | |
"from case5_gridcal import case5_gridcal\n", | |
"from pypower.api import makeYbus\n", | |
"\n", | |
"ppc = case5_gridcal()\n", | |
"\n", | |
"net = ppconv.from_ppc(ppc)\n", | |
"net.sn_kva = 1.e5" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### adding zip loads to pandapower" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 4, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<div>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>name</th>\n", | |
" <th>bus</th>\n", | |
" <th>p_kw</th>\n", | |
" <th>q_kvar</th>\n", | |
" <th>sn_kva</th>\n", | |
" <th>scaling</th>\n", | |
" <th>in_service</th>\n", | |
" <th>type</th>\n", | |
" <th>const_p</th>\n", | |
" <th>const_i</th>\n", | |
" <th>const_z</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>0</th>\n", | |
" <td>None</td>\n", | |
" <td>1</td>\n", | |
" <td>40000.0</td>\n", | |
" <td>20000.0</td>\n", | |
" <td>NaN</td>\n", | |
" <td>1.0</td>\n", | |
" <td>True</td>\n", | |
" <td>None</td>\n", | |
" <td>0.5</td>\n", | |
" <td>0.25</td>\n", | |
" <td>0.25</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td>None</td>\n", | |
" <td>2</td>\n", | |
" <td>25000.0</td>\n", | |
" <td>15000.0</td>\n", | |
" <td>NaN</td>\n", | |
" <td>1.0</td>\n", | |
" <td>True</td>\n", | |
" <td>None</td>\n", | |
" <td>1.0</td>\n", | |
" <td>0.00</td>\n", | |
" <td>0.00</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2</th>\n", | |
" <td>None</td>\n", | |
" <td>3</td>\n", | |
" <td>40000.0</td>\n", | |
" <td>20000.0</td>\n", | |
" <td>NaN</td>\n", | |
" <td>1.0</td>\n", | |
" <td>True</td>\n", | |
" <td>None</td>\n", | |
" <td>1.0</td>\n", | |
" <td>0.00</td>\n", | |
" <td>0.00</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>3</th>\n", | |
" <td>None</td>\n", | |
" <td>4</td>\n", | |
" <td>50000.0</td>\n", | |
" <td>20000.0</td>\n", | |
" <td>NaN</td>\n", | |
" <td>1.0</td>\n", | |
" <td>True</td>\n", | |
" <td>None</td>\n", | |
" <td>1.0</td>\n", | |
" <td>0.00</td>\n", | |
" <td>0.00</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" name bus p_kw q_kvar sn_kva scaling in_service type const_p \\\n", | |
"0 None 1 40000.0 20000.0 NaN 1.0 True None 0.5 \n", | |
"1 None 2 25000.0 15000.0 NaN 1.0 True None 1.0 \n", | |
"2 None 3 40000.0 20000.0 NaN 1.0 True None 1.0 \n", | |
"3 None 4 50000.0 20000.0 NaN 1.0 True None 1.0 \n", | |
"\n", | |
" const_i const_z \n", | |
"0 0.25 0.25 \n", | |
"1 0.00 0.00 \n", | |
"2 0.00 0.00 \n", | |
"3 0.00 0.00 " | |
] | |
}, | |
"execution_count": 4, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"net.load['const_p'] = 1.\n", | |
"net.load['const_i'] = 0.\n", | |
"net.load['const_z'] = 0.\n", | |
"net.load.loc[0,'const_p'] = 0.5\n", | |
"net.load.loc[0,'const_z'] = 0.25\n", | |
"net.load.loc[0,'const_i'] = 0.25\n", | |
"\n", | |
"net.load" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 8, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<div>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>vm_pu</th>\n", | |
" <th>va_degree</th>\n", | |
" <th>p_kw</th>\n", | |
" <th>q_kvar</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>0</th>\n", | |
" <td>1.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>-158636.035777</td>\n", | |
" <td>-71349.56018</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td>0.956154</td>\n", | |
" <td>-2.383869</td>\n", | |
" <td>40000.000000</td>\n", | |
" <td>20000.00000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2</th>\n", | |
" <td>0.955289</td>\n", | |
" <td>-2.352291</td>\n", | |
" <td>25000.000000</td>\n", | |
" <td>15000.00000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>3</th>\n", | |
" <td>0.933784</td>\n", | |
" <td>-3.637473</td>\n", | |
" <td>40000.000000</td>\n", | |
" <td>20000.00000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>4</th>\n", | |
" <td>0.953811</td>\n", | |
" <td>-2.677807</td>\n", | |
" <td>50000.000000</td>\n", | |
" <td>20000.00000</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" vm_pu va_degree p_kw q_kvar\n", | |
"0 1.000000 0.000000 -158636.035777 -71349.56018\n", | |
"1 0.956154 -2.383869 40000.000000 20000.00000\n", | |
"2 0.955289 -2.352291 25000.000000 15000.00000\n", | |
"3 0.933784 -3.637473 40000.000000 20000.00000\n", | |
"4 0.953811 -2.677807 50000.000000 20000.00000" | |
] | |
}, | |
"execution_count": 8, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"# recycle Ybus in order compare it with GridCal's Ybus\n", | |
"pp.runpp(net, voltage_depend_loads=True, recycle = dict(_is_elements=False, ppc=False, Ybus=True, bfsw=False))\n", | |
"net.res_bus" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Pandapower vs. GridCal " | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### Ybus test" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 6, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"\n", | |
"\n", | |
"\tYbus PANDAPOWER = GridCal !!!\n" | |
] | |
} | |
], | |
"source": [ | |
"Ybus_pp=net[\"_ppc\"]['internal']['Ybus'].todense()\n", | |
"bus_ord = net[\"_pd2ppc_lookups\"][\"bus\"]\n", | |
"Ybus_pp = Ybus_pp[bus_ord,:][:,bus_ord]\n", | |
"\n", | |
"if np.allclose(Ybus_pp, grid.circuits[0].power_flow_input.Ybus.todense()):\n", | |
" print(\"\\n\\tYbus PANDAPOWER = GridCal !!!\")\n", | |
"else:\n", | |
" print(\"Ybus ERROR\")" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### PF result test" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 7, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"\n", | |
"\t PF PANDAPOWER = GridCal !!!\n" | |
] | |
} | |
], | |
"source": [ | |
"if (np.allclose(net.res_bus.vm_pu, abs(grid.power_flow_results.voltage)) and\n", | |
" np.allclose(np.rad2deg(np.angle(grid.power_flow_results.voltage)), net.res_bus.va_degree)):\n", | |
" print(\"\\n\\t PF PANDAPOWER = GridCal !!!\")\n", | |
"else:\n", | |
" print(\"PF ERROR\")" | |
] | |
} | |
], | |
"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.6.0" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 2 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment