Skip to content

Commit

Permalink
refacto GeneratorField
Browse files Browse the repository at this point in the history
Signed-off-by: Mathieu DEHARBE <[email protected]>
  • Loading branch information
Mathieu-Deharbe committed Sep 3, 2024
1 parent c3bbff8 commit fe01d83
Show file tree
Hide file tree
Showing 2 changed files with 65 additions and 32 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,11 @@
import org.gridsuite.modification.server.modifications.ModificationUtils;

import static org.gridsuite.modification.server.NetworkModificationException.Type.MODIFY_GENERATOR_ERROR;
import static org.gridsuite.modification.server.modifications.GeneratorModification.modifyGeneratorActiveLimitsAttributes;
import static org.gridsuite.modification.server.modifications.GeneratorModification.modifyGeneratorShortCircuitAttributes;
import static org.gridsuite.modification.server.modifications.GeneratorModification.modifyGeneratorStartUpAttributes;
import static org.gridsuite.modification.server.modifications.GeneratorModification.modifyTargetQ;
import static org.gridsuite.modification.server.modifications.GeneratorModification.modifyTargetV;

/**
* @author Seddik Yengui <Seddik.yengui at rte-france.com>
Expand Down Expand Up @@ -70,8 +73,16 @@ public static void setNewValue(Generator generator, String generatorField, Doubl
if (!Double.isNaN(newValue)) {
GeneratorField field = GeneratorField.valueOf(generatorField);
switch (field) {
case MAXIMUM_ACTIVE_POWER -> generator.setMaxP(newValue);
case MINIMUM_ACTIVE_POWER -> generator.setMinP(newValue);
case MAXIMUM_ACTIVE_POWER -> modifyGeneratorActiveLimitsAttributes(new AttributeModification<>(newValue, OperationType.SET),
null,
null,
generator,
null);
case MINIMUM_ACTIVE_POWER -> modifyGeneratorActiveLimitsAttributes(null,
new AttributeModification<>(newValue, OperationType.SET),
null,
generator,
null);
case ACTIVE_POWER_SET_POINT -> {
ModificationUtils.getInstance().checkActivePowerZeroOrBetweenMinAndMaxActivePower(
new AttributeModification<>(newValue, OperationType.SET),
Expand All @@ -85,9 +96,13 @@ public static void setNewValue(Generator generator, String generatorField, Doubl
);
generator.setTargetP(newValue);
}
case RATED_NOMINAL_POWER -> generator.setRatedS(newValue);
case REACTIVE_POWER_SET_POINT -> generator.setTargetQ(newValue);
case VOLTAGE_SET_POINT -> generator.setTargetV(newValue);
case RATED_NOMINAL_POWER -> modifyGeneratorActiveLimitsAttributes(null,
null,
new AttributeModification<>(newValue, OperationType.SET),
generator,
null);
case REACTIVE_POWER_SET_POINT -> modifyTargetQ(generator, new AttributeModification<>(newValue, OperationType.SET));
case VOLTAGE_SET_POINT -> modifyTargetV(generator, new AttributeModification<>(newValue, OperationType.SET));
case PLANNED_ACTIVE_POWER_SET_POINT ->
modifyGeneratorStartUpAttributes(
new AttributeModification<>(newValue, OperationType.SET),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -155,22 +155,25 @@ private void modifyGeneratorReactiveCapabilityCurvePoints(GeneratorModificationI
ModificationUtils.getInstance().modifyReactiveCapabilityCurvePoints(points, modificationPoints, adder, subReportNode, subReportNodeLimits);
}

private ReportNode modifyGeneratorActiveLimitsAttributes(GeneratorModificationInfos modificationInfos,
Generator generator, ReportNode subReportNode) {
public static ReportNode modifyGeneratorActiveLimitsAttributes(AttributeModification<Double> maxP,
AttributeModification<Double> minP,
AttributeModification<Double> ratedS,
Generator generator,
ReportNode subReportNode) {
ReportNode subReporterLimits = null;
ReportNode reportMaxActivePower;
ReportNode reportMinActivePower;

if (modificationInfos.getMaxP() != null && modificationInfos.getMaxP().getValue() > generator.getMinP()) {
reportMaxActivePower = ModificationUtils.getInstance().applyElementaryModificationsAndReturnReport(generator::setMaxP, generator::getMaxP, modificationInfos.getMaxP(), "Max active power");
reportMinActivePower = ModificationUtils.getInstance().applyElementaryModificationsAndReturnReport(generator::setMinP, generator::getMinP, modificationInfos.getMinP(), "Min active power");
if (maxP != null && maxP.getValue() > generator.getMinP()) {
reportMaxActivePower = ModificationUtils.getInstance().applyElementaryModificationsAndReturnReport(generator::setMaxP, generator::getMaxP, maxP, "Max active power");
reportMinActivePower = ModificationUtils.getInstance().applyElementaryModificationsAndReturnReport(generator::setMinP, generator::getMinP, minP, "Min active power");

} else {
reportMinActivePower = ModificationUtils.getInstance().applyElementaryModificationsAndReturnReport(generator::setMinP, generator::getMinP, modificationInfos.getMinP(), "Min active power");
reportMaxActivePower = ModificationUtils.getInstance().applyElementaryModificationsAndReturnReport(generator::setMaxP, generator::getMaxP, modificationInfos.getMaxP(), "Max active power");
reportMinActivePower = ModificationUtils.getInstance().applyElementaryModificationsAndReturnReport(generator::setMinP, generator::getMinP, minP, "Min active power");
reportMaxActivePower = ModificationUtils.getInstance().applyElementaryModificationsAndReturnReport(generator::setMaxP, generator::getMaxP, maxP, "Max active power");
}
ReportNode reportRatedNominalPower = ModificationUtils.getInstance().applyElementaryModificationsAndReturnReport(generator::setRatedS, generator::getRatedS, modificationInfos.getRatedS(), "Rated nominal power");
if (reportMaxActivePower != null || reportMinActivePower != null || reportRatedNominalPower != null) {
ReportNode reportRatedNominalPower = ModificationUtils.getInstance().applyElementaryModificationsAndReturnReport(generator::setRatedS, generator::getRatedS, ratedS, "Rated nominal power");
if (subReportNode != null && (reportMaxActivePower != null || reportMinActivePower != null || reportRatedNominalPower != null)) {
subReporterLimits = subReportNode.newReportNode().withMessageTemplate(LIMITS, LIMITS).add();
subReporterLimits.newReportNode()
.withMessageTemplate(LIMITS, LIMITS)
Expand Down Expand Up @@ -384,15 +387,7 @@ private ReportNode modifyGeneratorVoltageRegulatorAttributes(GeneratorModificati
Generator generator, ReportNode subReportNode, ReportNode subReportNodeSetpoints) {
List<ReportNode> voltageRegulationReports = new ArrayList<>();

ReportNode reportVoltageSetpoint = null;
if (modificationInfos.getTargetV() != null) {
if (modificationInfos.getTargetV().getOp() == OperationType.SET) {
reportVoltageSetpoint = ModificationUtils.getInstance().applyElementaryModificationsAndReturnReport(generator::setTargetV, generator::getTargetV,
modificationInfos.getTargetV(), "Voltage");
} else {
reportVoltageSetpoint = ModificationUtils.getInstance().buildModificationReport(generator.getTargetV(), Double.NaN, "Voltage");
}
}
ReportNode reportVoltageSetpoint = modifyTargetV(generator, modificationInfos.getTargetV());

voltageRegulationReports.add(ModificationUtils.getInstance().applyElementaryModificationsAndReturnReport(generator::setVoltageRegulatorOn, generator::isVoltageRegulatorOn,
modificationInfos.getVoltageRegulationOn(), "VoltageRegulationOn"));
Expand Down Expand Up @@ -439,17 +434,24 @@ private ReportNode modifyGeneratorVoltageRegulatorAttributes(GeneratorModificati
return subReportNodeSetpoints2;
}

private void modifyGeneratorSetpointsAttributes(GeneratorModificationInfos modificationInfos,
Generator generator, ReportNode subReportNode) {
ReportNode reportActivePower = ModificationUtils.getInstance().applyElementaryModificationsAndReturnReport(generator::setTargetP, generator::getTargetP, modificationInfos.getTargetP(), "Active power");
ReportNode reportReactivePower = null;
if (modificationInfos.getTargetQ() != null) {
if (modificationInfos.getTargetQ().getOp() == OperationType.SET) {
reportReactivePower = ModificationUtils.getInstance().applyElementaryModificationsAndReturnReport(generator::setTargetQ, generator::getTargetQ, modificationInfos.getTargetQ(), "Reactive power");
public static ReportNode modifyTargetV(Generator generator, AttributeModification<Double> modifTargetV) {
ReportNode reportVoltageSetpoint = null;
if (modifTargetV != null) {
if (modifTargetV.getOp() == OperationType.SET) {
reportVoltageSetpoint = ModificationUtils.getInstance().applyElementaryModificationsAndReturnReport(generator::setTargetV, generator::getTargetV,
modifTargetV, "Voltage");
} else {
reportReactivePower = ModificationUtils.getInstance().buildModificationReport(generator.getTargetQ(), Double.NaN, "Reactive power");
reportVoltageSetpoint = ModificationUtils.getInstance().buildModificationReport(generator.getTargetV(), Double.NaN, "Voltage");
}
}
return reportVoltageSetpoint;
}

private void modifyGeneratorSetpointsAttributes(GeneratorModificationInfos modificationInfos,
Generator generator, ReportNode subReportNode) {
ReportNode reportActivePower = ModificationUtils.getInstance().applyElementaryModificationsAndReturnReport(generator::setTargetP, generator::getTargetP, modificationInfos.getTargetP(), "Active power");

ReportNode reportReactivePower = modifyTargetQ(generator, modificationInfos.getTargetQ());

ReportNode subReporterSetpoints = null;
if (reportActivePower != null || reportReactivePower != null) {
Expand All @@ -469,9 +471,25 @@ private void modifyGeneratorSetpointsAttributes(GeneratorModificationInfos modif
modifyGeneratorActivePowerControlAttributes(modificationInfos, generator, subReportNode, subReporterSetpoints);
}

public static ReportNode modifyTargetQ(Generator generator, AttributeModification<Double> modifTargetQ) {
ReportNode reportReactivePower = null;
if (modifTargetQ != null) {
if (modifTargetQ.getOp() == OperationType.SET) {
reportReactivePower = ModificationUtils.getInstance().applyElementaryModificationsAndReturnReport(generator::setTargetQ, generator::getTargetQ, modifTargetQ, "Reactive power");
} else {
reportReactivePower = ModificationUtils.getInstance().buildModificationReport(generator.getTargetQ(), Double.NaN, "Reactive power");
}
}
return reportReactivePower;
}

private void modifyGeneratorLimitsAttributes(GeneratorModificationInfos modificationInfos,
Generator generator, ReportNode subReportNode) {
ReportNode subReportNodeLimits = modifyGeneratorActiveLimitsAttributes(modificationInfos, generator, subReportNode);
ReportNode subReportNodeLimits = modifyGeneratorActiveLimitsAttributes(modificationInfos.getMaxP(),
modificationInfos.getMinP(),
modificationInfos.getRatedS(),
generator,
subReportNode);
modifyGeneratorReactiveLimitsAttributes(modificationInfos, generator, subReportNode, subReportNodeLimits);
}

Expand Down

0 comments on commit fe01d83

Please sign in to comment.