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.

ICS Importer_

        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);
        });