Running a dynamic simulation with dynawaltz¶
You can use the module pypowsybl.dynamic
in order to run time domain simulation on networks.
Start by importing the module:
import pypowsybl.network as pn
import pypowsybl.dynamic as dyn
Prerequisites¶
The pypowsybl config file (generally located at ~/.itools/config.yaml) must define the dynawaltz section to find your dynawaltz installation and defaults parameters Here is an example of a simple config.yaml file. It uses the same configurations as in powsybl-dynawatlz.
dynamic-simulation-default-parameters:
startTime: 0
stopTime: 30
dynawaltz:
homeDir: PATH_TO_DYNAWO
debug: true
dynawaltz-default-parameters:
parametersFile: ./models.par
network.parametersFile: ./network.par
network.parametersId: "1"
solver.type: IDA
solver.parametersFile: ./solver.par
solver.parametersId: "1"
Parameters¶
To make a dynamic simulation, you need multiple things :
A dynamic mapping, it links the static elements (generators, loads, lines) to their dynamic behavior (alpha beta load)
A curve mapping, it records the given values to be watch by the simulation tool. Curves are the output of the simulation
A event mapping, it maps the different events. (their time event is done in configurations file for now)
There is a class for each of these elements.
You will see a lot of arguments called parameterSetId. Dynawaltz use a lot of parameters that will be stored in files.
Pypowsybl will find the path to this file in the powsybl config.yaml in dynawaltz-default-parameters.parametersFile value.
The parameterSetId argument must match an id in this file (generally called models.par).
Simple example¶
To run a Dynawaltz simulation:
import pypowsybl.dynamic as dyn
import pypowsybl as pp
# load a network
network = pp.network.load("./network.iidm")
# dynamic mapping
model_mapping = dyn.ModelMapping()
model_mapping.add_alpha_beta_load("LOAD_1", "LAB") # and so on
# events mapping
events = dyn.EventMapping()
events.add_event("EQD", dyn.EventType.BRANCH_DISCONNECTION, "BRANCH_1")
# curves mapping
curves = dyn.CurveMapping()
curves.add_curves("LOAD_2", ["load_PPu", "load_QPu"])
# simulations parameters
start_time = 0
end_time = 50
sim = dyn.Simulation()
# running the simulation
results = sim.run(network, model_mapping, events, curves, start_time, end_time)
# getting the results
results.curves() # dataframe containing the curves mapped