Skip to content

Commit db802e6

Browse files
committed
[IMG-2474] Curative results sum computation
Signed-off-by: marifunf <[email protected]>
1 parent 45e2000 commit db802e6

File tree

3 files changed

+76
-50
lines changed

3 files changed

+76
-50
lines changed

metrix-integration/src/main/java/com/powsybl/metrix/integration/dataGenerator/MetrixOutputData.java

+40-14
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,20 @@ public class MetrixOutputData {
3434
public static final String ERROR_CODE_NAME = "ERROR_CODE";
3535
public static final String OVERLOAD_BASECASE = "OVERLOAD_BASECASE";
3636
public static final String OVERLOAD_OUTAGES = "OVERLOAD_OUTAGES";
37-
public static final String GEN_COST = "GEN_COST";
38-
public static final String LOAD_COST = "LOAD_COST";
37+
38+
public static final String GEN_PREFIX = "GEN_";
39+
public static final String GEN_CUR_PREFIX = "GEN_CUR_";
40+
public static final String GEN_COST = GEN_PREFIX + "COST";
41+
public static final String GEN_VOL_UP = GEN_PREFIX + "VOL_UP_";
42+
public static final String GEN_VOL_DOWN = GEN_PREFIX + "VOL_DOWN_";
43+
44+
public static final String LOAD_PREFIX = "LOAD_";
45+
public static final String LOAD_CUR_PREFIX = "LOAD_CUR_";
46+
public static final String LOAD_COST = LOAD_PREFIX + "COST";
47+
3948
public static final String FLOW_NAME = "FLOW_";
4049
public static final String MAX_THREAT_NAME = "MAX_THREAT_";
4150
public static final String MAX_TMP_THREAT_FLOW = "MAX_TMP_THREAT_FLOW_";
42-
public static final String GEN_VOL_UP = "GEN_VOL_UP_";
43-
public static final String GEN_VOL_DOWN = "GEN_VOL_DOWN_";
4451
public static final String LOSSES = "LOSSES";
4552
public static final String LOSSES_BY_COUNTRY = "LOSSES_";
4653
public static final String HVDC_NAME = "HVDC_";
@@ -52,6 +59,7 @@ public class MetrixOutputData {
5259
public static final String PST_TYPE = "pst";
5360
public static final String GEN_TYPE = "generator-type";
5461
public static final String GENERATOR = "generator";
62+
public static final String LOAD = "load";
5563
public static final String BRANCH = "branch";
5664
public static final String CONTINGENCY_TYPE = "contingency";
5765
public static final String BASECASE_TYPE = "basecase";
@@ -96,6 +104,14 @@ public DoubleResultChunk(int length, Map<String, String> metadata) {
96104
public void insertResult(int pos, double value) {
97105
timeSeries[pos] = value;
98106
}
107+
108+
public void addResult(int pos, double value) {
109+
if (Double.isNaN(timeSeries[pos])) {
110+
insertResult(pos, value);
111+
} else {
112+
timeSeries[pos] += value;
113+
}
114+
}
99115
}
100116

101117
private static final class StringResultChunk {
@@ -522,13 +538,18 @@ private void readR2C(int varNum, String[] chunks) {
522538
private void readR2B(int varNum, String[] chunks, Map<Integer, String> outageNames) {
523539
String outageName;
524540
DoubleResultChunk ts;
541+
DoubleResultChunk tsSum;
525542
// Check that it's not the header
526543
if (INCIDENT.equals(chunks[1])) {
527544
return;
528545
}
529546
outageName = Optional.ofNullable(outageNames.get(Integer.parseInt(chunks[1]))).orElseThrow(() -> new PowsyblException(UNKNOWN_OUTAGE));
530-
ts = getDoubleTimeSeries("GEN_CUR_", GENERATOR, chunks[2], outageName);
531-
ts.insertResult(varNum - offset, Double.parseDouble(chunks[3]));
547+
ts = getDoubleTimeSeries(GEN_CUR_PREFIX, GENERATOR, chunks[2], outageName);
548+
double redispatchingValue = Double.parseDouble(chunks[3]);
549+
ts.insertResult(varNum - offset, redispatchingValue);
550+
// Compute curative redispatching by generator = sum of generator curative redispatching for all outages
551+
tsSum = getDoubleTimeSeries(GEN_CUR_PREFIX + chunks[2]);
552+
tsSum.addResult(varNum - offset, redispatchingValue);
532553
}
533554

534555
/**
@@ -545,7 +566,7 @@ private void readR2(int varNum, String[] chunks) {
545566
ts.insertResult(varNum - offset, Double.parseDouble(chunks[5]));
546567
}
547568
if (!EMPTY_STRING.equals(chunks[6])) {
548-
ts = getDoubleTimeSeries("GEN_", GENERATOR, chunks[2]);
569+
ts = getDoubleTimeSeries(GEN_PREFIX, GENERATOR, chunks[2]);
549570
ts.insertResult(varNum - offset, Double.parseDouble(chunks[6]));
550571
}
551572
}
@@ -559,21 +580,26 @@ private void readR1C(int varNum, String[] chunks) {
559580
if ("NOM REGROUPEMENT".equals(chunks[1])) {
560581
return;
561582
}
562-
ts = getDoubleTimeSeries("LOAD_", "load binding", chunks[1]);
583+
ts = getDoubleTimeSeries(LOAD_PREFIX, "load binding", chunks[1]);
563584
ts.insertResult(varNum - offset, Double.parseDouble(chunks[2]));
564585
}
565586

566587
/**
567588
* Curative Loads
568589
*/
569590
private void readR1B(int varNum, Map<Integer, String> outageNames, String[] chunks) {
591+
DoubleResultChunk tsSum;
570592
// Check that it's not the header
571593
if (INCIDENT.equals(chunks[1])) {
572594
return;
573595
}
574596
String outageName = Optional.ofNullable(outageNames.get(Integer.parseInt(chunks[1]))).orElseThrow(() -> new PowsyblException(UNKNOWN_OUTAGE));
575-
DoubleResultChunk ts = getDoubleTimeSeries("LOAD_CUR_", "load", chunks[2], outageName);
576-
ts.insertResult(varNum - offset, Double.parseDouble(chunks[3]));
597+
DoubleResultChunk ts = getDoubleTimeSeries(LOAD_CUR_PREFIX, LOAD, chunks[2], outageName);
598+
double sheddingValue = Double.parseDouble(chunks[3]);
599+
ts.insertResult(varNum - offset, sheddingValue);
600+
// Compute curative load shedding by load = sum of curative load shedding for all outages
601+
tsSum = getDoubleTimeSeries(LOAD_CUR_PREFIX + chunks[2]);
602+
tsSum.addResult(varNum - offset, sheddingValue);
577603
}
578604

579605
/**
@@ -586,11 +612,11 @@ private void readR1(int varNum, String[] chunks) {
586612
}
587613
DoubleResultChunk ts;
588614
if (!EMPTY_STRING.equals(chunks[4])) {
589-
ts = getDoubleTimeSeries("INIT_BAL_LOAD_", "load", chunks[2]);
615+
ts = getDoubleTimeSeries("INIT_BAL_LOAD_", LOAD, chunks[2]);
590616
ts.insertResult(varNum - offset, Double.parseDouble(chunks[4]));
591617
}
592618
if (!EMPTY_STRING.equals(chunks[5])) {
593-
ts = getDoubleTimeSeries("LOAD_", "load", chunks[2]);
619+
ts = getDoubleTimeSeries(LOAD_PREFIX, LOAD, chunks[2]);
594620
ts.insertResult(varNum - offset, Double.parseDouble(chunks[5]));
595621
}
596622
}
@@ -627,7 +653,7 @@ private void readC2B(int varNum, String[] chunks) {
627653
return;
628654
}
629655
if (!EMPTY_STRING.equals(chunks[4])) {
630-
DoubleResultChunk ts = getDoubleTimeSeries("LOST_LOAD_", "load", chunks[3], chunks[2]);
656+
DoubleResultChunk ts = getDoubleTimeSeries("LOST_LOAD_", LOAD, chunks[3], chunks[2]);
631657
ts.insertResult(varNum - offset, Double.parseDouble(chunks[4]));
632658
}
633659
}
@@ -646,7 +672,7 @@ private void readC2(int varNum, String[] chunks) {
646672
ts.insertResult(varNum - offset, Double.parseDouble(chunks[4]));
647673
}
648674
if (!EMPTY_STRING.equals(chunks[5])) {
649-
ts = getDoubleTimeSeries("LOST_LOAD_", "load", chunks[2]);
675+
ts = getDoubleTimeSeries("LOST_LOAD_", LOAD, chunks[2]);
650676
ts.insertResult(varNum - offset, Double.parseDouble(chunks[5]));
651677
}
652678
}

0 commit comments

Comments
 (0)