ICS¶
ICS data contains necessary data to define redispatching actions’ specific constraints. ICS data are only used for costly computations.
Static¶
Static ICS data defines a remedial action’s generator’s static constraints:
Name |
Details |
|---|---|
RA RD ID |
Remedial action ID |
TSO |
TSO location (“CZ”, “BE”, “PL”, “D2”, …). |
Preventive |
RA is applied before any contingency occurs (true/false) |
Curative |
RA is applied after given contingency occurs (true/false) |
Time From |
|
Time To |
|
Generator Name |
RA’s associated generator’s name |
RD Description mode |
One of two values possible: “NODE” or “GSK” |
UCT Node or GSK ID |
Name of connection node or ID of GSK as specified in GSK ICS data |
Minimum Redispatch [MW] |
Minimum amount of redispatch in MW. |
Fuel type |
Fuel type one of the following: “Coal”, “Hydro(NonPS)”, “Nuclear”, “Oil”, “PumpStorage”, “PV”, “Wing”, “Other” |
Minimum up-time [h] |
Minimum uptime for RA RD in hours. |
Minimum down-time [h] |
Minimum downtime for RA RD in hours. |
Maximum positive power gradient [MW/h] |
Maximum positive power gradient for RA RD in MW/h. |
Maximum negative power gradient [MW/h] |
Maximum negative power gradient for RA RD in MW/h. |
Lead time [h] |
Lead time for activation of RA RD in h. |
Lag time [h] |
Lag time for deactivation of RA RD in h. |
Shutdown allowed |
To indicate if RA RD can be shutdown. One of two values possible: “TRUE”, “FALSE”. |
Startup allowed |
To indicate if RA RD can be started from standstill. One of two values possible: “TRUE”, “FALSE”. |
Series¶
This CSV defines a remedial action’s generator’s operating program P0, allowed undershoot/overshoot from P0 (RDP- and RDP+, positive values), and the Pmin of redispatching (Pmin_RD). These values are defined as time series over 24 hours.
GSK¶
Name |
Details |
|---|---|
GSK ID |
Unique identifier of GSK |
Node |
UCT code of the node described with 8 characters. |
Weight |
Weight for GSK at respective node. Sum of weights for all nodes in one GSK should be 1. |
Read ICS data¶
InputStream staticIcs = new FileInputStream("path/to/ics/static.csv");
InputStream seriesIcs = new FileInputStream("path/to/ics/series.csv");
InputStream gskIcs = new FileInputStream("path/to/ics/gsk.csv");
IcsData icsData = new IcsDataImporter.read(staticIcs, seriesIcs, gskIcs);
ICS data to create TimeCoupledRaoInput¶
When the redispatching actions are imported using ICS data, for each action and each timestamp, the network is modified to add the missing generators on the right bus and the crac is modified to add the redispatching actions.
_
Network network1 = LazyNetwork.of("networkPath");
TemporalData<RaoInput> raoInputs = new TemporalDataImpl<>(
Map.of(
timestamp1, RaoInput.build(network1, crac1).build(),
// other timestamps
));
TimeCoupledRaoInput timeCoupledRaoInput = new TimeCoupledRaoInput(raoInputs, new TimeCoupledConstraints());
IcsData icsData = IcsDataImporter.read(
getClass().getResourceAsStream("/ics/static.csv"),
getClass().getResourceAsStream("/ics/series.csv"),
getClass().getResourceAsStream("/glsk/gsk.csv"),
timestampsToRun);
TimeCoupledRaoInput postIcsRaoInputs = icsData.processAllRedispatchingActions(timeCoupledRaoInput, costUp, costDown, exportDirectory);
// Export Time-Coupled Constraints JSON
OutputStream outputStream = Files.newOutputStream(Path.of(exportPath.concat("time-coupled-constraints.json")));
JsonTimeCoupledConstraints.write(postIcsRaoInputs.getTimeCoupledConstraints(), outputStream);
postIcsRaoInputs.getRaoInputs().getDataPerTimestamp().forEach( (timestamp, raoInput) -> {
// Export network in JIIDM format with the added generators
String networkPath = exportPath.concat("networks/").concat(timestamp.toString()).concat(".jiidm");
raoInput.getNetwork().write("JIIDM", new Properties(), Path.of(networkPath));
// Export CRAC in JSON format with the added redispatching actions
OutputStream fileOutputStream = Files.newOutputStream(Path.of(exportPath.concat("cracs/").concat(timestamp.toString()).concat(".json")));
raoInput.getCrac().write("JSON", fileOutputStream);
});