Skip to content
Merged
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
4 changes: 2 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,10 @@ jobs:
- name: Checkout
uses: actions/checkout@v4.2.2

- name: Set up JDK 17
- name: Set up JDK 21
uses: actions/setup-java@v1
with:
java-version: 17
java-version: 21

- name: Build with Maven
run: mvn --batch-mode install
14 changes: 7 additions & 7 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,8 @@
<properties>
<!-- Project properties -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<maven.compiler.source>21</maven.compiler.source>
<maven.compiler.target>21</maven.compiler.target>

<!-- Sonar properties -->
<sonar.jacoco.reportPath>
Expand All @@ -42,16 +42,16 @@
</sonar.jacoco.reportPath>

<!-- Dependencies versions -->
<gridcapa-swe.version>1.27.0</gridcapa-swe.version>
<gridcapa-swe.version>1.37.0</gridcapa-swe.version>
<junit-jupiter.version>5.10.2</junit-jupiter.version>
<logback.version>1.5.6</logback.version>
<maven-surefire-plugin.version>3.2.5</maven-surefire-plugin.version>
<maven.checkstyle.version>3.3.1</maven.checkstyle.version>
<maven.jacoco.version>0.8.10</maven.jacoco.version>
<powsybl.entsoe.version>2.11.0</powsybl.entsoe.version>
<powsybl.openloadflow.version>1.13.2</powsybl.openloadflow.version>
<powsybl.rao.version>6.1.2</powsybl.rao.version>
<powsybl.version>6.5.1</powsybl.version>
<powsybl.entsoe.version>2.13.0</powsybl.entsoe.version>
<powsybl.openloadflow.version>1.15.0</powsybl.openloadflow.version>
<powsybl.rao.version>6.5.0</powsybl.rao.version>
<powsybl.version>6.7.0</powsybl.version>
<slf4j.version>2.0.13</slf4j.version>
</properties>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@
package com.rte_france.trm_algorithm.operational_conditions_aligners;

import com.powsybl.iidm.network.Network;
import com.powsybl.openrao.data.cracapi.Crac;
import com.powsybl.openrao.data.cracapi.Identifiable;
import com.powsybl.openrao.data.cracapi.networkaction.NetworkAction;
import com.powsybl.openrao.data.crac.api.Crac;
import com.powsybl.openrao.data.crac.api.Identifiable;
import com.powsybl.openrao.data.crac.api.networkaction.NetworkAction;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,15 @@
*/
package com.rte_france.trm_algorithm.operational_conditions_aligners;

import com.farao_community.farao.gridcapa_swe_commons.hvdc.HvdcInformation;
import com.farao_community.farao.gridcapa_swe_commons.hvdc.HvdcLinkProcessor;
import com.farao_community.farao.gridcapa_swe_commons.hvdc.parameters.HvdcCreationParameters;
import com.powsybl.iidm.network.Network;
import com.powsybl.iidm.network.*;
import com.rte_france.trm_algorithm.TrmException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Objects;
import java.util.Set;
import java.util.*;

