Open olperr1 opened 1 year ago
For the first implementation, the reduction is a double value between 1 and 0 (normal, it is a reduction...). A non covered need it that sometimes, operators want a limit to be ignored. So instead of a double describing a reduction, we have to find a way to say that the limit just has to be skipped (but it is not really a reduction...).
Describe the current behavior
During security analyses, we cannot detect when a specific limit is almost reached. The default
LimitViolationDetector
can be configured to support a limit reduction, but this reduction is applied to every limit.For instance, we can configure the security analysis to return limit violations when the current is greater than 95% of the limit value, but it applies to all the limits of all the network elements, and thus we can not configure the reduction to be 90% for a specific branch and 100% for all the other branches.
Describe the expected behavior
I. Description
General description
During security analyses, it should be possible to apply different limit reductions depending on several criteria:
These criteria can be cumulative (several can be used at the same time to define a limit reduction).
Because a limit can validate the criteria of several limit reductions, the order the limit reductions are declared is important. We will consider that the limit reduction to apply for a limit is the last encountered when reading them from start to end.
Note that these reductions are taken into account when determining the action to apply during security analyses with remedial acitons. For instance, if for a branch the reduced limits are violated but not the original limits and if a remedial action was defined, this one will be applied.
Criteria details
1. Limit type
The type of the limits on which to apply the reduction must be specified (mandatory item). Types to support are:
CURRENT
: for current limits;ACTIVE_POWER
: for active power limits;APPARENT_POWER
: for apparent power limits.2. Use cases (Monitoring or action)
The reduction may applies:
for monitoring only: when a limit is associated with an action and a reduction is applied for monitoring only, if the encountered value is between the reduced limit value and the original limit value, the action should not be applied;
for action: when a limit is associated with an action and a reduction is applied for action, if the encountered value is between the reduced limit value and the original limit value, the action should be applied.
This behavior will be described as a boolean
monitoringOnly
. When it istrue
, the1.
case is used, else the2.
.3. Contingency context
Zero or one contingency context can be specified. It contains:
ALL
: corresponding to all contingencies and pre-contingency situations;NONE
: corresponding to pre-contingency situations;SPECIFIC
: corresponding to a specific contingency situation;ONLY_CONTINGENCIES
: corresponding to all contingency situations (without the pre-contingency one).SPECIFIC
, the id of the contingency.When no contingency context is present, the default is to use the
ALL
policy.4. Network elements
We can define the network elements whose limits will be affected by the limit reductions in using several criteria:
If no network elements is specified, the limit reduction applies to all of them.
5. Limit duration characteristics
Zero or several duration criteria can be specified. Each one contains:
PERMANENT
: corresponding to permanent limits only;TEMPORARY
: corresponding to temporary limits only.TEMPORARY
, one of the following options to restrict them according to their acceptable duration:ALL
: to select all temporary limits, regardless their acceptable duration;EQUALITY
: to select the temporary limits whose acceptable duration is equal to a specified value, with:value
: the said value.INTERVAL
: to select the temporary limits whose acceptable duration is within an interval, with:lowBound
andhighBound
: minimum and maximum duration, each can be null;lowClosed
andhighClosed
: is the interval open (false
) or closed (true
) on respectively the lower and the upper boundaries? This attribute is facultative if the corresponding bound value isnull
.When no duration criteria are present, the reduction should be applied to all permanent and temporary limits.
When several duration criteria are specified, the limit reductions applies to each one. For instance, if both criteria
PERMANENT
and (TEMPORARY
;EQUALITY
; 600) are defined, the limit reduction will apply to permanent limits and 600s limits.Point of attention
Having two limits
L1
andL2
on the same network element, ifL1
has a smaller acceptable duration, we expectL1
to have a higher value thanL2
.After limit reductions application, the value of
L1
may be lower than the one ofL2
.For instance, with the following limits on a line (ordered by ascending values):
L2
: acceptable duration = 20min. ; value = 90MWL1
: acceptable duration = 1min. ; value = 100MWand the following limitReduction:
LR
: limitsTime=60 ; ratio = 0.8After the application of the limit reductions, we have the following limits:
L1'
: acceptable duration = 1min. ; value = 80MWL2
: acceptable duration = 20min. ; value = 90MWThis could lead to problems with the actual code (see for instance
LimitViolationUtils.getOverload(LoadingLimits, double, float)
).For now, we will ignore the presence à
L2
and only considerL1'
in our algorithms. When retrieving the limits of an element, a pre-processing should thus be done to order to work only with the limits to consider.Application
API update
These limit reduction definitions will be added as a new parameter of
SecurityAnalysis.Runner.runAsync(…)
and ofSecurityAnalysisProvider.run(…)
.Using these data
Concept
During the analysis, when the limits of a network element are examined, the reductions must apply. The analysis must then work on an altered copy of the original limits, obtained in applying the limit reductions and in removing the unwanted limits (see section "Point of attention").
Important note: the limits in the network must NOT be modified. (Since the limit reductions are not the same for every contingency context, it will be difficult anyway to determine the values to use.)
When limit violation filters and limit reductions are both defined, the filter should have the prevalence. For instance, if the filter is defined with a minimum base voltage of 90kV and if a current limit reduction is defined for a 63kV line, no violations must be detected, regardless of the line's current. In load flow implementations where the filters are applied before detecting the violations (such as powsybl-open-loadflow), the reductions should not be applied for an identifiable if a filter excludes it.
Utility classes
To compute the reduced limits, a new utility object, a
ReducedLimitsComputer
, will be created. Different implementations will be available:F
, which will process the limit reduction definitions and compute the reduced limits of objects of typeF
;ReducedLimitsComputer
objects will have a method<T> T getLimitsWithAppliedReduction(F networkElement, ThreeSides side, LimitType limitType)
with:
T
: the type of the limits;networkElement
: the type of the network element to process;side
: the side of the network element;limitType
: the limit type (ACTIVE_POWER, CURRENT...). The reduction definitions will be used to create this objectNB: The studied network element is handed over via an interface. Adapters will be implemented to turn existing network element representations (for example IIDM) into implementations of the
NetworkElementInterface
. This interface should contain methods to retrieve the following data from the network element:getLimitsWithAppliedReduction
in an IIDM context or in an OLF context (or in another context).II. Concept of code
Classes
Limit reduction definitions
Contingency contexts
These classes already exist in the
contingency-api
module.Equipment criteria
Similar criteria already exist to specify contingency lists, in the
contingency-api
module. Some code may probably be shared between these two functionalities (see the content ofcom.powsybl.contingency.contingency.list.criterion
and the corresponding (de)serialization -CriterionSerializer
andCriterionDeserializer
).Limit duration criteria
General types and interface
Permanent duration criterion
Temporary duration criteria
(De)serialization
The limit reductions should be serializable and deserializable in JSON.
Here is an example of a JSON serialized limit reduction list:
In this example, the limit reductions defined are:
Describe the motivation
No response
Extra Information
For the contingency descriptions, PowSyBl has a notion of
ContingencyContext
, which is used for sensitivity factors description and in the operator strategies. It proposes the 3 cases:ContingencyContextType.ALL
;ContingencyContextType.NONE
;ContingencyContextType.SPECIFIC
. But it doesn't already support theONLY_CONTINGENCIES
. This policy should be added.Regarding the previous point, the support of the
ONLY_CONTINGENCIES
policy should be also added inpowsybl-open-loadflow
.