Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

stores and apply several limit sets in the branch creation #9

Open
wants to merge 25 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 9 commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
a6634b6
stores and apply several limit sets in the branch creation
Mathieu-Deharbe Dec 10, 2024
28ad43f
back to CurrentLimitsEntity + update application
Mathieu-Deharbe Dec 12, 2024
1f00dc0
renaming
Mathieu-Deharbe Dec 12, 2024
58a77ef
TUs
Mathieu-Deharbe Dec 16, 2024
0c57651
cleans
Mathieu-Deharbe Dec 16, 2024
eccbc5e
simplify
Mathieu-Deharbe Dec 16, 2024
d05d9be
correction
Mathieu-Deharbe Dec 16, 2024
e0942a2
Merge branch 'main' into complete-limits-in-branch-creation
Mathieu-Deharbe Dec 16, 2024
4ede9ef
Merge branch 'main' into complete-limits-in-branch-creation
Mathieu-Deharbe Dec 18, 2024
5eae6c8
adds OperationalLimitsGroupInfos
Mathieu-Deharbe Dec 18, 2024
ad86424
!CollectionUtils.isEmpty(
Mathieu-Deharbe Dec 18, 2024
13d096f
OperationalLimitsGroupEntity and everything that uses it
Mathieu-Deharbe Dec 19, 2024
c20b3a8
Merge branch 'main' into complete-limits-in-branch-creation
Mathieu-Deharbe Jan 6, 2025
a52072a
post review 1
Mathieu-Deharbe Jan 6, 2025
1c71d77
TU
Mathieu-Deharbe Jan 6, 2025
e5e03d9
reduce cognitive complexity
Mathieu-Deharbe Jan 7, 2025
2e16fd5
comply with build requirements
Mathieu-Deharbe Jan 7, 2025
6e93a4a
post review 2
Mathieu-Deharbe Jan 7, 2025
ba0de6a
Merge branch 'main' into complete-limits-in-branch-creation
Mathieu-Deharbe Jan 10, 2025
d080a43
Merge branch 'main' into complete-limits-in-branch-creation
Mathieu-Deharbe Jan 14, 2025
a07090d
Merge branch 'main' into complete-limits-in-branch-creation
Mathieu-Deharbe Jan 16, 2025
cbc5f73
Merge branch 'main' into complete-limits-in-branch-creation
Mathieu-Deharbe Jan 17, 2025
31cfb43
log selected limit set
Mathieu-Deharbe Jan 17, 2025
dc771ee
Merge remote-tracking branch 'origin/complete-limits-in-branch-creati…
Mathieu-Deharbe Jan 17, 2025
44c9e25
log created limit set
Mathieu-Deharbe Jan 17, 2025
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 @@ -14,6 +14,8 @@
import lombok.ToString;
import lombok.experimental.SuperBuilder;

import java.util.List;

/**
* @author Sylvain Bouzols <sylvain.bouzols at rte-france.com>
*/
Expand Down Expand Up @@ -43,11 +45,17 @@ public class BranchCreationInfos extends EquipmentCreationInfos {
@Schema(description = "Bus or Busbar section id Side 2")
private String busOrBusbarSectionId2;

@Schema(description = "Current limits Side 1")
private CurrentLimitsInfos currentLimits1;
@Schema(description = "Current limits on side 1")
private List<CurrentLimitsInfos> currentLimits1;

@Schema(description = "Current limits on side 2")
private List<CurrentLimitsInfos> currentLimits2;

@Schema(description = "Selected operational limits group id on Side 1")
private String selectedOperationalLimitsGroupId1;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

private String selectedOperationalLimitsGroup1;

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OK done.


@Schema(description = "Current limits Side 2")
private CurrentLimitsInfos currentLimits2;
@Schema(description = "Selected operational limits group id on Side 2")
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Selected operational limits group on Side 2

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OK why not.

private String selectedOperationalLimitsGroupId2;

@Schema(description = "Connection Name 1")
private String connectionName1;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,14 @@
package org.gridsuite.modification.dto;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import lombok.*;
basseche marked this conversation as resolved.
Show resolved Hide resolved
import lombok.experimental.SuperBuilder;

import java.util.List;

/**
* @author Sylvain Bouzols <sylvain.bouzols at rte-france.com>
* ~= environ operational limit group, ~= limit set
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

to be removed

Copy link
Author

@Mathieu-Deharbe Mathieu-Deharbe Dec 18, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done. I instead createa an OperationalLimitsGroup class to be closer to IIDM.

*/

@SuperBuilder
Expand All @@ -27,6 +25,9 @@
@Schema(description = "Current Limits")
public class CurrentLimitsInfos {

@Schema(description = "Operational limit group name")
private String operationalLimitGroupId;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

operationalLimitsGroupId ?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

also change the description

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This class member has been removed. But yep the 's' was missing.


@Schema(description = "Permanent current limit")
private Double permanentLimit;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@
import org.gridsuite.modification.utils.ModificationUtils;
import org.gridsuite.modification.utils.PropertiesUtils;

import java.util.List;

import static org.gridsuite.modification.NetworkModificationException.Type.*;

/**
Expand Down Expand Up @@ -67,16 +69,25 @@ public void apply(Network network, ReportNode subReportNode) {
}

// Set permanent and temporary current limits
CurrentLimitsInfos currentLimitsInfos1 = modificationInfos.getCurrentLimits1();
CurrentLimitsInfos currentLimitsInfos2 = modificationInfos.getCurrentLimits2();
if (currentLimitsInfos1 != null || currentLimitsInfos2 != null) {
List<CurrentLimitsInfos> currentLimitsSide1 = modificationInfos.getCurrentLimits1();
List<CurrentLimitsInfos> currentLimitsSide2 = modificationInfos.getCurrentLimits2();
if (currentLimitsSide1 != null && !currentLimitsSide1.isEmpty()) {
var line = ModificationUtils.getInstance().getLine(network, modificationInfos.getEquipmentId());
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
var line = ModificationUtils.getInstance().getLine(network, modificationInfos.getEquipmentId());
Line line = ModificationUtils.getInstance().getLine(network, modificationInfos.getEquipmentId());

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OK done.

ModificationUtils.getInstance().setCurrentLimitsOnASide(currentLimitsSide1, line, ModificationUtils.Side.SIDE1);
}
if (currentLimitsSide2 != null && !currentLimitsSide2.isEmpty()) {
var line = ModificationUtils.getInstance().getLine(network, modificationInfos.getEquipmentId());
ModificationUtils.getInstance().setCurrentLimits(currentLimitsInfos1, line.newCurrentLimits1());
ModificationUtils.getInstance().setCurrentLimits(currentLimitsInfos2, line.newCurrentLimits2());
ModificationUtils.getInstance().setCurrentLimitsOnASide(currentLimitsSide2, line, ModificationUtils.Side.SIDE2);
}
ModificationUtils.getInstance().disconnectBranch(modificationInfos, network.getLine(modificationInfos.getEquipmentId()), subReportNode);
// properties
Line line = network.getLine(modificationInfos.getEquipmentId());
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We can place this line before (for example, line 74) to avoid calling getLine three times and
extract the code of // Set permanent and temporary current limits... shared between line and twt into a common funct (the second remarq is a suggestion not mandatory)

Copy link
Author

@Mathieu-Deharbe Mathieu-Deharbe Jan 7, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes I thought about this but didn't dare because it looks like whoever wrote this like this did it on purpose. And I didn't want to take the risk.

But ok you look motivated I did it !

if (modificationInfos.getSelectedOperationalLimitsGroupId1() != null) {
line.setSelectedOperationalLimitsGroup1(modificationInfos.getSelectedOperationalLimitsGroupId1());
}
if (modificationInfos.getSelectedOperationalLimitsGroupId2() != null) {
line.setSelectedOperationalLimitsGroup2(modificationInfos.getSelectedOperationalLimitsGroupId2());
}
PropertiesUtils.applyProperties(line, subReportNode, modificationInfos.getProperties(), "LineProperties");
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import org.gridsuite.modification.utils.ModificationUtils;
import org.gridsuite.modification.utils.PropertiesUtils;

import java.util.List;
import java.util.Optional;

import static org.gridsuite.modification.NetworkModificationException.Type.*;
Expand Down Expand Up @@ -53,11 +54,19 @@ public void apply(Network network, ReportNode subReportNode) {
}

// Set permanent and temporary current limits
CurrentLimitsInfos currentLimitsInfos1 = modificationInfos.getCurrentLimits1();
CurrentLimitsInfos currentLimitsInfos2 = modificationInfos.getCurrentLimits2();
if (currentLimitsInfos1 != null || currentLimitsInfos2 != null) {
ModificationUtils.getInstance().setCurrentLimits(currentLimitsInfos1, twoWindingsTransformer.newCurrentLimits1());
ModificationUtils.getInstance().setCurrentLimits(currentLimitsInfos2, twoWindingsTransformer.newCurrentLimits2());
List<CurrentLimitsInfos> currentLimitsSide1 = modificationInfos.getCurrentLimits1();
List<CurrentLimitsInfos> currentLimitsSide2 = modificationInfos.getCurrentLimits2();
if (currentLimitsSide1 != null && !currentLimitsSide1.isEmpty()) {
basseche marked this conversation as resolved.
Show resolved Hide resolved
ModificationUtils.getInstance().setCurrentLimitsOnASide(currentLimitsSide1, twoWindingsTransformer, ModificationUtils.Side.SIDE1);
}
if (currentLimitsSide2 != null && !currentLimitsSide2.isEmpty()) {
basseche marked this conversation as resolved.
Show resolved Hide resolved
ModificationUtils.getInstance().setCurrentLimitsOnASide(currentLimitsSide2, twoWindingsTransformer, ModificationUtils.Side.SIDE2);
}
if (modificationInfos.getSelectedOperationalLimitsGroupId1() != null) {
twoWindingsTransformer.setSelectedOperationalLimitsGroup1(modificationInfos.getSelectedOperationalLimitsGroupId1());
}
if (modificationInfos.getSelectedOperationalLimitsGroupId2() != null) {
twoWindingsTransformer.setSelectedOperationalLimitsGroup2(modificationInfos.getSelectedOperationalLimitsGroupId2());
}

ModificationUtils.getInstance().disconnectBranch(modificationInfos, network.getTwoWindingsTransformer(modificationInfos.getEquipmentId()), subReportNode);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,11 @@
// TODO remove public qualifier for all methods
public final class ModificationUtils {

public enum Side {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

you don't need this
you can use enum Side of powsyble

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

True. I changed it, thank you.

SIDE1,
SIDE2
}

public static final String DISCONNECTOR = "disconnector_";
public static final String BREAKER = "breaker_";
public static final String BUS_BAR_SECTION_ID = "busbarSectionId";
Expand Down Expand Up @@ -1010,24 +1015,34 @@ public Identifiable<?> getEquipmentByIdentifiableType(Network network, Identifia
};
}

public void setCurrentLimits(CurrentLimitsInfos currentLimitsInfos, CurrentLimitsAdder limitsAdder) {
if (currentLimitsInfos != null) {
/**
* @param allCurrentLimitsInfos added current limits
* @param branch branch to which limits are going to be added
* @param side which side of the branch receives the limits
*/
public void setCurrentLimitsOnASide(List<CurrentLimitsInfos> allCurrentLimitsInfos, Branch<?> branch, Side side) {
for (CurrentLimitsInfos currentLimitsInfos : allCurrentLimitsInfos) {
boolean hasPermanent = currentLimitsInfos.getPermanentLimit() != null;
boolean hasTemporary = currentLimitsInfos.getTemporaryLimits() != null && !currentLimitsInfos.getTemporaryLimits().isEmpty();
if (hasPermanent) {
limitsAdder.setPermanentLimit(currentLimitsInfos.getPermanentLimit());
}
if (hasTemporary) {
for (CurrentTemporaryLimitCreationInfos limit : currentLimitsInfos.getTemporaryLimits()) {
limitsAdder
.beginTemporaryLimit()
.setName(limit.getName())
.setValue(limit.getValue() == null ? Double.MAX_VALUE : limit.getValue())
.setAcceptableDuration(limit.getAcceptableDuration() == null ? Integer.MAX_VALUE : limit.getAcceptableDuration())
.endTemporaryLimit();
boolean hasTemporary = !CollectionUtils.isEmpty(currentLimitsInfos.getTemporaryLimits());
boolean hasLimits = hasPermanent || hasTemporary;
if (hasLimits) {
basseche marked this conversation as resolved.
Show resolved Hide resolved
OperationalLimitsGroup opGroup = side == Side.SIDE1
? branch.newOperationalLimitsGroup1(currentLimitsInfos.getOperationalLimitGroupId())
: branch.newOperationalLimitsGroup2(currentLimitsInfos.getOperationalLimitGroupId());
CurrentLimitsAdder limitsAdder = opGroup.newCurrentLimits();
if (hasPermanent) {
limitsAdder.setPermanentLimit(currentLimitsInfos.getPermanentLimit());
}
if (hasTemporary) {
for (CurrentTemporaryLimitCreationInfos limit : currentLimitsInfos.getTemporaryLimits()) {
limitsAdder
.beginTemporaryLimit()
.setName(limit.getName())
.setValue(limit.getValue() == null ? Double.MAX_VALUE : limit.getValue())
.setAcceptableDuration(limit.getAcceptableDuration() == null ? Integer.MAX_VALUE : limit.getAcceptableDuration())
.endTemporaryLimit();
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I can suggest here to use the functional approach (with forEach)

       .forEach(limit -> {
           double value = limit.getValue() != null ? limit.getValue() : Double.MAX_VALUE;
           int duration = limit.getAcceptableDuration() != null ? limit.getAcceptableDuration() : Integer.MAX_VALUE;

           limitsAdder.beginTemporaryLimit()
                      .setName(limit.getName())
                      .setValue(value)
                      .setAcceptableDuration(duration)
                      .endTemporaryLimit();
       });
                   }

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OK done. And it reduces cognitive complexity. Nice.

}
}
if (hasPermanent || hasTemporary) {
limitsAdder.add();
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,10 @@ void testCreateLineOptionalParameters5() throws Exception {
.busOrBusbarSectionId1("bus1")
.voltageLevelId2("v2")
.busOrBusbarSectionId2("bus2")
.currentLimits1(CurrentLimitsInfos.builder().permanentLimit(-1.0).build())
.currentLimits1(
List.of(CurrentLimitsInfos.builder().operationalLimitGroupId("limiSet1").permanentLimit(-1.0).build())
)
.selectedOperationalLimitsGroupId1("limiSet1")
.build();
ValidationException exception = assertThrows(ValidationException.class, () -> lineCreationInfosPermanentLimitNOK.toModification().apply(getNetwork()));
assertEquals("AC Line 'idLine2': permanent limit must be >= 0", exception.getMessage());
Expand Down Expand Up @@ -82,8 +85,14 @@ protected ModificationInfos buildModification() {
.b2(20.0)
.voltageLevelId1("v1")
.busOrBusbarSectionId1("bus1")
.currentLimits1(CurrentLimitsInfos.builder().permanentLimit(5.).temporaryLimits(Collections.emptyList()).build())
.currentLimits2(CurrentLimitsInfos.builder().permanentLimit(5.).temporaryLimits(Collections.emptyList()).build())
.currentLimits1(
List.of(CurrentLimitsInfos.builder().operationalLimitGroupId("limitSet1").permanentLimit(5.).temporaryLimits(Collections.emptyList()).build())
)
.currentLimits2(
List.of(CurrentLimitsInfos.builder().operationalLimitGroupId("limitSet2").permanentLimit(5.).temporaryLimits(Collections.emptyList()).build())
)
.selectedOperationalLimitsGroupId1("limitSet1")
.selectedOperationalLimitsGroupId2("limitSet2")
.voltageLevelId2("v2")
.busOrBusbarSectionId2("bus2")
.properties(List.of(FreePropertyInfos.builder().name(PROPERTY_NAME).value(PROPERTY_VALUE).build()))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,8 +52,26 @@ protected ModificationInfos buildModification() {
.voltageLevelId2("v12")
.busOrBusbarSectionId2("bus12")
.connected2(true)
.currentLimits1(CurrentLimitsInfos.builder().permanentLimit(3.).temporaryLimits(List.of(CurrentTemporaryLimitCreationInfos.builder().name("IT5").acceptableDuration(98647).value(45.).build())).build())
.currentLimits2(CurrentLimitsInfos.builder().permanentLimit(2.).temporaryLimits(List.of(CurrentTemporaryLimitCreationInfos.builder().name("IT10").acceptableDuration(683647).value(791.).build())).build())
.currentLimits1(
List.of(
CurrentLimitsInfos.builder()
.operationalLimitGroupId("limitSet1")
.permanentLimit(3.)
.temporaryLimits(
List.of(CurrentTemporaryLimitCreationInfos.builder().name("IT5").acceptableDuration(98647).value(45.).build())
).build())
)
.currentLimits2(
List.of(
CurrentLimitsInfos.builder()
.operationalLimitGroupId("limitSet2")
.permanentLimit(2.)
.temporaryLimits(
List.of(CurrentTemporaryLimitCreationInfos.builder().name("IT10").acceptableDuration(683647).value(791.).build())
).build())
)
.selectedOperationalLimitsGroupId1("limitSet1")
.selectedOperationalLimitsGroupId2("limitSet2")
.connectionName1("cn201")
.connectionDirection1(ConnectablePosition.Direction.TOP)
.connectionName2("cn202")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,8 +52,12 @@ protected ModificationInfos buildModification() {
.voltageLevelId2("v2")
.busOrBusbarSectionId2("1A")
.connected2(true)
.currentLimits1(CurrentLimitsInfos.builder().permanentLimit(3.).temporaryLimits(List.of(CurrentTemporaryLimitCreationInfos.builder().name("IT5").acceptableDuration(2147483647).value(671.).build())).build())
.currentLimits2(CurrentLimitsInfos.builder().permanentLimit(2.).temporaryLimits(List.of(CurrentTemporaryLimitCreationInfos.builder().name("IT10").acceptableDuration(683647).value(791.).build())).build())
.currentLimits1(
List.of(CurrentLimitsInfos.builder().permanentLimit(3.).temporaryLimits(List.of(CurrentTemporaryLimitCreationInfos.builder().name("IT5").acceptableDuration(2147483647).value(671.).build())).build())
)
.currentLimits2(
List.of(CurrentLimitsInfos.builder().permanentLimit(2.).temporaryLimits(List.of(CurrentTemporaryLimitCreationInfos.builder().name("IT10").acceptableDuration(683647).value(791.).build())).build())
)
.connectionName1("cn201")
.connectionDirection1(ConnectablePosition.Direction.TOP)
.connected1(true)
Expand Down Expand Up @@ -219,7 +223,7 @@ void testCreateTwoWindingsTransformerWithRatioTapChangerInNodeBreaker() throws E
testCreateTwoWindingsTransformerInNodeBreaker(twoWindingsTransformerCreationInfos2);

assertEquals(
"TwoWindingsTransformerCreationInfos(super=BranchCreationInfos(super=EquipmentCreationInfos(super=EquipmentModificationInfos(super=ModificationInfos(uuid=null, type=TWO_WINDINGS_TRANSFORMER_CREATION, date=null, stashed=false, messageType=null, messageValues=null, activated=true), equipmentId=id2wt1WithRatioTapChanger2, properties=null), equipmentName=2wtName), r=400.0, x=300.0, voltageLevelId1=v1, voltageLevelId2=v4, busOrBusbarSectionId1=1.1, busOrBusbarSectionId2=1.A, currentLimits1=null, currentLimits2=null, connectionName1=null, connectionDirection1=TOP, connectionName2=null, connectionDirection2=TOP, connectionPosition1=null, connectionPosition2=null, connected1=true, connected2=true), g=100.0, b=200.0, ratedU1=1000.0, ratedU2=1010.0, ratedS=null, ratioTapChanger=RatioTapChangerCreationInfos(super=TapChangerCreationInfos(lowTapPosition=0, tapPosition=1, regulating=true, targetDeadband=null, regulatingTerminalId=v1load, regulatingTerminalType=LOAD, regulatingTerminalVlId=v1, steps=[TapChangerStepCreationInfos(index=0, rho=1.0, r=39.78473, x=39.784725, g=0.0, b=0.0, alpha=0.0), TapChangerStepCreationInfos(index=0, rho=1.0, r=39.78474, x=39.784726, g=0.0, b=0.0, alpha=0.0), TapChangerStepCreationInfos(index=0, rho=1.0, r=39.78475, x=39.784727, g=0.0, b=0.0, alpha=0.0)]), loadTapChangingCapabilities=true, targetV=220.0), phaseTapChanger=null)",
"TwoWindingsTransformerCreationInfos(super=BranchCreationInfos(super=EquipmentCreationInfos(super=EquipmentModificationInfos(super=ModificationInfos(uuid=null, type=TWO_WINDINGS_TRANSFORMER_CREATION, date=null, stashed=false, messageType=null, messageValues=null, activated=true), equipmentId=id2wt1WithRatioTapChanger2, properties=null), equipmentName=2wtName), r=400.0, x=300.0, voltageLevelId1=v1, voltageLevelId2=v4, busOrBusbarSectionId1=1.1, busOrBusbarSectionId2=1.A, currentLimits1=null, currentLimits2=null, selectedOperationalLimitsGroupId1=null, selectedOperationalLimitsGroupId2=null, connectionName1=null, connectionDirection1=TOP, connectionName2=null, connectionDirection2=TOP, connectionPosition1=null, connectionPosition2=null, connected1=true, connected2=true), g=100.0, b=200.0, ratedU1=1000.0, ratedU2=1010.0, ratedS=null, ratioTapChanger=RatioTapChangerCreationInfos(super=TapChangerCreationInfos(lowTapPosition=0, tapPosition=1, regulating=true, targetDeadband=null, regulatingTerminalId=v1load, regulatingTerminalType=LOAD, regulatingTerminalVlId=v1, steps=[TapChangerStepCreationInfos(index=0, rho=1.0, r=39.78473, x=39.784725, g=0.0, b=0.0, alpha=0.0), TapChangerStepCreationInfos(index=0, rho=1.0, r=39.78474, x=39.784726, g=0.0, b=0.0, alpha=0.0), TapChangerStepCreationInfos(index=0, rho=1.0, r=39.78475, x=39.784727, g=0.0, b=0.0, alpha=0.0)]), loadTapChangingCapabilities=true, targetV=220.0), phaseTapChanger=null)",
twoWindingsTransformerCreationInfos2.toString()
);

Expand Down
Loading