/**
* @author Hugo Schindler {@literal <hugo.schindler at rte-france.com>}
Expand All @@ -25,6 +25,8 @@ public class HvdcAcModelingEnvironment implements OperationalConditionAligner {

private final Set<HvdcCreationParameters> creationParametersSet;
private final OperationalConditionAligner operationalConditionAligner;
private List<HvdcInformation> hvdcReferenceInformationList;
private List<HvdcInformation> hvdcMarketBasedInformationList;

public HvdcAcModelingEnvironment(Set<HvdcCreationParameters> creationParametersSet, OperationalConditionAligner operationalConditionAligner) {
creationParametersSet.stream()
Expand All @@ -34,6 +36,8 @@ public HvdcAcModelingEnvironment(Set<HvdcCreationParameters> creationParametersS
});
this.creationParametersSet = creationParametersSet;
this.operationalConditionAligner = operationalConditionAligner;
this.hvdcReferenceInformationList = new ArrayList<>();
this.hvdcMarketBasedInformationList = new ArrayList<>();
}

private void replaceEquivalentModelByHvdc(Network referenceNetwork, Network marketBasedNetwork) {
Expand All @@ -44,8 +48,10 @@ private void replaceEquivalentModelByHvdc(Network referenceNetwork, Network mark

private void replaceHvdcByEquivalentModel(Network referenceNetwork, Network marketBasedNetwork) {
LOGGER.info("Transform HVDC to their AC equivalent models");
HvdcLinkProcessor.replaceHvdcByEquivalentModel(referenceNetwork, creationParametersSet);
HvdcLinkProcessor.replaceHvdcByEquivalentModel(marketBasedNetwork, creationParametersSet);
hvdcReferenceInformationList = getHvdcInformationFromNetwork(referenceNetwork);
hvdcMarketBasedInformationList = getHvdcInformationFromNetwork(marketBasedNetwork);
HvdcLinkProcessor.replaceHvdcByEquivalentModel(referenceNetwork, creationParametersSet, hvdcReferenceInformationList);
HvdcLinkProcessor.replaceHvdcByEquivalentModel(marketBasedNetwork, creationParametersSet, hvdcMarketBasedInformationList);
}

@Override
Expand All @@ -54,4 +60,52 @@ public void align(Network referenceNetwork, Network marketBasedNetwork) {
operationalConditionAligner.align(referenceNetwork, marketBasedNetwork);
replaceHvdcByEquivalentModel(referenceNetwork, marketBasedNetwork);
}

List<HvdcInformation> getHvdcInformationFromNetwork(Network network) {
List<HvdcInformation> hvdcInformationList = new ArrayList<>();

for (HvdcCreationParameters parameter : creationParametersSet) {
HvdcInformation hvdcInformation = new HvdcInformation(parameter.getId());
Optional<Line> line = Optional.ofNullable(network.getLine(parameter.getEquivalentAcLineId()));
Optional<Generator> genSide1 = Optional.ofNullable(network.getGenerator(parameter.getEquivalentGeneratorId(TwoSides.ONE)));
Optional<Generator> genSide2 = Optional.ofNullable(network.getGenerator(parameter.getEquivalentGeneratorId(TwoSides.TWO)));
Optional<Load> loadSide1 = Optional.ofNullable(network.getLoad(parameter.getEquivalentLoadId(TwoSides.ONE).get(1)));
Optional<Load> loadSide2 = Optional.ofNullable(network.getLoad(parameter.getEquivalentLoadId(TwoSides.TWO).get(1)));

line.ifPresent(line1 -> {
hvdcInformation.setAcLineTerminal1Connected(line1.getTerminal1().isConnected());
hvdcInformation.setAcLineTerminal2Connected(line1.getTerminal2().isConnected());
});

genSide1.ifPresent(generator -> {
hvdcInformation.setSide1GeneratorConnected(generator.getTerminal().isConnected());
hvdcInformation.setSide1GeneratorTargetP(generator.getTargetP());
});
genSide2.ifPresent(generator -> {
hvdcInformation.setSide2GeneratorConnected(generator.getTerminal().isConnected());
hvdcInformation.setSide2GeneratorTargetP(generator.getTargetP());
});

loadSide1.ifPresentOrElse(
load -> {
hvdcInformation.setSide1LoadConnected(load.getTerminal().isConnected());
hvdcInformation.setSide1LoadP(load.getP0());
},
() -> Optional.ofNullable(network.getLoad(parameter.getEquivalentLoadId(TwoSides.ONE).get(2)))
.ifPresent(loadWithSecondOptionId -> {
hvdcInformation.setSide1LoadConnected(loadWithSecondOptionId.getTerminal().isConnected());
hvdcInformation.setSide1LoadP(loadWithSecondOptionId.getP0());
})
);

loadSide2.ifPresent(load -> {
hvdcInformation.setSide2LoadConnected(load.getTerminal().isConnected());
hvdcInformation.setSide2LoadP(load.getP0());
});

hvdcInformationList.add(hvdcInformation);
}

return hvdcInformationList;
}
}
6 changes: 3 additions & 3 deletions src/test/java/com/rte_france/trm_algorithm/TestUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@
import com.powsybl.iidm.network.Branch;
import com.powsybl.iidm.network.Country;
import com.powsybl.iidm.network.Network;
import com.powsybl.openrao.data.cracapi.Crac;
import com.powsybl.openrao.data.cracapi.CracFactory;
import com.powsybl.openrao.data.cracapi.networkaction.ActionType;
import com.powsybl.openrao.data.crac.api.Crac;
import com.powsybl.openrao.data.crac.api.CracFactory;
import com.powsybl.openrao.data.crac.api.networkaction.ActionType;
import com.rte_france.trm_algorithm.operational_conditions_aligners.ExchangeAligner;
import com.rte_france.trm_algorithm.operational_conditions_aligners.ExchangeAlignerResult;
import com.rte_france.trm_algorithm.operational_conditions_aligners.exchange_and_net_position.EmptyExchangeAndNetPosition;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
import com.powsybl.balances_adjustment.balance_computation.BalanceComputationResult;
import com.powsybl.iidm.network.Country;
import com.powsybl.iidm.network.Network;
import com.powsybl.openrao.data.cracapi.Crac;
import com.powsybl.openrao.data.crac.api.Crac;
import com.rte_france.trm_algorithm.operational_conditions_aligners.ExchangeAligner;
import com.rte_france.trm_algorithm.operational_conditions_aligners.ExchangeAlignerResult;
import org.junit.jupiter.api.Test;
Expand Down
13 changes: 9 additions & 4 deletions src/test/java/com/rte_france/trm_algorithm/TrmAlgorithmTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,10 @@
import com.powsybl.iidm.network.Network;
import com.powsybl.loadflow.LoadFlow;
import com.powsybl.loadflow.LoadFlowParameters;
import com.powsybl.openrao.data.cracapi.Crac;
import com.powsybl.openrao.data.cracapi.CracFactory;
import com.powsybl.openrao.data.cracapi.parameters.CracCreationParameters;
import com.powsybl.openrao.data.crac.api.Crac;
import com.powsybl.openrao.data.crac.api.CracFactory;
import com.powsybl.openrao.data.crac.api.parameters.CracCreationParameters;
import com.powsybl.openrao.data.crac.io.fbconstraint.parameters.FbConstraintCracCreationParameters;
import com.powsybl.sensitivity.SensitivityVariableSet;
import com.rte_france.trm_algorithm.operational_conditions_aligners.*;
import org.junit.jupiter.api.Test;
Expand Down Expand Up @@ -316,7 +317,11 @@ void testTwoNetworkWithCracFile() throws IOException {
Network marketBasedNetwork = TestUtils.importNetwork("TestCase12Nodes/TestCase12NodesHvdc.uct");
ZonalData<SensitivityVariableSet> zonalGlsks = TrmUtils.getAutoGlsk(referenceNetwork);
String cracFilePath = "TestCase12Nodes/cbcora_ep10us2case1.xml";
Crac localCrac = Crac.read(cracFilePath, Objects.requireNonNull(getClass().getResourceAsStream(cracFilePath)), referenceNetwork, OffsetDateTime.of(2019, 1, 7, 23, 30, 0, 0, ZoneOffset.UTC), new CracCreationParameters());
CracCreationParameters cracCreationParameters = new CracCreationParameters();
FbConstraintCracCreationParameters fbConstraintCracCreationParameters = new FbConstraintCracCreationParameters();
fbConstraintCracCreationParameters.setTimestamp(OffsetDateTime.of(2019, 1, 7, 23, 30, 0, 0, ZoneOffset.UTC));
cracCreationParameters.addExtension(FbConstraintCracCreationParameters.class, fbConstraintCracCreationParameters);
Crac localCrac = Crac.read(cracFilePath, Objects.requireNonNull(getClass().getResourceAsStream(cracFilePath)), referenceNetwork, cracCreationParameters);
localCrac.getNetworkAction("Open FR1 FR2").apply(referenceNetwork);
ZonalData<Scalable> localMarketZonalScalable = TrmUtils.getAutoScalable(marketBasedNetwork);
XnecProviderByIds xnecProviderByIds = XnecProviderByIds.builder()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,11 @@
package com.rte_france.trm_algorithm.operational_conditions_aligners;

import com.powsybl.iidm.network.Network;
import com.powsybl.openrao.data.cracapi.Crac;
import com.powsybl.openrao.data.cracapi.CracFactory;
import com.powsybl.openrao.data.cracapi.networkaction.ActionType;
import com.powsybl.openrao.data.cracapi.parameters.CracCreationParameters;
import com.powsybl.openrao.data.crac.api.Crac;
import com.powsybl.openrao.data.crac.api.CracFactory;
import com.powsybl.openrao.data.crac.api.networkaction.ActionType;
import com.powsybl.openrao.data.crac.api.parameters.CracCreationParameters;
import com.powsybl.openrao.data.crac.io.fbconstraint.parameters.FbConstraintCracCreationParameters;
import com.rte_france.trm_algorithm.TestUtils;
import org.junit.jupiter.api.Test;

Expand Down Expand Up @@ -80,7 +81,11 @@ void testTwoNetworkWithCracFile() throws IOException {
Network referenceNetwork = TestUtils.importNetwork("TestCase12Nodes/TestCase12NodesHvdc.uct");
Network marketBasedNetwork = TestUtils.importNetwork("TestCase12Nodes/TestCase12NodesHvdc.uct");
String cracFilePath = "../TestCase12Nodes/cbcora_ep10us2case1.xml";
Crac crac = Crac.read(cracFilePath, Objects.requireNonNull(getClass().getResourceAsStream(cracFilePath)), referenceNetwork, OffsetDateTime.of(2019, 1, 7, 23, 30, 0, 0, ZoneOffset.UTC), new CracCreationParameters());
CracCreationParameters cracCreationParameters = new CracCreationParameters();
FbConstraintCracCreationParameters fbConstraintCracCreationParameters = new FbConstraintCracCreationParameters();
fbConstraintCracCreationParameters.setTimestamp(OffsetDateTime.of(2019, 1, 7, 23, 30, 0, 0, ZoneOffset.UTC));
cracCreationParameters.addExtension(FbConstraintCracCreationParameters.class, fbConstraintCracCreationParameters);
Crac crac = Crac.read(cracFilePath, Objects.requireNonNull(getClass().getResourceAsStream(cracFilePath)), referenceNetwork, cracCreationParameters);
crac.getNetworkAction("Open FR1 FR2").apply(referenceNetwork);

CracAligner cracAligner = new CracAligner(crac);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@
import com.powsybl.iidm.network.Country;
import com.powsybl.iidm.network.Network;
import com.powsybl.loadflow.LoadFlow;
import com.powsybl.openrao.data.cracapi.Crac;
import com.powsybl.openrao.data.cracapi.CracFactory;
import com.powsybl.openrao.data.crac.api.Crac;
import com.powsybl.openrao.data.crac.api.CracFactory;
import com.rte_france.trm_algorithm.TestUtils;
import org.junit.jupiter.api.Test;

Expand Down Expand Up @@ -118,7 +118,7 @@ void testAlignmentChainWithHvdcModeling() {
assertEquals(-5, marketBasedNetwork.getTwoWindingsTransformer("BBE2AA1 BBE3AA1 1").getPhaseTapChanger().getTapPosition());
assertPstAlignerResult(pstAligner.getResult(), "BBE2AA1 BBE3AA1 1", "FFR2AA1 FFR4AA1 1");
assertExchangeAlignerResult(exchangeAligner.getResult(),
Map.of(Country.BE, 2027.7, Country.DE, -1005.4, Country.FR, -522.3, Country.NL, -500.),
Map.of(Country.FR, Map.of(Country.DE, 446.3), Country.NL, Map.of(Country.DE, 559.1), Country.BE, Map.of(Country.FR, 968.5, Country.NL, 1059.1)));
Map.of(Country.BE, 2027.266, Country.DE, -1005.173, Country.FR, -522.093, Country.NL, -500.),
Map.of(Country.FR, Map.of(Country.DE, 431.153), Country.NL, Map.of(Country.DE, 574.02), Country.BE, Map.of(Country.FR, 953.246, Country.NL, 1074.02)));
}
}