From f63fd62ccffb15b045912627547f58acba3c967f Mon Sep 17 00:00:00 2001 From: Christian Biasuzzi Date: Mon, 12 Nov 2018 21:03:18 +0100 Subject: [PATCH 1/2] filter out invalid contingencies in Eurostag impact analysis and export tool --- .../eurostag/EurostagExportTool.java | 3 +- .../eurostag/EurostagImpactAnalysis.java | 4 +-- .../FilterValidContingenciesProvider.java | 30 +++++++++++++++++++ 3 files changed, 34 insertions(+), 3 deletions(-) create mode 100644 eurostag-integration/src/main/java/eu/itesla_project/eurostag/FilterValidContingenciesProvider.java diff --git a/eurostag-integration/src/main/java/eu/itesla_project/eurostag/EurostagExportTool.java b/eurostag-integration/src/main/java/eu/itesla_project/eurostag/EurostagExportTool.java index 31d92b0f..c8f3e83f 100644 --- a/eurostag-integration/src/main/java/eu/itesla_project/eurostag/EurostagExportTool.java +++ b/eurostag-integration/src/main/java/eu/itesla_project/eurostag/EurostagExportTool.java @@ -107,7 +107,8 @@ public void run(CommandLine line, ToolRunningContext context) throws Exception { try (BufferedWriter writer = Files.newBufferedWriter(outputDir.resolve(PRE_FAULT_SEQ_FILE_NAME), StandardCharsets.UTF_8)) { scenario.writePreFaultSeq(writer, PRE_FAULT_SAC_FILE_NAME); } - ContingenciesProvider contingenciesProvider = defaultConfig.newFactoryImpl(ContingenciesProviderFactory.class).create(); + ContingenciesProvider contingenciesProvider = new FilterValidContingenciesProvider(defaultConfig.newFactoryImpl(ContingenciesProviderFactory.class).create()); + scenario.writeFaultSeqArchive(contingenciesProvider.getContingencies(network), network, dictionary, faultNum -> FAULT_SEQ_FILE_NAME.replace(com.powsybl.computation.CommandConstants.EXECUTION_NUMBER_PATTERN, Integer.toString(faultNum))) .as(ZipExporter.class).exportTo(outputDir.resolve(ALL_SCENARIOS_ZIP_FILE_NAME).toFile()); diff --git a/eurostag-integration/src/main/java/eu/itesla_project/eurostag/EurostagImpactAnalysis.java b/eurostag-integration/src/main/java/eu/itesla_project/eurostag/EurostagImpactAnalysis.java index 3c32d6aa..f5364db9 100644 --- a/eurostag-integration/src/main/java/eu/itesla_project/eurostag/EurostagImpactAnalysis.java +++ b/eurostag-integration/src/main/java/eu/itesla_project/eurostag/EurostagImpactAnalysis.java @@ -153,7 +153,7 @@ public EurostagImpactAnalysis(Network network, ComputationManager computationMan this.network = network; this.computationManager = computationManager; this.priority = priority; - this.contingenciesProvider = contingenciesProvider; + this.contingenciesProvider = new FilterValidContingenciesProvider(contingenciesProvider); this.config = config; this.exportConfig = exportConfig; allCmd = createCommand(ALL_SCENARIOS_ZIP_FILE_NAME, WP43_ALL_CONFIGS_ZIP_FILE_NAME); @@ -499,7 +499,7 @@ private Command before(SimulationState state, Set contingencyIds, Path w } } else { // filter contingencies - for (Contingency c : contingenciesProvider.getContingencies(network)) { + for (Contingency c : allContingencies) { if (contingencyIds.contains(c.getId())) { contingencies.add(c); } diff --git a/eurostag-integration/src/main/java/eu/itesla_project/eurostag/FilterValidContingenciesProvider.java b/eurostag-integration/src/main/java/eu/itesla_project/eurostag/FilterValidContingenciesProvider.java new file mode 100644 index 00000000..4ba3970a --- /dev/null +++ b/eurostag-integration/src/main/java/eu/itesla_project/eurostag/FilterValidContingenciesProvider.java @@ -0,0 +1,30 @@ +/** + * Copyright (c) 2018, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +package eu.itesla_project.eurostag; + +import com.powsybl.contingency.ContingenciesProvider; +import com.powsybl.contingency.Contingency; +import com.powsybl.iidm.network.Network; + +import java.util.List; + +/** + * @author Christian Biasuzzi + */ +public class FilterValidContingenciesProvider implements ContingenciesProvider { + + final ContingenciesProvider wrappedProvider; + + public FilterValidContingenciesProvider(ContingenciesProvider wrappedProvider) { + this.wrappedProvider = wrappedProvider; + } + + @Override + public List getContingencies(Network network) { + return Contingency.checkValidity(wrappedProvider.getContingencies(network), network); + } +} From e072e93234b7bc8ef32e39a5bfceef4f7784f6d5 Mon Sep 17 00:00:00 2001 From: Christian Biasuzzi Date: Tue, 13 Nov 2018 17:42:25 +0100 Subject: [PATCH 2/2] overwrite outputs, if existing --- .../java/eu/itesla_project/eurostag/EurostagExportTool.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eurostag-integration/src/main/java/eu/itesla_project/eurostag/EurostagExportTool.java b/eurostag-integration/src/main/java/eu/itesla_project/eurostag/EurostagExportTool.java index c8f3e83f..d3ab5075 100644 --- a/eurostag-integration/src/main/java/eu/itesla_project/eurostag/EurostagExportTool.java +++ b/eurostag-integration/src/main/java/eu/itesla_project/eurostag/EurostagExportTool.java @@ -110,7 +110,7 @@ public void run(CommandLine line, ToolRunningContext context) throws Exception { ContingenciesProvider contingenciesProvider = new FilterValidContingenciesProvider(defaultConfig.newFactoryImpl(ContingenciesProviderFactory.class).create()); scenario.writeFaultSeqArchive(contingenciesProvider.getContingencies(network), network, dictionary, faultNum -> FAULT_SEQ_FILE_NAME.replace(com.powsybl.computation.CommandConstants.EXECUTION_NUMBER_PATTERN, Integer.toString(faultNum))) - .as(ZipExporter.class).exportTo(outputDir.resolve(ALL_SCENARIOS_ZIP_FILE_NAME).toFile()); + .as(ZipExporter.class).exportTo(outputDir.resolve(ALL_SCENARIOS_ZIP_FILE_NAME).toFile(), true); // export limits try (OutputStream os = Files.newOutputStream(outputDir.resolve(LIMITS_ZIP_FILE_NAME))) {