Skip to content

Commit

Permalink
AutoGlskProvider uses connected generators, and don't crash when the …
Browse files Browse the repository at this point in the history
…sum of target Ps is zero (#131)

* AutoGlskProvider uses connected generators and don't fail if target P is zero

---------

Signed-off-by: Guillaume Verger <guillaume.verger@artelys.com>
  • Loading branch information
gverger authored Jan 29, 2024
1 parent 38f420b commit 9e9be3c
Show file tree
Hide file tree
Showing 2 changed files with 54 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -23,17 +23,23 @@
public class AutoGlskProvider implements GlskProvider {
@Override
public Map<Country, Map<String, Double>> getGlsk(Network network) {
Map<Country, Map<String, Double>> glsks = network.getCountries().stream().collect(Collectors.toMap(
Function.identity(),
country -> new HashMap<>()));
network.getGeneratorStream()
.forEach(generator -> {
Country generatorCountry = NetworkUtil.getInjectionCountry(generator);
glsks.get(generatorCountry).put(generator.getId(), generator.getTargetP());
});
Map<Country, Map<String, Double>> glsks =
network.getCountries()
.stream()
.collect(Collectors.toMap(Function.identity(), country -> new HashMap<>()));

network.getGeneratorStream().filter(g -> g.getTerminal().isConnected()).forEach(generator -> {
Country generatorCountry = NetworkUtil.getInjectionCountry(generator);
glsks.get(generatorCountry).put(generator.getId(), generator.getTargetP());
});

glsks.forEach((country, glsk) -> {
double glskSum = glsk.values().stream().mapToDouble(factor -> factor).sum();
glsk.forEach((key, value) -> glsk.put(key, value / glskSum));
if (glskSum == 0.0) {
glsk.forEach((key, value) -> glsk.put(key, 1.0 / glsk.size()));
} else {
glsk.forEach((key, value) -> glsk.put(key, value / glskSum));
}
});
return glsks;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,47 @@ void testThatGlskAreWellComputed() {
String loadBe = "BLOAD 11_load";
String genFr = "FGEN1 11_generator";
Network network = importNetwork(networkFileName);
AutoGlskProvider autoGlskProvider = new AutoGlskProvider();
Map<Country, Map<String, Double>> glsks = autoGlskProvider.getGlsk(network);

Map<Country, Map<String, Double>> glsks = new AutoGlskProvider().getGlsk(network);

assertEquals(1.0, glsks.get(Country.FR).get(genFr), EPSILON);
assertEquals(1.0, glsks.get(Country.BE).get(genBe), EPSILON);
assertNull(glsks.get(Country.BE).get(loadBe));
}

@Test
void testThatGlskIgnoreDisconnectedGenerators() {
String networkFileName = "NETWORK_SINGLE_LOAD_TWO_GENERATORS_WITH_COUNTRIES.uct";
String genBe = "BGEN2 11_generator";
String loadBe = "BLOAD 11_load";
String genFr = "FGEN1 11_generator";
Network network = importNetwork(networkFileName);

network.getGenerator(genFr).getTerminal().disconnect();

Map<Country, Map<String, Double>> glsks = new AutoGlskProvider().getGlsk(network);

assertNull(glsks.get(Country.FR).get(genFr));

assertEquals(1.0, glsks.get(Country.BE).get(genBe), EPSILON);
assertNull(glsks.get(Country.BE).get(loadBe));
}

@Test
void testThatGlskWorkForNullTargetP() {
String networkFileName = "NETWORK_SINGLE_LOAD_TWO_GENERATORS_WITH_COUNTRIES.uct";
String genBe = "BGEN2 11_generator";
String loadBe = "BLOAD 11_load";
String genFr = "FGEN1 11_generator";
Network network = importNetwork(networkFileName);

network.getGenerator(genFr).setTargetP(0.0);

Map<Country, Map<String, Double>> glsks = new AutoGlskProvider().getGlsk(network);

assertEquals(1.0, glsks.get(Country.FR).get(genFr), EPSILON);
assertEquals(1.0, glsks.get(Country.BE).get(genBe), EPSILON);
assertNull(glsks.get(Country.BE).get(loadBe));
}

}

0 comments on commit 9e9be3c

Please sign in to comment.