Skip to content

Commit d064f33

Browse files
author
Nicolas PIERRE
committed
dynawaltz example
Signed-off-by: Nicolas PIERRE <nicolas.pierre@artelys.com>
1 parent 0a985d5 commit d064f33

File tree

6 files changed

+632
-0
lines changed

6 files changed

+632
-0
lines changed

dynawaltz.ipynb

Lines changed: 287 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,287 @@
1+
{
2+
"cells": [
3+
{
4+
"attachments": {},
5+
"cell_type": "markdown",
6+
"metadata": {},
7+
"source": [
8+
"# Pypowsybl dynawaltz simulation"
9+
]
10+
},
11+
{
12+
"cell_type": "code",
13+
"execution_count": 1,
14+
"metadata": {},
15+
"outputs": [],
16+
"source": [
17+
"import logging\n",
18+
"import pypowsybl as pp\n",
19+
"import pypowsybl.dynamic as dyn\n",
20+
"import pandas as pd"
21+
]
22+
},
23+
{
24+
"cell_type": "code",
25+
"execution_count": 2,
26+
"metadata": {},
27+
"outputs": [],
28+
"source": [
29+
"network = pp.network.load(\"./dynawaltz/IEEE14.iidm\")"
30+
]
31+
},
32+
{
33+
"attachments": {},
34+
"cell_type": "markdown",
35+
"metadata": {},
36+
"source": [
37+
"You can add dynamic mappings with dataframes like this :"
38+
]
39+
},
40+
{
41+
"cell_type": "code",
42+
"execution_count": 3,
43+
"metadata": {},
44+
"outputs": [],
45+
"source": [
46+
"df_alpha_beta = pd.DataFrame.from_dict({\"static_id\": [network.get_loads().loc[l].name for l in network.get_loads().index],\n",
47+
" \"parameter_set_id\": [\"LAB\" for l in network.get_loads().index]})\n",
48+
"df_GSTWPR = pd.DataFrame.from_dict({\"static_id\": [network.get_generators().loc[l].name for l in network.get_generators().index],\n",
49+
" \"parameter_set_id\": [\"GSTWPR\" for l in network.get_generators().index]})\n",
50+
"df_omega_ref = pd.DataFrame.from_dict({\"generator_id\": [network.get_generators().loc[l].name for l in network.get_generators().index]})"
51+
]
52+
},
53+
{
54+
"attachments": {},
55+
"cell_type": "markdown",
56+
"metadata": {},
57+
"source": [
58+
"Don't forget to index the dataframe on the network element id column"
59+
]
60+
},
61+
{
62+
"cell_type": "code",
63+
"execution_count": 4,
64+
"metadata": {},
65+
"outputs": [],
66+
"source": [
67+
"model_mapping = dyn.ModelMapping()\n",
68+
"model_mapping.add_all_dynamic_mappings(dyn.DynamicMappingType.ALPHA_BETA_LOAD, df_alpha_beta.set_index(\"static_id\"))\n",
69+
"model_mapping.add_all_dynamic_mappings(dyn.DynamicMappingType.GENERATOR_SYNCHRONOUS_THREE_WINDINGS_PROPORTIONAL_REGULATIONS, df_GSTWPR.set_index(\"static_id\"))\n",
70+
"model_mapping.add_all_dynamic_mappings(dyn.DynamicMappingType.OMEGA_REF, df_omega_ref.set_index(\"generator_id\"))"
71+
]
72+
},
73+
{
74+
"attachments": {},
75+
"cell_type": "markdown",
76+
"metadata": {},
77+
"source": [
78+
"Adding events"
79+
]
80+
},
81+
{
82+
"cell_type": "code",
83+
"execution_count": 5,
84+
"metadata": {},
85+
"outputs": [],
86+
"source": [
87+
"events = dyn.EventMapping()\n",
88+
"events.add_event(\"EQD\", dyn.EventType.BRANCH_DISCONNECTION, \"_BUS____1-BUS____5-1_AC\")"
89+
]
90+
},
91+
{
92+
"attachments": {},
93+
"cell_type": "markdown",
94+
"metadata": {},
95+
"source": [
96+
"Adding curves, you can batch curves creation for a given id"
97+
]
98+
},
99+
{
100+
"cell_type": "code",
101+
"execution_count": 6,
102+
"metadata": {},
103+
"outputs": [],
104+
"source": [
105+
"timeseries = dyn.CurveMapping()\n",
106+
"timeseries.add_curves(\"_LOAD___2_EC\", [\"load_PPu\", \"load_QPu\"])"
107+
]
108+
},
109+
{
110+
"attachments": {},
111+
"cell_type": "markdown",
112+
"metadata": {},
113+
"source": [
114+
"Running the simulation (will load the default config file in ~/.itools folder)"
115+
]
116+
},
117+
{
118+
"cell_type": "code",
119+
"execution_count": 8,
120+
"metadata": {},
121+
"outputs": [],
122+
"source": [
123+
"sim = dyn.Simulation()\n",
124+
"res = sim.run(network, model_mapping, events, timeseries, 0, 30)"
125+
]
126+
},
127+
{
128+
"attachments": {},
129+
"cell_type": "markdown",
130+
"metadata": {},
131+
"source": [
132+
"Display data of the run:"
133+
]
134+
},
135+
{
136+
"cell_type": "code",
137+
"execution_count": 9,
138+
"metadata": {},
139+
"outputs": [
140+
{
141+
"data": {
142+
"text/html": [
143+
"<div>\n",
144+
"<style scoped>\n",
145+
" .dataframe tbody tr th:only-of-type {\n",
146+
" vertical-align: middle;\n",
147+
" }\n",
148+
"\n",
149+
" .dataframe tbody tr th {\n",
150+
" vertical-align: top;\n",
151+
" }\n",
152+
"\n",
153+
" .dataframe thead th {\n",
154+
" text-align: right;\n",
155+
" }\n",
156+
"</style>\n",
157+
"<table border=\"1\" class=\"dataframe\">\n",
158+
" <thead>\n",
159+
" <tr style=\"text-align: right;\">\n",
160+
" <th></th>\n",
161+
" <th>_LOAD___2_EC_load_QPu</th>\n",
162+
" <th>_LOAD___2_EC_load_PPu</th>\n",
163+
" </tr>\n",
164+
" <tr>\n",
165+
" <th>timestamp</th>\n",
166+
" <th></th>\n",
167+
" <th></th>\n",
168+
" </tr>\n",
169+
" </thead>\n",
170+
" <tbody>\n",
171+
" <tr>\n",
172+
" <th>0</th>\n",
173+
" <td>0.126992</td>\n",
174+
" <td>0.216992</td>\n",
175+
" </tr>\n",
176+
" <tr>\n",
177+
" <th>0</th>\n",
178+
" <td>0.126992</td>\n",
179+
" <td>0.216992</td>\n",
180+
" </tr>\n",
181+
" <tr>\n",
182+
" <th>0</th>\n",
183+
" <td>0.126992</td>\n",
184+
" <td>0.216992</td>\n",
185+
" </tr>\n",
186+
" <tr>\n",
187+
" <th>0</th>\n",
188+
" <td>0.126992</td>\n",
189+
" <td>0.216992</td>\n",
190+
" </tr>\n",
191+
" <tr>\n",
192+
" <th>0</th>\n",
193+
" <td>0.126992</td>\n",
194+
" <td>0.216992</td>\n",
195+
" </tr>\n",
196+
" <tr>\n",
197+
" <th>...</th>\n",
198+
" <td>...</td>\n",
199+
" <td>...</td>\n",
200+
" </tr>\n",
201+
" <tr>\n",
202+
" <th>9900</th>\n",
203+
" <td>0.125207</td>\n",
204+
" <td>0.215157</td>\n",
205+
" </tr>\n",
206+
" <tr>\n",
207+
" <th>12710</th>\n",
208+
" <td>0.125208</td>\n",
209+
" <td>0.215157</td>\n",
210+
" </tr>\n",
211+
" <tr>\n",
212+
" <th>18331</th>\n",
213+
" <td>0.125208</td>\n",
214+
" <td>0.215158</td>\n",
215+
" </tr>\n",
216+
" <tr>\n",
217+
" <th>28331</th>\n",
218+
" <td>0.125208</td>\n",
219+
" <td>0.215158</td>\n",
220+
" </tr>\n",
221+
" <tr>\n",
222+
" <th>30000</th>\n",
223+
" <td>0.125208</td>\n",
224+
" <td>0.215158</td>\n",
225+
" </tr>\n",
226+
" </tbody>\n",
227+
"</table>\n",
228+
"<p>252 rows × 2 columns</p>\n",
229+
"</div>"
230+
],
231+
"text/plain": [
232+
" _LOAD___2_EC_load_QPu _LOAD___2_EC_load_PPu\n",
233+
"timestamp \n",
234+
"0 0.126992 0.216992\n",
235+
"0 0.126992 0.216992\n",
236+
"0 0.126992 0.216992\n",
237+
"0 0.126992 0.216992\n",
238+
"0 0.126992 0.216992\n",
239+
"... ... ...\n",
240+
"9900 0.125207 0.215157\n",
241+
"12710 0.125208 0.215157\n",
242+
"18331 0.125208 0.215158\n",
243+
"28331 0.125208 0.215158\n",
244+
"30000 0.125208 0.215158\n",
245+
"\n",
246+
"[252 rows x 2 columns]"
247+
]
248+
},
249+
"execution_count": 9,
250+
"metadata": {},
251+
"output_type": "execute_result"
252+
}
253+
],
254+
"source": [
255+
"res.status()\n",
256+
"res.curves()"
257+
]
258+
}
259+
],
260+
"metadata": {
261+
"kernelspec": {
262+
"display_name": "Python 3",
263+
"language": "python",
264+
"name": "python3"
265+
},
266+
"language_info": {
267+
"codemirror_mode": {
268+
"name": "ipython",
269+
"version": 3
270+
},
271+
"file_extension": ".py",
272+
"mimetype": "text/x-python",
273+
"name": "python",
274+
"nbconvert_exporter": "python",
275+
"pygments_lexer": "ipython3",
276+
"version": "3.8.10 (default, Jun 22 2022, 20:18:18) \n[GCC 9.4.0]"
277+
},
278+
"orig_nbformat": 4,
279+
"vscode": {
280+
"interpreter": {
281+
"hash": "e7370f93d1d0cde622a1f8e1c04877d8463912d04d973331ad4851f04de6915a"
282+
}
283+
}
284+
},
285+
"nbformat": 4,
286+
"nbformat_minor": 2
287+
}

0 commit comments

Comments
 (0)