# Running a Simulation¶

To run a simulation, simply initialize one or multiple controllers (see ref to controllers). An overview of all controllers registered in the net is given in the controller table:

print(net.controller)


Then, run a power flow with the run_control option set to true:

import pandapower as pp
pp.runpp(net, run_control=True)


The runpp function will now run multiple power flow calculations until all registered controllers are converged.

Instead of calling runpp it is also possible to call run_control from the control module directly:

import pandapower.control as control
control.run_control(net)


By default, this will do the same as runpp with run_control=True. Calling the run_control function however gives you more flexibility to configurate the controller loop simulation.

pandapower.control.run_control(net, ctrl_variables=None, max_iter=30, continue_on_lf_divergence=False, **kwargs)

Main function to call a net with controllers Function is running control loops for the controllers specified in net.controller

INPUT:

net - pandapower network with controllers included in net.controller

OPTIONAL:

ctrl_variables (dict, None) - variables needed internally to calculate the power flow. See prepare_run_ctrl() max_iter (int, 30) - The maximum number of iterations for controller to converge

Runs controller until each one converged or max_iter is hit.

1. Call initialize_control() on each controller

2. Calculate an inital power flow (if it is enabled)

3. Repeats the following steps in ascending order of controller_order until total convergence of all controllers for each level:

1. Evaluate individual convergence for all controllers in the level

2. Call control_step() for all controllers in the level on diverged controllers

3. Calculate power flow (or optionally another function like runopf or whatever you defined)

4. Call finalize_control() on each controller