Skip to content

Commit b1e5f5f

Browse files
committed
reverting to pp 1.11.2
1 parent 1c18847 commit b1e5f5f

File tree

9 files changed

+110
-32
lines changed

9 files changed

+110
-32
lines changed

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ dependencies = [
1313
"pika>=1.3.2",
1414
"pip>=25.1.1",
1515
"pydantic>=2.11.5",
16-
"pypowsybl>=1.12.0",
16+
"pypowsybl>=1.11.0",
1717
"rdflib>=7.1.4",
1818
"requests>=2.32.3",
1919
"setuptools>=80.4.0",

rao/config.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ RMQ_QUEUE_IN = rao.violations
55
OPTIMIZE_ONLY_CURRENT_VIOLATIONS = True
66
CRAC_USE_LIMITS_FROM_MODEL = True
77
VIOLATION_THRESHOLD_PERCENT = 100
8+
CONTINGENCIES_COUNT_THRESHOLD = 10
89
ELASTIC_RESULTS_INDEX = rao-results
910
S3_BUCKET_RESULTS = opde-confidential-analyses
1011
DEBUG = False

rao/crac/models.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,11 +120,16 @@ class Config:
120120
def exclude_3w_transformer_from_flow_cnecs(self, values: List[FlowCnec]) -> List[FlowCnec]:
121121
# TODO TEMPORARY FILTER - remove after September release
122122
logger.warning(f"[TEMPORARY] Excluding 3W transformers from serialized CNECs for operator: ELERING")
123+
logger.warning(f"[TEMPORARY] Excluding paired dangling lines from serialized CNECs")
123124
result = []
124125
for cnec in values:
125126
if "AT" in cnec.name and "10X1001A1001A39W" in cnec.operator:
126127
logger.warning(f"3W transformer CNEC excluded: {cnec.name} [{cnec.instant}]")
127128
continue
129+
# TODO - relevant until pypowsybl 1.11.2
130+
elif "Tie-line" in cnec.description:
131+
logger.warning(f"Dangling line CNEC excluded: {cnec.name} [{cnec.instant}]")
132+
continue
128133
else:
129134
result.append(cnec)
130135

rao/handlers.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,9 @@ def __init__(self, current_violations_only: bool = OPTIMIZE_ONLY_CURRENT_VIOLATI
4040
except Exception as e:
4141
logger.error(f"Failed to initialize ObjectStorage service: {e}")
4242

43+
# Loading configuration
44+
self.lf_settings_manager = LoadflowSettingsManager()
45+
4346
# Metadata
4447
self.scenario_timestamp = None
4548
self.network_model_meta = None
@@ -194,6 +197,14 @@ def handle(self, message: bytes, properties: object, **kwargs):
194197
else:
195198
logger.info(f"SAR profile contains number of relevant violations: {len(violations)}")
196199

200+
# Exit if there are more unique contingencies to be optimized than configured limit
201+
if 'ContingencyPowerFlowResult.Contingency' in violations.columns:
202+
_contingencies_count = len(violations['ContingencyPowerFlowResult.Contingency'].unique())
203+
logger.info(f"SAR profile contains number of unique contingencies: {_contingencies_count}")
204+
if _contingencies_count > CONTINGENCIES_COUNT_THRESHOLD:
205+
logger.error("Number of unique contingencies is above threshold and message can not be processed")
206+
return message, properties
207+
197208
# Get network model from object storage
198209
content_reference = properties.headers.get('content-reference', None)
199210
if not content_reference:
@@ -203,13 +214,13 @@ def handle(self, message: bytes, properties: object, **kwargs):
203214
logger.info(f"Loading network model to pypowsybl")
204215
self.network = pypowsybl.network.load_from_binary_buffer(
205216
buffer=network_object,
206-
parameters=LoadflowSettingsManager().config['CGMES_IMPORT_PARAMETERS'])
217+
parameters=self.lf_settings_manager.config['CGMES_IMPORT_PARAMETERS'])
207218

208219
# Solve initial loadflow on retrieved model
209220
logger.info(f"Solve initial loadflow analysis")
210221
lf_result = pypowsybl.loadflow.run_ac(
211222
network=self.network,
212-
parameters=LoadflowSettingsManager().build_pypowsybl_parameters())
223+
parameters=self.lf_settings_manager.build_pypowsybl_parameters())
213224
logger.info(f"Loadflow status: {lf_result[0]}")
214225
if lf_result[0].status.value:
215226
logger.error(f"Initial load flow computation failed, exiting message handling")

