Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -1995,7 +1995,7 @@ static LfNetworkParameters getNetworkParameters(LoadFlowParameters parameters, O
.setPlausibleActivePowerLimit(parametersExt.getPlausibleActivePowerLimit())
.setUseActiveLimits(parametersExt.isUseActiveLimits())
.setDisableVoltageControlOfGeneratorsOutsideActivePowerLimits(parametersExt.isDisableVoltageControlOfGeneratorsOutsideActivePowerLimits())
.setComputeMainConnectedComponentOnly(parameters.getComponentMode() == LoadFlowParameters.ComponentMode.MAIN_CONNECTED)
.setComponentMode(parameters.getComponentMode())
.setCountriesToBalance(parameters.getCountriesToBalance())
.setDistributedOnConformLoad((parameters.isDistributedSlack() || parametersExt.isAreaInterchangeControl()) && parameters.getBalanceType() == LoadFlowParameters.BalanceType.PROPORTIONAL_TO_CONFORM_LOAD)
.setPhaseControl(parameters.isPhaseShifterRegulationOn())
Expand Down Expand Up @@ -2121,7 +2121,7 @@ public static DcLoadFlowParameters createDcParameters(LoadFlowParameters paramet
.setPlausibleActivePowerLimit(parametersExt.getPlausibleActivePowerLimit())
.setUseActiveLimits(parametersExt.isUseActiveLimits())
.setDisableVoltageControlOfGeneratorsOutsideActivePowerLimits(parametersExt.isDisableVoltageControlOfGeneratorsOutsideActivePowerLimits())
.setComputeMainConnectedComponentOnly(parameters.getComponentMode() == LoadFlowParameters.ComponentMode.MAIN_CONNECTED)
.setComponentMode(parameters.getComponentMode())
.setCountriesToBalance(parameters.getCountriesToBalance())
.setDistributedOnConformLoad((parameters.isDistributedSlack() || parametersExt.isAreaInterchangeControl()) && parameters.getBalanceType() == LoadFlowParameters.BalanceType.PROPORTIONAL_TO_CONFORM_LOAD)
.setPhaseControl(parameters.isPhaseShifterRegulationOn())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ public class LfNetworkParameters {

private boolean disableVoltageControlOfGeneratorsOutsideActivePowerLimits = DISABLE_VOLTAGE_CONTROL_OF_GENERATORS_OUTSIDE_ACTIVE_POWER_LIMITS_DEFAULT_VALUE;

private boolean computeMainConnectedComponentOnly = true;
private LoadFlowParameters.ComponentMode componentMode = LoadFlowParameters.ComponentMode.MAIN_CONNECTED;

private Set<Country> countriesToBalance = Collections.emptySet();

Expand Down Expand Up @@ -176,7 +176,7 @@ public LfNetworkParameters(LfNetworkParameters other) {
this.plausibleActivePowerLimit = other.plausibleActivePowerLimit;
this.useActiveLimits = other.useActiveLimits;
this.disableVoltageControlOfGeneratorsOutsideActivePowerLimits = other.disableVoltageControlOfGeneratorsOutsideActivePowerLimits;
this.computeMainConnectedComponentOnly = other.computeMainConnectedComponentOnly;
this.componentMode = other.componentMode;
this.countriesToBalance = new HashSet<>(other.countriesToBalance);
this.distributedOnConformLoad = other.distributedOnConformLoad;
this.phaseControl = other.phaseControl;
Expand Down Expand Up @@ -209,6 +209,8 @@ public LfNetworkParameters(LfNetworkParameters other) {
this.areaInterchangeControl = other.areaInterchangeControl;
this.areaInterchangeControlAreaType = other.areaInterchangeControlAreaType;
this.forceTargetQInReactiveLimits = other.forceTargetQInReactiveLimits;
this.disableInconsistentVoltageControls = other.disableInconsistentVoltageControls;
this.extrapolateReactiveLimits = other.extrapolateReactiveLimits;
this.generatorsWithZeroMwTargetAreNotStarted = other.generatorsWithZeroMwTargetAreNotStarted;
this.disableInconsistentVoltageControls = other.isDisableInconsistentVoltageControls();
this.extrapolateReactiveLimits = other.extrapolateReactiveLimits;
Expand Down Expand Up @@ -295,12 +297,12 @@ public LfNetworkParameters setDisableVoltageControlOfGeneratorsOutsideActivePowe
return this;
}

public boolean isComputeMainConnectedComponentOnly() {
return computeMainConnectedComponentOnly;
public LoadFlowParameters.ComponentMode getComponentMode() {
return componentMode;
}

public LfNetworkParameters setComputeMainConnectedComponentOnly(boolean computeMainConnectedComponentOnly) {
this.computeMainConnectedComponentOnly = computeMainConnectedComponentOnly;
public LfNetworkParameters setComponentMode(LoadFlowParameters.ComponentMode componentMode) {
this.componentMode = componentMode;
return this;
}

Expand Down Expand Up @@ -661,7 +663,7 @@ public String toString() {
", twtSplitShuntAdmittance=" + twtSplitShuntAdmittance +
", breakers=" + breakers +
", plausibleActivePowerLimit=" + plausibleActivePowerLimit +
", computeMainConnectedComponentOnly=" + computeMainConnectedComponentOnly +
", componentMode=" + componentMode +
", countriesToBalance=" + countriesToBalance +
", distributedOnConformLoad=" + distributedOnConformLoad +
", phaseControl=" + phaseControl +
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1296,11 +1296,13 @@ public List<LfNetwork> load(Network network, LfTopoConfig topoConfig, LfNetworkP
}
}

Stream<Map.Entry<Pair<Integer, Integer>, List<Bus>>> filteredBusesByCcStream = parameters.isComputeMainConnectedComponentOnly()
? busesByCc.entrySet().stream().filter(e -> e.getKey().getLeft() == ComponentConstants.MAIN_NUM)
: busesByCc.entrySet().stream();
Stream<Map.Entry<Pair<Integer, Integer>, List<Bus>>> filteredBusesByComponentStream = switch (parameters.getComponentMode()) {
case MAIN_CONNECTED -> busesByCc.entrySet().stream().filter(e -> e.getKey().getLeft() == ComponentConstants.MAIN_NUM);
case MAIN_SYNCHRONOUS -> busesByCc.entrySet().stream().filter(e -> e.getKey().getRight() == ComponentConstants.MAIN_NUM);
case ALL_CONNECTED -> busesByCc.entrySet().stream();
};

List<LfNetwork> lfNetworks = filteredBusesByCcStream
List<LfNetwork> lfNetworks = filteredBusesByComponentStream
.map(e -> {
var networkKey = e.getKey();
int numCc = networkKey.getLeft();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -366,16 +366,14 @@ SecurityAnalysisResult runSimulationsOnAllComponents(LfNetworkList networks, Lis
}

static List<LfNetwork> getNetworksToSimulate(LfNetworkList networks, LoadFlowParameters.ComponentMode mode) {

if (LoadFlowParameters.ComponentMode.MAIN_CONNECTED.equals(mode)) {
return networks.getList().stream()
.filter(n -> n.getNumCC() == ComponentConstants.MAIN_NUM && n.getValidity().equals(LfNetwork.Validity.VALID)).toList();
} else if (LoadFlowParameters.ComponentMode.ALL_CONNECTED.equals(mode)) {
return networks.getList().stream()
.filter(n -> n.getValidity().equals(LfNetwork.Validity.VALID)).toList();
} else {
throw new PowsyblException("Unsupported ConnectedComponentMode " + mode);
}
return switch (mode) {
case MAIN_CONNECTED -> networks.getList().stream()
.filter(n -> n.getNumCC() == ComponentConstants.MAIN_NUM && n.getValidity().equals(LfNetwork.Validity.VALID)).toList();
case MAIN_SYNCHRONOUS -> networks.getList().stream()
.filter(n -> n.getNumSC() == ComponentConstants.MAIN_NUM && n.getValidity().equals(LfNetwork.Validity.VALID)).toList();
case ALL_CONNECTED -> networks.getList().stream()
.filter(n -> n.getValidity().equals(LfNetwork.Validity.VALID)).toList();
};
}

void mergeSecurityAnalysisResult(SecurityAnalysisResult resultToMerge, Map<String, PostContingencyResult> postContingencyResults,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -211,7 +211,7 @@ public void analyse(Network network, List<PropagatedContingency> contingencies,
.setTwtSplitShuntAdmittance(lfParameters.isTwtSplitShuntAdmittance())
.setBreakers(breakers)
.setPlausibleActivePowerLimit(lfParametersExt.getPlausibleActivePowerLimit())
.setComputeMainConnectedComponentOnly(true)
.setComponentMode(LoadFlowParameters.ComponentMode.MAIN_SYNCHRONOUS)
.setCountriesToBalance(lfParameters.getCountriesToBalance())
.setDistributedOnConformLoad(lfParameters.getBalanceType() == LoadFlowParameters.BalanceType.PROPORTIONAL_TO_CONFORM_LOAD)
.setPhaseControl(lfParameters.isPhaseShifterRegulationOn())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -386,7 +386,7 @@ public void analyse(Network network, List<PropagatedContingency> contingencies,
.setTwtSplitShuntAdmittance(lfParameters.isTwtSplitShuntAdmittance())
.setBreakers(breakers)
.setPlausibleActivePowerLimit(lfParametersExt.getPlausibleActivePowerLimit())
.setComputeMainConnectedComponentOnly(true)
.setComponentMode(LoadFlowParameters.ComponentMode.MAIN_SYNCHRONOUS)
.setCountriesToBalance(lfParameters.getCountriesToBalance())
.setDistributedOnConformLoad(lfParameters.getBalanceType() == LoadFlowParameters.BalanceType.PROPORTIONAL_TO_CONFORM_LOAD)
.setPhaseControl(false)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,15 +51,15 @@ void test() {
void testDcParameters() {
Network network = Mockito.mock(Network.class);
DcLoadFlowParameters dcParameters = OpenLoadFlowParameters.createDcParameters(network, new LoadFlowParameters().setReadSlackBus(true), new OpenLoadFlowParameters(), new DenseMatrixFactory(), new EvenShiloachGraphDecrementalConnectivityFactory<>(), true);
assertEquals("DcLoadFlowParameters(networkParameters=LfNetworkParameters(slackBusSelector=NetworkSlackBusSelector, connectivityFactory=EvenShiloachGraphDecrementalConnectivityFactory, generatorVoltageRemoteControl=false, minImpedance=false, twtSplitShuntAdmittance=false, breakers=false, plausibleActivePowerLimit=10000.0, computeMainConnectedComponentOnly=true, countriesToBalance=[], distributedOnConformLoad=false, phaseControl=false, transformerVoltageControl=false, voltagePerReactivePowerControl=false, generatorReactivePowerRemoteControl=false, transformerReactivePowerControl=false, loadFlowModel=DC, reactiveLimits=false, hvdcAcEmulation=true, minPlausibleTargetVoltage=0.8, maxPlausibleTargetVoltage=1.2, loaderPostProcessorSelection=[], reactiveRangeCheckMode=MAX, lowImpedanceThreshold=1.0E-8, svcVoltageMonitoring=false, maxSlackBusCount=1, debugDir=null, secondaryVoltageControl=false, cacheEnabled=false, asymmetrical=false, minNominalVoltageTargetVoltageCheck=20.0, linePerUnitMode=IMPEDANCE, useLoadModel=false, simulateAutomationSystems=false, referenceBusSelector=ReferenceBusFirstSlackSelector, voltageTargetPriorities=[GENERATOR, TRANSFORMER, SHUNT], fictitiousGeneratorVoltageControlCheckMode=FORCED, areaInterchangeControl=false, areaInterchangeControlAreaType=ControlArea, forceTargetQInReactiveLimits=false, disableInconsistentVoltageControls=false, extrapolateReactiveLimits=false, generatorsWithZeroMwTargetAreNotStarted=true), equationSystemCreationParameters=DcEquationSystemCreationParameters(updateFlows=true, forcePhaseControlOffAndAddAngle1Var=true, useTransformerRatio=true, dcApproximationType=IGNORE_R), matrixFactory=DenseMatrixFactory, distributedSlack=true, balanceType=PROPORTIONAL_TO_GENERATION_P_MAX, setVToNan=true, maxOuterLoopIterations=20)",
assertEquals("DcLoadFlowParameters(networkParameters=LfNetworkParameters(slackBusSelector=NetworkSlackBusSelector, connectivityFactory=EvenShiloachGraphDecrementalConnectivityFactory, generatorVoltageRemoteControl=false, minImpedance=false, twtSplitShuntAdmittance=false, breakers=false, plausibleActivePowerLimit=10000.0, componentMode=MAIN_CONNECTED, countriesToBalance=[], distributedOnConformLoad=false, phaseControl=false, transformerVoltageControl=false, voltagePerReactivePowerControl=false, generatorReactivePowerRemoteControl=false, transformerReactivePowerControl=false, loadFlowModel=DC, reactiveLimits=false, hvdcAcEmulation=true, minPlausibleTargetVoltage=0.8, maxPlausibleTargetVoltage=1.2, loaderPostProcessorSelection=[], reactiveRangeCheckMode=MAX, lowImpedanceThreshold=1.0E-8, svcVoltageMonitoring=false, maxSlackBusCount=1, debugDir=null, secondaryVoltageControl=false, cacheEnabled=false, asymmetrical=false, minNominalVoltageTargetVoltageCheck=20.0, linePerUnitMode=IMPEDANCE, useLoadModel=false, simulateAutomationSystems=false, referenceBusSelector=ReferenceBusFirstSlackSelector, voltageTargetPriorities=[GENERATOR, TRANSFORMER, SHUNT], fictitiousGeneratorVoltageControlCheckMode=FORCED, areaInterchangeControl=false, areaInterchangeControlAreaType=ControlArea, forceTargetQInReactiveLimits=false, disableInconsistentVoltageControls=false, extrapolateReactiveLimits=false, generatorsWithZeroMwTargetAreNotStarted=true), equationSystemCreationParameters=DcEquationSystemCreationParameters(updateFlows=true, forcePhaseControlOffAndAddAngle1Var=true, useTransformerRatio=true, dcApproximationType=IGNORE_R), matrixFactory=DenseMatrixFactory, distributedSlack=true, balanceType=PROPORTIONAL_TO_GENERATION_P_MAX, setVToNan=true, maxOuterLoopIterations=20)",
dcParameters.toString());
}

@Test
void testAcParameters() {
Network network = Mockito.mock(Network.class);
AcLoadFlowParameters acParameters = OpenLoadFlowParameters.createAcParameters(network, new LoadFlowParameters().setReadSlackBus(true), new OpenLoadFlowParameters(), new DenseMatrixFactory(), new EvenShiloachGraphDecrementalConnectivityFactory<>(), false, false);
assertEquals("AcLoadFlowParameters(networkParameters=LfNetworkParameters(slackBusSelector=NetworkSlackBusSelector, connectivityFactory=EvenShiloachGraphDecrementalConnectivityFactory, generatorVoltageRemoteControl=true, minImpedance=false, twtSplitShuntAdmittance=false, breakers=false, plausibleActivePowerLimit=10000.0, computeMainConnectedComponentOnly=true, countriesToBalance=[], distributedOnConformLoad=false, phaseControl=false, transformerVoltageControl=false, voltagePerReactivePowerControl=false, generatorReactivePowerRemoteControl=false, transformerReactivePowerControl=false, loadFlowModel=AC, reactiveLimits=true, hvdcAcEmulation=true, minPlausibleTargetVoltage=0.8, maxPlausibleTargetVoltage=1.2, loaderPostProcessorSelection=[], reactiveRangeCheckMode=MAX, lowImpedanceThreshold=1.0E-8, svcVoltageMonitoring=true, maxSlackBusCount=1, debugDir=null, secondaryVoltageControl=false, cacheEnabled=false, asymmetrical=false, minNominalVoltageTargetVoltageCheck=20.0, linePerUnitMode=IMPEDANCE, useLoadModel=false, simulateAutomationSystems=false, referenceBusSelector=ReferenceBusFirstSlackSelector, voltageTargetPriorities=[GENERATOR, TRANSFORMER, SHUNT], fictitiousGeneratorVoltageControlCheckMode=FORCED, areaInterchangeControl=false, areaInterchangeControlAreaType=ControlArea, forceTargetQInReactiveLimits=false, disableInconsistentVoltageControls=false, extrapolateReactiveLimits=false, generatorsWithZeroMwTargetAreNotStarted=true), equationSystemCreationParameters=AcEquationSystemCreationParameters(forceA1Var=false), acSolverParameters=NewtonRaphsonParameters(maxIterations=15, stoppingCriteria=DefaultNewtonRaphsonStoppingCriteria, stateVectorScalingMode=NONE, alwaysUpdateNetwork=false, lineSearchStateVectorScalingMaxIteration=10, lineSearchStateVectorScalingStepFold=1.3333333333333333, maxVoltageChangeStateVectorScalingMaxDv=0.1, maxVoltageChangeStateVectorScalingMaxDphi=0.17453292519943295), outerLoops=[DistributedSlackOuterLoop, MonitoringVoltageOuterLoop, ReactiveLimitsOuterLoop], maxOuterLoopIterations=20, matrixFactory=DenseMatrixFactory, voltageInitializer=UniformValueVoltageInitializer, asymmetrical=false, slackDistributionFailureBehavior=FAIL, solverFactory=NewtonRaphsonFactory, detailedReport=false, voltageRemoteControlRobustMode=true, minRealisticVoltage=0.5, maxRealisticVoltage=2.0, minNominalVoltageRealisticVoltageCheck=0.0, fixVoltageTargets=false)",
assertEquals("AcLoadFlowParameters(networkParameters=LfNetworkParameters(slackBusSelector=NetworkSlackBusSelector, connectivityFactory=EvenShiloachGraphDecrementalConnectivityFactory, generatorVoltageRemoteControl=true, minImpedance=false, twtSplitShuntAdmittance=false, breakers=false, plausibleActivePowerLimit=10000.0, componentMode=MAIN_CONNECTED, countriesToBalance=[], distributedOnConformLoad=false, phaseControl=false, transformerVoltageControl=false, voltagePerReactivePowerControl=false, generatorReactivePowerRemoteControl=false, transformerReactivePowerControl=false, loadFlowModel=AC, reactiveLimits=true, hvdcAcEmulation=true, minPlausibleTargetVoltage=0.8, maxPlausibleTargetVoltage=1.2, loaderPostProcessorSelection=[], reactiveRangeCheckMode=MAX, lowImpedanceThreshold=1.0E-8, svcVoltageMonitoring=true, maxSlackBusCount=1, debugDir=null, secondaryVoltageControl=false, cacheEnabled=false, asymmetrical=false, minNominalVoltageTargetVoltageCheck=20.0, linePerUnitMode=IMPEDANCE, useLoadModel=false, simulateAutomationSystems=false, referenceBusSelector=ReferenceBusFirstSlackSelector, voltageTargetPriorities=[GENERATOR, TRANSFORMER, SHUNT], fictitiousGeneratorVoltageControlCheckMode=FORCED, areaInterchangeControl=false, areaInterchangeControlAreaType=ControlArea, forceTargetQInReactiveLimits=false, disableInconsistentVoltageControls=false, extrapolateReactiveLimits=false, generatorsWithZeroMwTargetAreNotStarted=true), equationSystemCreationParameters=AcEquationSystemCreationParameters(forceA1Var=false), acSolverParameters=NewtonRaphsonParameters(maxIterations=15, stoppingCriteria=DefaultNewtonRaphsonStoppingCriteria, stateVectorScalingMode=NONE, alwaysUpdateNetwork=false, lineSearchStateVectorScalingMaxIteration=10, lineSearchStateVectorScalingStepFold=1.3333333333333333, maxVoltageChangeStateVectorScalingMaxDv=0.1, maxVoltageChangeStateVectorScalingMaxDphi=0.17453292519943295), outerLoops=[DistributedSlackOuterLoop, MonitoringVoltageOuterLoop, ReactiveLimitsOuterLoop], maxOuterLoopIterations=20, matrixFactory=DenseMatrixFactory, voltageInitializer=UniformValueVoltageInitializer, asymmetrical=false, slackDistributionFailureBehavior=FAIL, solverFactory=NewtonRaphsonFactory, detailedReport=false, voltageRemoteControlRobustMode=true, minRealisticVoltage=0.5, maxRealisticVoltage=2.0, minNominalVoltageRealisticVoltageCheck=0.0, fixVoltageTargets=false)",
acParameters.toString());
}

Expand Down
Loading