Running a security analysis

You can use the module pypowsybl.security in order to perform a security analysis on a network. Please check out the examples below.

For detailed documentation of involved classes and methods, please refer to the API reference.

AC security analysis

To perform a security analysis, you need at least a network and a contingency on this network. In the result there are violations detected with the initial loadflow on the network. These violations are collected in pre_contingency_result. The results contain also the violations created by the contingency, they are collected by contingency in post_contingency_results :

>>> network = pp.network.create_eurostag_tutorial_example1_network()
>>> network.update_loads(id='LOAD', p0=800)
>>> security_analysis = pp.security.create_analysis()
>>> security_analysis.add_single_element_contingency('NHV1_NHV2_1', 'First contingency')
>>> result = security_analysis.run_ac(network)
>>> result.pre_contingency_result
ContingencyResult(contingency_id='', status=CONVERGED, limit_violations=[3])
>>> result.post_contingency_results
{'First contingency': ContingencyResult(contingency_id='First contingency', status=CONVERGED, limit_violations=[2])}
>>> result.limit_violations
                              subject_name   limit_type limit_name   limit  acceptable_duration  limit_reduction        value side
contingency_id    subject_id
                  NHV1_NHV2_1                   CURRENT              500.0           2147483647              1.0   623.568946  ONE
                  NHV1_NHV2_2                   CURRENT              500.0           2147483647              1.0   655.409876  TWO
                  VLHV1                     LOW_VOLTAGE              400.0           2147483647              1.0   398.917401
First contingency NHV1_NHV2_2                   CURRENT             1200.0                   60              1.0  1438.021676  ONE
                  NHV1_NHV2_2                   CURRENT              500.0           2147483647              1.0  1477.824335  TWO

Adding monitored Elements

This feature is used to get information on different element of the network after the loadflow’s computations. Information can be obtained on buses, branches and three windings transformers.

>>> network = pp.network.create_eurostag_tutorial_example1_network()
>>> security_analysis = pp.security.create_analysis()
>>> security_analysis.add_single_element_contingency('NHV1_NHV2_1', 'NHV1_NHV2_1')
>>> security_analysis.add_single_element_contingency('NGEN_NHV1', 'NGEN_NHV1')
>>> security_analysis.add_monitored_elements(voltage_level_ids=['VLHV2'])
>>> security_analysis.add_postcontingency_monitored_elements(branch_ids=['NHV1_NHV2_2'], contingency_ids=['NHV1_NHV2_1', 'NGEN_NHV1'])
>>> security_analysis.add_postcontingency_monitored_elements(branch_ids=['NHV1_NHV2_1'], contingency_ids='NGEN_NHV1')
>>> security_analysis.add_precontingency_monitored_elements(branch_ids=['NHV1_NHV2_2'])
>>> results = security_analysis.run_ac(network)
>>> results.bus_results
                                         v_mag  v_angle
contingency_id voltage_level_id bus_id
               VLHV2            NHV2    389.95    -3.51
NGEN_NHV1      VLHV2            NHV2    569.04    -1.71
NHV1_NHV2_1    VLHV2            NHV2    366.58    -7.50
>>> results.branch_results
                               p1     q1       i1      p2      q2       i2
contingency_id branch_id
               NHV1_NHV2_2 302.44  98.74   456.77 -300.43 -137.19   488.99
NGEN_NHV1      NHV1_NHV2_2 301.06   0.00   302.80 -300.19 -116.60   326.75
               NHV1_NHV2_1 301.06   0.00   302.80 -300.19 -116.60   326.75
NHV1_NHV2_1    NHV1_NHV2_2 610.56 334.06 1,008.93 -601.00 -285.38 1,047.83