Angle monitoring


Contents


Introduction #

Some CRAC files can define angle constraints on network elements.
These are constraints that monitor that the current phase shift between two network elements does not exceed a given threshold.
FARAO allows modelling these constraints in AngleCnec objects.
However, modelling the impact of remedial actions on angle values is highly complex and non-linear. This is why CASTOR does not inherently support angle constraints.
The AngleMonitoring package allows monitoring angle values after a RAO has been run, and activating re-dispatch remedial actions in case of constrained elements.

Angle monitoring

The Java API #

You can easily call the angle monitoring module using the JAVA API:

  1. Build an AngleMonitoring object using:
    public AngleMonitoring(Crac crac, Network network, RaoResult raoResult, CimGlskDocument cimGlskDocument)
    

    With:

    • crac: the CRAC object used for the RAO, and containing AngleCnecs to be monitored.
    • network: the network to be monitored.
    • raoResult: the RaoResult object containing selected remedial actions (that shall be applied on the network before monitoring angle values)
    • cimGlskDocument: the CIM GLSK document that will allow proper application of re-dispatch remedial actions.
  2. Run the monitoring algorithm using the constructed object’s following method:
    public RaoResult runAndUpdateRaoResult(String loadFlowProvider, LoadFlowParameters loadFlowParameters, int numberOfLoadFlowsInParallel, OffsetDateTime glskOffsetDateTime)
    

    With:

    • loadFlowProvider: the name of the load-flow computer to use. This should refer to a PowSyBl load flow provider implementation
    • loadFlowParameters: the PowSyBl LoadFlowParameters object to configure load-flow computation.
    • numberOfLoadFlowsInParallel: the number of contingencies to monitor in parallel, allowing a maximum utilization of your computing resources (set it to your number of available CPUs).
    • glskOffsetDateTime: the timestamp for which the computation is made, as it is necessary to correctly read relevant values from the CIM GLSK file.

💡 NOTE
For now, only CIM GLSK format is supported by the angle monitoring module

Here is a complete example:

Crac crac = ...
Network network = ...
RaoResult raoResult = Rao.find(...).run(...)
CimGlskDocument glsk = ...
LoadFlowParameters loadFlowParameters = ...
OffsetDateTime glskOffsetDateTime = ...
RaoResult raoResultWithAngleMonitoring = new AngleMonitoring(crac, network, raoResult, glsk).runAndUpdateRaoResult("OpenLoadFlow", loadFlowParameters, 2, glskOffsetDateTime);

The angle monitoring result #

The method presented above generates a new RAO result object, which is equivalent to the initial one, augmented by the relevant results of the angle monitoring algorithm :

The angle monitoring algorithm #

Here is a detailed description of how the angle monitoring algorithm operates:

  • Apply optimal preventive remedial actions from RaoResult on the network
  • From the CRAC, get the set of states on which AngleCnecs exist
  • For each of these states, monitor angles:
    • Use a new copy of the network
    • If the state is not preventive,
      • apply the contingency on the network
      • from the RaoResult, apply on the network the optimal remedial actions decided by the RAO (automatic and curative)
    • Compute load-flow
      • If it diverges, return the following content for this state, then move on to the next state:
        • the angles of the angle CNECs equal to NaN
        • no applied remedial actions
        • status DIVERGENT
    • Compute the angles for all angle CNECs, as the maximum phase difference between the 2 voltage levels (1)
      • Angle in degrees = 180 / pi * (max(angle on buses of exporting voltage level) - min(angle on buses of importing voltage level))
    • Compare the angles to their thresholds. For the AngleCnecs that have an angle overshoot, get the associated remedial actions (2)
      • If the AngleCnec has no associated RA, then the angle constraint cannot be remedied: move on to the next AngleCnec.
      • If the state is preventive, do not apply any PRA (it would be incoherent with the RAO results). Move on to the next state.
      • For every RA:
        • If the remedial action is not a network action, do not apply it (if it’s a RangeAction, we cannot know which set-point to use). Move on to the next RA.
        • If the RA is a network action, apply it on the network.
    • If any injection-set-point RA was applied, create and apply the re-dispatch that shall compensate the loss of generation / load (3):
      • The amount of power to re-dispatch is the net sum (generation - load) of power generations & loads affected by the RAs, before changing the set-points
      • The GLSK to use shall be the same as the one used for the whole process
      • Exclude from the re-dispatching all the generators & loads that were modified by an injection-set-point RA, since they should not be affected
    • If any RA was applied, recompute the load-flow
      • If it diverges, return the following content for this state, then move on to the next state:
        • the angles of the AngleCnecs equal to what was computed in step (1)
        • no applied remedial actions
        • security DIVERGENT
    • Re-compute all angle values (4)
    • Create an intermediary result, with angles computed in (4), list of applied remedial actions in (2), and secure flag set to SECURE if there is no more overshoot (after re-verifying thresholds)
  • Assemble all the state-specific result in one overall result and update the RAO result object

