ZonalGlsksTest.java
/*
* Copyright (c) 2023, 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/.
* SPDX-License-Identifier: MPL-2.0
*/
package com.powsybl.glsk.cse;
import com.powsybl.glsk.api.GlskDocument;
import com.powsybl.glsk.api.io.GlskDocumentImporters;
import com.powsybl.glsk.commons.GlskException;
import com.powsybl.iidm.network.Network;
import com.powsybl.sensitivity.SensitivityVariableSet;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
/**
* @author Sebastien Murgey {@literal <sebastien.murgey at rte-france.com>}
*/
class ZonalGlsksTest {
private static final double EPSILON = 1e-3;
@Test
void checkZonalGlskFromManualGskBlocks() {
Network network = Network.read("testCase.xiidm", getClass().getResourceAsStream("/testCase.xiidm"));
CseGlskDocument cseGlskDocument = CseGlskDocument.importGlsk(getClass().getResourceAsStream("/testGlskOnlyLinear.xml"), false, true);
SensitivityVariableSet manualGlskSensi = cseGlskDocument.getZonalGlsks(network).getData("FR_MANUAL");
assertNotNull(manualGlskSensi);
assertEquals(0.7, manualGlskSensi.getVariable("FFR1AA1 _generator").getWeight(), EPSILON);
assertEquals(0.3, manualGlskSensi.getVariable("FFR3AA1 _generator").getWeight(), EPSILON);
}
@Test
void checkZonalGlskFromProportionalGskBlocks() {
Network network = Network.read("testCase.xiidm", getClass().getResourceAsStream("/testCase.xiidm"));
GlskDocument cseGlskDocument = GlskDocumentImporters.importGlsk(getClass().getResourceAsStream("/testGlskOnlyLinear.xml"));
SensitivityVariableSet glskSensi = cseGlskDocument.getZonalGlsks(network).getData("FR_PROPGSK");
assertNotNull(glskSensi);
assertEquals(0.286, glskSensi.getVariable("FFR1AA1 _generator").getWeight(), EPSILON);
assertEquals(0.286, glskSensi.getVariable("FFR2AA1 _generator").getWeight(), EPSILON);
assertEquals(0.428, glskSensi.getVariable("FFR3AA1 _generator").getWeight(), EPSILON);
}
@Test
void checkZonalGlskFromProportionalGlskBlocks() {
Network network = Network.read("testCase.xiidm", getClass().getResourceAsStream("/testCase.xiidm"));
CseGlskDocument cseGlskDocument = CseGlskDocument.importGlsk(getClass().getResourceAsStream("/testGlskOnlyLinear.xml"), false, true);
SensitivityVariableSet glskSensi = cseGlskDocument.getZonalGlsks(network).getData("FR_PROPGLSK");
assertNotNull(glskSensi);
assertEquals(0.2, glskSensi.getVariable("FFR1AA1 _generator").getWeight(), EPSILON);
assertEquals(0.2, glskSensi.getVariable("FFR2AA1 _generator").getWeight(), EPSILON);
assertEquals(0.3, glskSensi.getVariable("FFR3AA1 _generator").getWeight(), EPSILON);
assertEquals(0.067, glskSensi.getVariable("FFR1AA1 _load").getWeight(), EPSILON);
assertEquals(0.233, glskSensi.getVariable("FFR2AA1 _load").getWeight(), EPSILON);
}
@Test
void checkZonalGlskFailsWithNonLinearGlskBlocks() {
Network network = Network.read("testCase.xiidm", getClass().getResourceAsStream("/testCase.xiidm"));
CseGlskDocument cseGlskDocument = CseGlskDocument.importGlsk(getClass().getResourceAsStream("/testGlsk.xml"), false, true);
assertThrows(GlskException.class, () -> cseGlskDocument.getZonalGlsks(network));
}
}