rao/parameters/loadflow.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,6 @@
8787
dc_use_transformer_ratio=True,
8888
countries_to_balance=[],
8989
connected_component_mode=pypowsybl.loadflow.ConnectedComponentMode.ALL,
90-
hvdc_ac_emulation=True,
9190
dc_power_factor=1.0,
9291
provider_parameters=LF_PROVIDER,
9392
)

rao/parameters/manager.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,10 @@ def __init__(self, override_path: str | None = None):
4040
# Decide override path from arg or env
4141
env_path = os.environ.get('LOADFLOW_CONFIG_OVERRIDE_PATH')
4242
self.override_path = Path(override_path or env_path) if (override_path or env_path) else None
43+
if self.override_path:
44+
logger.info(f"Loadflow settings override path: {self.override_path}")
45+
else:
46+
logger.info("Using default loadflow settings")
4347

4448
# Build defaults snapshot (dict-based), then merge overrides if any
4549
base = {
@@ -242,6 +246,8 @@ class RaoSettingsManager:
242246

243247
RAO_PARAMETERS_VERSION_MAP = {
244248
"1.11.0": f"{Path(__file__).parent.joinpath('rao_v30.json')}",
249+
"1.11.1": f"{Path(__file__).parent.joinpath('rao_v30.json')}",
250+
"1.11.2": f"{Path(__file__).parent.joinpath('rao_v30.json')}",
245251
"1.12.0": f"{Path(__file__).parent.joinpath('rao_v31.json')}",
246252
}
247253

rao/parameters/rao_v30.json

Lines changed: 70 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -59,10 +59,11 @@
5959
"load-flow-parameters" : {
6060
"version" : "1.9",
6161
"voltageInitMode" : "UNIFORM_VALUES",
62-
"transformerVoltageControlOn" : false,
62+
"transformerVoltageControlOn" : true,
6363
"phaseShifterRegulationOn" : false,
64+
"useReactiveLimits" : true,
6465
"twtSplitShuntAdmittance" : false,
65-
"shuntCompensatorVoltageControlOn" : false,
66+
"shuntCompensatorVoltageControlOn" : true,
6667
"readSlackBus" : true,
6768
"writeSlackBus" : true,
6869
"dc" : false,
@@ -75,22 +76,80 @@
7576
"dcPowerFactor" : 1.0,
7677
"extensions" : {
7778
"open-load-flow-parameters" : {
78-
"plausibleActivePowerLimit" : 10000.0,
79-
"minPlausibleTargetVoltage" : 0.8,
80-
"maxPlausibleTargetVoltage" : 1.2,
81-
"maxNewtonRaphsonIterations" : 30,
82-
"newtonRaphsonConvEpsPerEq" : 1.0E-3,
83-
"slackBusSelectionMode" : "MOST_MESHED",
79+
"slackBusSelectionMode" : "LARGEST_GENERATOR",
8480
"slackBusesIds" : [ ],
81+
"slackDistributionFailureBehavior" : "LEAVE_ON_SLACK_BUS",
82+
"voltageRemoteControl" : true,
83+
"voltageRemoteControlRobustMode" : true,
8584
"lowImpedanceBranchMode" : "REPLACE_BY_ZERO_IMPEDANCE_LINE",
8685
"loadPowerFactorConstant" : false,
86+
"plausibleActivePowerLimit" : 10000.0,
87+
"newtonRaphsonStoppingCriteriaType" : "UNIFORM_CRITERIA",
88+
"maxActivePowerMismatch" : 0.01,
89+
"maxReactivePowerMismatch" : 0.01,
90+
"maxVoltageMismatch" : 1.0E-4,
91+
"maxAngleMismatch" : 1.0E-5,
92+
"maxRatioMismatch" : 1.0E-5,
93+
"maxSusceptanceMismatch" : 1.0E-4,
8794
"slackBusPMaxMismatch" : 0.1,
8895
"voltagePerReactivePowerControl" : false,
89-
"voltageInitModeOverride" : "NONE",
90-
"transformerVoltageControlMode" : "AFTER_GENERATOR_VOLTAGE_CONTROL",
96+
"generatorReactivePowerRemoteControl" : false,
97+
"transformerReactivePowerControl" : false,
98+
"maxNewtonRaphsonIterations" : 30,
99+
"maxOuterLoopIterations" : 20,
100+
"newtonRaphsonConvEpsPerEq" : 0.001,
101+
"voltageInitModeOverride" : "FULL_VOLTAGE",
102+
"transformerVoltageControlMode" : "INCREMENTAL_VOLTAGE_CONTROL",
103+
"shuntVoltageControlMode" : "INCREMENTAL_VOLTAGE_CONTROL",
104+
"minPlausibleTargetVoltage" : 0.8,
105+
"maxPlausibleTargetVoltage" : 1.2,
106+
"minNominalVoltageTargetVoltageCheck" : 20.0,
91107
"minRealisticVoltage" : 0.5,
92108
"maxRealisticVoltage" : 1.5,
93-
"reactiveRangeCheckMode" : "MAX"
109+
"lowImpedanceThreshold" : 3.0E-5,
110+
"reactiveRangeCheckMode" : "MAX",
111+
"networkCacheEnabled" : false,
112+
"svcVoltageMonitoring" : true,
113+
"stateVectorScalingMode" : "NONE",
114+
"maxSlackBusCount" : 1,
115+
"debugDir" : null,
116+
"incrementalTransformerRatioTapControlOuterLoopMaxTapShift" : 3,
117+
"secondaryVoltageControl" : false,
118+
"reactiveLimitsMaxPqPvSwitch" : 3,
119+
"phaseShifterControlMode" : "CONTINUOUS_WITH_DISCRETISATION",
120+
"alwaysUpdateNetwork" : false,
121+
"mostMeshedSlackBusSelectorMaxNominalVoltagePercentile" : 95.0,
122+
"reportedFeatures" : [ ],
123+
"slackBusCountryFilter" : ["PL"],
124+
"actionableSwitchesIds" : [ ],
125+
"actionableTransformersIds" : [ ],
126+
"asymmetrical" : false,
127+
"reactivePowerDispatchMode" : "Q_EQUAL_PROPORTION",
128+
"outerLoopNames" : null,
129+
"useActiveLimits" : true,
130+
"disableVoltageControlOfGeneratorsOutsideActivePowerLimits" : false,
131+
"lineSearchStateVectorScalingMaxIteration" : 10,
132+
"lineSearchStateVectorScalingStepFold" : 1.3333333333333333,
133+
"maxVoltageChangeStateVectorScalingMaxDv" : 0.1,
134+
"maxVoltageChangeStateVectorScalingMaxDphi" : 0.17453292519943295,
135+
"linePerUnitMode" : "IMPEDANCE",
136+
"useLoadModel" : false,
137+
"dcApproximationType" : "IGNORE_R",
138+
"simulateAutomationSystems" : false,
139+
"acSolverType" : "NEWTON_RAPHSON",
140+
"maxNewtonKrylovIterations" : 100,
141+
"newtonKrylovLineSearch" : false,
142+
"referenceBusSelectionMode" : "GENERATOR_REFERENCE_PRIORITY",
143+
"writeReferenceTerminals" : true,
144+
"voltageTargetPriorities" : [ "GENERATOR", "TRANSFORMER", "SHUNT" ],
145+
"transformerVoltageControlUseInitialTapPosition" : false,
146+
"generatorVoltageControlMinNominalVoltage" : -1.0,
147+
"fictitiousGeneratorVoltageControlCheckMode" : "FORCED",
148+
"areaInterchangeControl" : false,
149+
"areaInterchangeControlAreaType" : "ControlArea",
150+
"areaInterchangePMaxMismatch" : 2.0,
151+
"forceTargetQInReactiveLimits" : false,
152+
"disableInconsistentVoltageControls" : false
94153
}
95154
}
96155
}

rao/parameters/rao_v31.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@
5959
"voltageInitMode" : "UNIFORM_VALUES",
6060
"transformerVoltageControlOn" : true,
6161
"phaseShifterRegulationOn" : false,
62+
"useReactiveLimits" : true,
6263
"twtSplitShuntAdmittance" : false,
6364
"shuntCompensatorVoltageControlOn" : true,
6465
"readSlackBus" : true,

uv.lock

Lines changed: 13 additions & 17 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)