Angle monitoring algorithm

The output logs #

In the logs, the start and end of different steps are logged:

  • Start and end of the angle monitoring algorithm
  • Start and end of the monitoring of each state (preventive or post-contingency)
  • Start and end of each load-flow computation

Also, the following information is logged:

  • Applied remedial actions to relieve angle constraints
  • At the end of each state monitoring, the list of remaining angle constraints
  • At the end of the monitoring algorithm, the list of remaining angle constraints

Example 1:
In this example, a curative constraint (after contingency “Co-1”) induces the implementation of a CRA, but this CRA is not enough to solve the constraint.

INFO  c.f.f.commons.logs.RaoBusinessLogs - ----- Angle monitoring [start]
INFO  c.f.farao.commons.logs.TechnicalLogs - Using base network 'urn:uuid:4f4a3f29-6892-49ea-bfc1-92051973c799' on variant 'InitialState'
INFO  c.f.f.commons.logs.RaoBusinessLogs - -- Monitoring angles at state "Co-1 - curative" [start]
INFO  c.f.farao.commons.logs.TechnicalLogs - Load-flow computation [start]
INFO  c.f.farao.commons.logs.TechnicalLogs - Load-flow computation [end]
INFO  c.f.f.commons.logs.RaoBusinessLogs - Applying the following remedial action(s) in order to reduce constraints on CNEC "AngleCnec1": RA-1
INFO  c.f.f.commons.logs.RaoBusinessLogs - Redispatching 108.0 MW in BE [start]
INFO  c.f.f.commons.logs.RaoBusinessLogs - Redispatching 108.0 MW in BE [end]
INFO  c.f.f.commons.logs.RaoBusinessLogs - Redispatching 150.0 MW in NL [start]
INFO  c.f.f.commons.logs.RaoBusinessLogs - Redispatching 150.0 MW in NL [end]
INFO  c.f.farao.commons.logs.TechnicalLogs - Load-flow computation [start]
INFO  c.f.farao.commons.logs.TechnicalLogs - Load-flow computation [end]
INFO  c.f.f.commons.logs.RaoBusinessLogs - Some AngleCnecs are not secure:
INFO  c.f.f.commons.logs.RaoBusinessLogs - AngleCnec AngleCnec1 (with importing network element _d77b61ef-61aa-4b22-95f6-b56ca080788d and exporting network element _8d8a82ba-b5b0-4e94-861a-192af055f2b8) at state Co-1 - curative has an angle of 5°.
INFO  c.f.f.commons.logs.RaoBusinessLogs - -- Monitoring angles at state "Co-1 - curative" [end]
INFO  c.f.f.commons.logs.RaoBusinessLogs - -- Monitoring angles at state "Co-2 - curative" [start]
INFO  c.f.farao.commons.logs.TechnicalLogs - Load-flow computation [start]
INFO  c.f.farao.commons.logs.TechnicalLogs - Load-flow computation [end]
INFO  c.f.f.commons.logs.RaoBusinessLogs - All AngleCnecs are secure.
INFO  c.f.f.commons.logs.RaoBusinessLogs - -- Monitoring angles at state "Co-2 - curative" [end]
INFO  c.f.f.commons.logs.RaoBusinessLogs - Some AngleCnecs are not secure:
INFO  c.f.f.commons.logs.RaoBusinessLogs - AngleCnec AngleCnec1 (with importing network element _d77b61ef-61aa-4b22-95f6-b56ca080788d and exporting network element _8d8a82ba-b5b0-4e94-861a-192af055f2b8) at state Co-1 - curative has an angle of 5°.
INFO  c.f.f.commons.logs.RaoBusinessLogs - ----- Angle monitoring [end]

See also

Angle CNECs, GLSK, RAO result