Electric System Input Data¶
All the input files must be in a folder with the name of the case study.
Alternatively, the whole case can be a single .duckdb file instead of a folder of CSV files. openTEPES_run selects the backend from the path: a directory is
read as CSV (the historical default), while a .duckdb file is read through the DuckDB backend. DuckDB is an optional dependency, imported only when such a
file is opened, so CSV-only setups need nothing extra. Both forms produce byte-identical results and are interchangeable everywhere a case is named.
You can inspect a DuckDB case with any client — it holds one table per input table, plus a schema_metadata table that records the case name:
import duckdb
con = duckdb.connect("cases/9n.duckdb", read_only=True)
con.execute("SHOW TABLES").df() # one table per input, plus schema_metadata
con.execute("SELECT Value FROM schema_metadata WHERE Key = 'source_case'").fetchone() # the case name
Two tools in scripts/openTEPES_DuckDB/ convert a case between the two forms. Tool_CSV_to_DuckDB writes a CSV case to a .duckdb, and Tool_DuckDB_to_CSV
exports a .duckdb back to CSV folders:
# CSV case -> .duckdb
python scripts/openTEPES_DuckDB/Tool_CSV_to_DuckDB.py openTEPES/cases/9n
# .duckdb -> CSV case
python scripts/openTEPES_DuckDB/Tool_DuckDB_to_CSV.py openTEPES/cases/9n_duckdb/9n.duckdb --out openTEPES/cases/9n_from_db
Both tools are driven by the same schema as the DuckDB reader, so a converted case reads back identically. A .duckdb file is a generated artifact — the CSV
folders are the versioned source, so .duckdb files are git-ignored and you regenerate them with the tool. The bundled 9n case ships in both forms as an
example: openTEPES/cases/9n (CSV) and openTEPES/cases/9n_duckdb/9n.duckdb (a ready-to-run DuckDB input).
The Yes/No option flags below also accept an integer 1 (or 1.0) in place of Yes and 0 in place of No.
Acronyms¶
Acronym |
Description |
|---|---|
AC |
Alternating Current |
aFRR |
Automatic Frequency Restoration Reserve (a.k.a. secondary reserve), provided within 5 minutes (Full Activation Time) |
AWE |
Alkaline Water Electrolyzer (consumes electricity to produce hydrogen) |
BESS |
Battery Energy Storage System |
CAPEX |
Capital Expenditure |
CC |
Capacity Credit (contribution of a power generation resource —particularly variable renewable energy (VRE) like wind or solar— to meeting peak demand) |
CCGT |
Combined Cycle Gas Turbine |
CHP |
Combined Heat and Power. Cogeneration (produces electricity and heat simultaneously) |
DC |
Direct Current |
DCPF |
DC Power Flow |
DR |
Demand Response (e.g., interruptibility) |
DSM |
Demand-Side Management (e.g., load shifting) |
DSR |
Demand-Side Response (e.g., interruptibility) |
EB |
Electric Boiler (Power to Heat: consumes electricity to produce heat) |
EHU |
Electrical Heating Unit (Power to Heat: consumes electricity to produce heat, e.g., heat pump, electric boiler) |
EFOR |
Equivalent Forced Outage Rate (probability that a generating unit will be unavailable due to forced outages during a given period) |
ELCC |
Effective Load-Carrying Capability. Amount of additional load that the power system can serve with the inclusion of the resource, while maintaining the same level of system reliability |
ELZ |
Electrolyzer (Power to Hydrogen: consumes electricity to produce hydrogen) |
ENS |
Energy Not Served |
ENTSO-E |
European Network of Transmission System Operators for Electricity |
ESS |
Energy Storage System |
EV |
Electric Vehicle |
FCE |
Firm Capacity Equivalent (amount of reliable, always-available generation capacity that would provide the same level of system reliability as the resource being evaluated) |
FHU |
Fuel Heating Unit (Fuel to Heat: consumes any fuel other than hydrogen to produce heat, e.g., biomass/natural gas/oil boiler) |
GEP |
Generation Expansion Planning |
H2 |
Hydrogen |
HHU |
Hydrogen Heating Unit (Hydrogen to Heat: consumes hydrogen to produce heat) |
HNS |
Hydrogen Not Served |
HP |
Heat Pump (Power to Heat: consumes electricity to produce heat) |
HTNS |
Heat Not Served |
IRP |
Integrated Resource Planning |
LCOE |
Levelized Cost of Electricity |
mFRR |
Manual Frequency Restoration Reserve (a.k.a. tertiary reserve) helps to restore the required grid frequency of 50 Hz. It must be fully deployable within 12.5 minutes and has a minimum duration of 5 minutes |
NTC |
Net Transfer Capacity (maximum power transfer between two nodes, zones, areas, or regions, considering the network constraints) |
OCGT |
Open Cycle Gas Turbine |
PHS |
Pumped-Hydro Storage |
PNS |
Power Not Served |
PTDF |
Power Transfer Distribution Factor (ratio of the change in flow on a transmission line to the change in power injection at a node) |
PV |
Photovoltaics |
RES |
Renewable Energy Source |
SEP |
Storage Expansion Planning |
TEP |
Transmission Expansion Planning |
TTC |
Total Transfer Capacity (maximum amount of electric power that can be transferred over the transmission network between two areas under ideal operating conditions, while maintaining system security as defined by operational standards) |
VoLL |
Value of Lost Load (maximum amount of money that a customer is willing to pay to avoid an interruption of 1 kWh of electricity supply). Common values are between 1000 and 10000 €/MWh |
VRE |
Variable Renewable Energy |
VRES |
Variable Renewable Energy Source (units with null linear variable cost and no storage capacity. They do not contribute to the operating reserves) |
Dictionaries. Sets¶
The dictionaries include all the possible elements of the corresponding sets in the optimization problem. You cannot use non-English characters (e.g., ó, º).
File |
Description |
|---|---|
|
Period (e.g., 2030, 2035). It must be a positive integer |
|
Scenario. Short-term uncertainties (scenarios) (e.g., s001 to s100, CY2025 to CY2030) |
|
Stage |
|
Load level (e.g., 01-01 00:00:00+01:00 to 12-30 23:00:00+01:00, if it is in datetime format). Load levels with duration 0 are ignored. 8736 load levels must represent the period (year). |
|
Generation units (thermal -nuclear, CCGT, OCGT, coal-, ESS -storage hydro modeled in energy or water, pumped-hydro storage PHS, battery BESS, electric vehicle EV, demand side management DSM, data center flexibility, alkaline water electrolyzer AWE, solar thermal- and VRES -wind onshore and offshore, solar PV, run-of-the-river hydro-) |
|
Generation technologies. The technology order is used in the temporal result plot. |
|
ESS storage type (daily <12 h, weekly <40 h, monthly >60 h). |
|
Nodes. A node belongs to a defined zone. All the nodes must have different names. Nodes can be physical or virtual (e.g., for representing the conventional industrial, commercial, and residential demands, EV demand, and H2 demand). |
|
Zones. A zone belongs to a defined area. All the zones must have different names. |
|
Areas. An area belongs to a defined region. All the areas must have different names. Long-term adequacy, inertia, and operating reserves are associated with areas. |
|
Regions (e.g., Continental South West Europe which includes Spain, France, and Portugal). All the regions must have different names. |
|
Circuits (e.g., ac1, ac2 for AC lines, dc1 for DC lines). All the circuits must have different names. |
|
Line type (AC, DC) |
Assignment of nodes to zones, zones to areas, and areas to regions.
File |
Dictionary |
Description |
|---|---|---|
|
NodeToZone |
Assignment of nodes to zones |
|
ZoneToArea |
Assignment of zones to areas |
|
AreaToRegion |
Assignment of areas to regions |
See the hydropower system section at the end of this page to learn how to define the basin topology (connection among reservoirs and hydropower plants). Some additional dictionaries and data files are needed.
Input files¶
This is the list of the input data files with a brief description of each.
File |
Description |
|---|---|
|
Options for using the openTEPES model |
|
General system parameters |
|
Weight of each period |
|
Short-term uncertainties |
|
Weight of each stage |
|
Minimum adequacy reserve margin for each area and period |
|
Maximum CO2 emissions of the electric system |
|
Emission cost per period and area (optional file) |
|
Minimum RES energy for each area and period |
|
Duration of the load levels |
|
Electricity demand |
|
System inertia by area |
|
Upward operating reserves (including aFRR and mFRR for electricity balancing from ENTSO-E) |
|
Downward operating reserves (including aFRR and mFRR for electricity balancing from ENTSO-E) |
|
Upward operating reserve activation (including aFRR and mFRR for electricity balancing from ENTSO-E) (optional file) |
|
Downward operating reserve activation (including aFRR and mFRR for electricity balancing from ENTSO-E) (optional file) |
|
Upward ramp reserves (optional file) |
|
Downward ramp reserves (optional file) |
|
Generation (electricity and heat) data |
|
Investment cost factor of each candidate unit by installation period (optional) |
|
Variable maximum power generation by load level |
|
Variable minimum power generation by load level |
|
Variable maximum power consumption by load level |
|
Variable minimum power consumption by load level |
|
Variable fuel cost by load level |
|
Variable emission cost by load level |
|
Energy inflows into an ESS by load level |
|
Energy outflows from an ESS for Power-to-X (H2 production, EV mobility, heat production, or water irrigation) by load level |
|
Maximum amount of energy stored in the ESS by load level |
|
Minimum amount of energy stored in the ESS by load level |
|
Maximum amount of energy produced/consumed by the unit by time interval (the amount of energy considered corresponds to the aggregate over the interval defined by EnergyType) |
|
Minimum amount of energy produced/consumed by the unit by time interval (the amount of energy considered corresponds to the aggregate over the interval defined by EnergyType) |
|
Electricity network data |
|
Maximum electric transmission line TTC forward flow by load level (optional file) |
|
Maximum electric transmission line TTC backward flow by load level (optional file) |
|
Node location in latitude and longitude |
Only the columns indicated in this document will be read in any input file. For example, you can add a column for comments or additional information as needed, but the model will not read it.
Options¶
A description of the options included in the file oT_Data_Option.csv follows:
Item |
Description |
|
|---|---|---|
IndBinGenInvest |
Indicator of binary generation expansion decisions |
{0 continuous, 1 binary, 2 ignore investments} |
IndBinGenRetirement |
Indicator of binary generation retirement decisions |
{0 continuous, 1 binary, 2 ignore retirements} |
IndBinRsrInvest |
Indicator of binary reservoir expansion decisions (only used for reservoirs modeled with water units) |
{0 continuous, 1 binary, 2 ignore investments} |
IndBinNetInvest |
Indicator of binary electricity network expansion decisions |
{0 continuous, 1 binary, 2 ignore investments} |
IndBinNetH2Invest |
Indicator of binary hydrogen network expansion decisions |
{0 continuous, 1 binary, 2 ignore investments} |
IndBinNetHeatInvest |
Indicator of binary heat network expansion decisions |
{0 continuous, 1 binary, 2 ignore investments} |
IndBinGenOperat |
Indicator of binary generation operation decisions |
{0 continuous, 1 binary} |
IndBinGenRamps |
Indicator of whether to consider the up/down ramp constraints |
{0 no ramps, 1 ramp constraints} |
IndBinGenMinTime |
Indicator of whether to consider the min up/down time constraints |
{0 no min time constraints, 1 min time constraints} |
IndBinSingleNode |
Indicator of single node case study |
{0 network, 1 single node} |
IndBinLineCommit |
Indicator of binary transmission switching decisions |
{0 continuous, 1 binary} |
IndBinNetLosses |
Indicator of network losses |
{0 lossless, 1 ohmic losses} |
IndACPowerFlow |
Indicator of the AC optimal power flow and its formulation |
{0 DC, 1 branch flow, 2 bus injection W space, 3 bus injection rectangular} |
IndACModelType |
Indicator of how the branch current is written (only used when IndACPowerFlow is 1) |
{0 second-order cone, 1 piecewise linear, 2 exact non-linear} |
IndACRestore |
Indicator of the restoration pass that makes the reported operating point physical |
{0 off, 1 on} |
IndACCycle |
Indicator of the loop condition around each independent cycle (only used when IndACPowerFlow is 2) |
{0 off, 1 on} |
IndACConverter |
Indicator of the HVDC converter model |
{0 none, 1 line-commutated, 2 voltage-source} |
IndACApparentPowerLimit |
Indicator of the apparent power limit at both ends of an AC branch (only used when IndACPowerFlow is 1). See “The thermal limit of an AC branch” below |
{0 current limit only, 1 current and apparent power} |
IndACRestoreWarmStart |
Indicator of the starting point of the AC recovery step (only used when IndACRestore is 1) |
{0 ipopt defaults, 1 close to the relaxed solution} |
IndACConeStart |
Indicator of the starting point of the rectangular model (only used when IndACPowerFlow is 3): the W-space cone of the stage is solved first, its cost is reported as a lower bound and the model starts from its rank-one projection, or from an AC power flow solved from that projection with the cone’s dispatch, so that the power balance holds at the start |
{0 flat profile, 1 the W-space cone, 2 a power flow from the cone} |
IndBinShuntSwitch |
Indicator of the hourly on/off state of a switchable bus shunt |
{0 continuous, 1 binary} |
IndPTDF |
Indicator of the flow-based market coupling method and where its factors come from |
{0 off, 1 read from the case, 2 computed from the reactances} |
IndCycleFlow |
Indicator of the cycle flow formulation of Kirchhoff’s second law (DC only) |
{0 per branch, 1 per cycle} |
IndCompleteProblem |
Indicator of solving the complete problem or decomposing it in time |
{0 time Benders decomposition, 1 complete} |
IndSectorDecomposition |
Indicator of Benders decomposition by sector |
{0 one problem, 1 by sector} |
IndSequentialSolving |
Indicator of how the stages are solved |
{0 in parallel, 1 sequentially through an LP file, 2 sequentially in memory, 3 by sensitivity analysis} |
The last four options say how the problem is solved rather than what is modelled. They were fixed in the code until version 4.18.18 and could not be selected from a case; the defaults above are the values that were in force then, so a case that says nothing behaves as it always did.
All the indicators belong in oT_Data_Option. oT_Data_Parameter holds the numeric scalars. An indicator placed in the
parameter file is still honoured, and the run says so, but the next reader of the case will look for it in the option
file and not find it.
If the investment decisions are ignored (IndBinGenInvest, IndBinGenRetirement, and IndBinNetInvest take value 2) or there are none, all the scenarios with a probability >0 are solved sequentially (assuming a probability of 1), and the periods are given a weight of 1.
If you select the single node option (IndBinSingleNode takes value 1), the line capacity constraints are relaxed (i.e., flows can exceed these capacities), but line flows are obtained and presented in the result files. The line losses are considered 0.
Parameters¶
A description of the system parameters included in the file oT_Data_Parameter.csv follows:
Item |
Description |
|
|---|---|---|
ENSCost |
Cost of energy not served (ENS). Cost of load curtailment. Value of Lost Load (VoLL) |
€/MWh |
HNSCost |
Cost of hydrogen not served (HNS) |
€/kgH2 |
H2ExcCost |
Cost of hydrogen in excess of the balance. Optional; absent, it is half of HNSCost. Like HNSCost this is a penalty on a slack variable, not a disposal or export price, so the default is far above the cost of producing the hydrogen |
€/kgH2 |
HTNSCost |
Cost of heat not served (HTNS) |
€/MWh |
CO2Cost |
Cost of CO2 emissions |
€/tCO2 |
UpReserveActivation |
Upward reserve activation (proportion of upward operating reserve deployed to produce energy, e.g., 0.15) |
p.u. |
DwReserveActivation |
Downward reserve activation (proportion of downward operating reserve deployed to produce energy, e.g., 0.10) |
p.u. |
MinRatioDwUp |
Minimum ratio downward to upward operating reserves |
p.u. |
MaxRatioDwUp |
Maximum ratio downward to upward operating reserves |
p.u. |
Sbase |
Base power used in the DCPF |
MW |
ReferenceNode |
Reference node used in the DCPF |
|
TimeStep |
Number of time steps grouped together. If the duration is 1 h and the time step is 2, two consecutive hours are grouped into one load level for the optimization problem. If the duration is 0.25 h and the time step is 4, the load level represents one hour. |
|
EconomicBaseYear |
Base year for economic parameters affected by the discount rate |
year |
AnnualDiscountRate |
Annual discount rate |
p.u. |
VMin, VNom, VMax |
Minimum, nominal and maximum voltage magnitude of a node. Used only when IndACPowerFlow is different from 0 |
p.u. |
CapacitivePF |
Capacitive power factor limit of a generator, i.e. the most reactive power it may supply relative to its active output. Used only when IndACPowerFlow is different from 0 |
p.u. |
InductivePF |
Inductive power factor limit of a generator, i.e. the most reactive power it may absorb relative to its active output. Used only when IndACPowerFlow is different from 0 |
p.u. |
ConverterPF |
Power factor of an HVDC converter station. Used only when IndACConverter is different from 0 |
p.u. |
ConverterNoLoadLoss |
No-load loss of one HVDC converter station, as a fraction of the link rating. Paid at each terminal while the link is in service. Used only when IndACConverter is different from 0. A modern station is about 0.001 |
p.u. |
ConverterMarginalLoss |
Marginal loss of one HVDC converter station, as a fraction of the power it carries. Paid at each terminal, either direction. Used only when IndACConverter is different from 0. A voltage-source station is about 0.010, a line-commutated one about 0.007 |
p.u. |
EpsilonCurrent |
Price on the AC branch current. See “The price on the branch current” below. Used only when IndACPowerFlow is 1 |
p.u. |
VoltageDeviationCost |
Penalty on the deviation of a bus voltage from its setpoint, VSet in oT_Data_BusVoltage. See “The penalty on the voltage setpoint deviation” below. Zero, the default, adds no penalty. Used only when IndACPowerFlow is different from 0 |
EUR/p.u./h |
A time step greater than one hour is a convenient way to reduce the number of load levels in the time scope. The moving average of the demand, upward/downward operating reserves, variable generation/consumption/storage, and ESS energy inflows/outflows over the time step load levels is assigned to active load levels (e.g., the mean value of the three hours is associated with the third hour in a tri-hourly time step).
Generators can provide upward and downward operating reserves simultaneously. The upward and downward activation proportions define the amount of upward and downward operating reserves that will be deployed to produce energy. If a unit provides both upward and downward operating reserves, the activation of both may cancel out the energy produced.
Period¶
A description of the data included in the file oT_Data_Period.csv follows:
Identifier |
Header |
Description |
|---|---|---|
Period |
Weight |
Weight of each period |
This weight allows the definition of equivalent (representative) years (e.g., year 2030 with a weight of 5 would represent years 2030-2034). Periods are not mathematically connected to each other by operation constraints, i.e., no constraints link the operation at different periods. However, they are linked by the investment decisions, i.e., investments made in a year remain installed for the rest of the years.
Scenario¶
A description of the data included in the file oT_Data_Scenario.csv follows:
Identifiers |
Header |
Description |
||
|---|---|---|---|---|
Period |
Scenario |
Probability |
Probability of each scenario in each period |
p.u. |
For example, the scenarios can be used to obtain the IRP (GEP+SEP+TEP) considering the uncertainty of hydro energy/water inflows, represented using three scenarios (wet, dry, and average), or two VRES scenarios (windy/cloudy and calm/sunny). The sum of the probabilities of all the scenarios in each period must be 1.
Stage¶
A description of the data included in the file oT_Data_Stage.csv follows:
Identifier |
Header |
Description |
|---|---|---|
Stage |
Weight |
Weight of each stage |
This weight defines equivalent (representative) periods (e.g., one representative week with a weight of 52 or four representative weeks, each with a weight of 13). Stages are not mathematically connected, i.e., no constraints link the operation at different consecutive stages. Therefore, the storage type cannot exceed the duration of the stage (i.e., if the stage lasts for 168 hours, the storage type can only be hourly or daily). If there are no investment decisions or the investment decisions are ignored, all the periods, scenarios, and stages are solved independently.
Adequacy reserve margin¶
The adequacy reserve margin is the ratio between the available capacity and the maximum demand. According to ENTSO-E, adequacy is defined as the ability of the
electric system to supply the aggregate electrical demand and energy requirements of the customers at all times, taking into account scheduled and reasonably
expected unscheduled outages of system elements. To determine the available capacity, the model uses the availability of the generating units times their
maximum power. The availability can be computed as the ratio between the firm and installed capacity. Firm capacity can be determined as the Firm Capacity
Equivalent (FCE) or the Effective Load-Carrying Capability (ELCC). A description of the data included in the file oT_Data_ReserveMargin.csv follows:
Identifiers |
Header |
Description |
||
|---|---|---|---|---|
Period |
Area |
ReserveMargin |
Minimum adequacy reserve margin for each period and area |
p.u. |
This parameter is only used for system generation expansion, not for system operation. If no value is provided for an area, the reserve margin is considered 0.
Maximum CO2 emissions¶
A description of the data included in the file oT_Data_Emission.csv follows:
Identifiers |
Header |
Description |
||
|---|---|---|---|---|
Period |
Area |
CO2Emission |
Maximum CO2 emissions of the electric system for each period and area |
MtCO2 |
If no value is provided for an area, the CO2 emission limit is considered infinite.
CO2 emission costs (optional file)¶
A description of the data included in the file oT_Data_EmissionCost.csv follows:
Identifiers |
Header |
Description |
||
|---|---|---|---|---|
Period |
Area |
CO2Cost |
CO2 emission cost of the electric system for each period and area |
€/tCO2 |
If no value or zero value is provided for a period or area, the CO2 emission cost takes the CO2Cost value of the file oT_Data_Parameter.csv.
Minimum RES energy¶
It is like a Renewable Portfolio Standard (RPS). A description of the data included in the file oT_Data_RESEnergy.csv follows:
Identifiers |
Header |
Description |
||
|---|---|---|---|---|
Period |
Area |
RESEnergy |
Minimum RES energy for each period and area |
GWh |
If no value is provided for an area, the RES energy limit is considered 0.
Duration¶
A description of the data included in the file oT_Data_Duration.csv follows:
Identifiers |
Header |
Description |
|||
|---|---|---|---|---|---|
Period |
Scenario |
LoadLevel |
Duration |
Duration of the load level. Load levels with duration 0 are ignored. For an hour, the duration must be 1. For a quarter of an hour, the duration must be 0.25 |
h |
… |
… |
… |
Stage |
Assignment of the load level to a stage |
|
It is a simple way to use isolated snapshots, representative days, or just the first three months instead of all the hours of a year to simplify the optimization problem. All the load levels whose duration is different from 0 must have the same duration. The duration is not intended to change for the load levels of a stage. Usually, the duration is 1 hour (0.25 h if inputting data in quarters of an hour) or 0 if you do not want to use the load levels for some hours of the year. The parameter time step must be used to collapse consecutive load levels into one for the optimization problem.
The stage duration, as the sum of the duration of all the load levels, must be larger than or equal to the shortest duration of any storage type, any outflow type, or any energy type (all given in the generation data), and a multiple of it. Consecutive stages are not connected, i.e., no constraints link the operation at different stages. Consequently, the storage type cannot exceed the duration of the stage (i.e., if the stage lasts for 168 hours, the storage type can only be hourly or daily). Therefore, the objective function value with several stages will be slightly higher than in the case of a single stage.
The initial storage of the ESSs is also fixed at the beginning and end of each stage. For example, the initial storage level is set for hour 8736 in the case of a single stage or for hours 4368 and 4369 (end of the first stage and beginning of the second stage) in the case of two stages, each with 4368 hours.
Electricity demand¶
A description of the data included in the file oT_Data_Demand.csv follows:
Identifiers |
Header |
Description |
|||
|---|---|---|---|---|---|
Period |
Scenario |
LoadLevel |
Node |
Power demand of the node for each load level |
MW |
The electricity demand can be negative for the (transmission) nodes with (renewable) generation at lower voltage levels. This negative demand is equivalent to generating that amount of power at this node. Internally, all the values below 1e-5 times the maximum system demand of each area (or above its negative, for negative demand) will be converted into 0 by the model.
System inertia¶
A description of the data included in the file oT_Data_Inertia.csv follows:
Identifiers |
Header |
Description |
|||
|---|---|---|---|---|---|
Period |
Scenario |
LoadLevel |
Area |
System inertia of the area for each load level |
s |
Given that the system inertia depends on the area, defining an area as a country can be sensible. The system inertia can impose a minimum synchronous power and, consequently, force the commitment of at least some rotating units. Each generating unit can contribute to the system inertia. The system inertia is the sum of the inertia of all the committed units in the area. Given that the system inertia is a function of the committed units, it is necessary to define binary commitment decisions for the generating units. Review that the indicator IndBinGenOperat = 1 and the column BinaryCommitment = Yes in the generating units that contribute to the system inertia.
Internally, all the values below 1e-5 times the maximum system electricity demand of each area will be converted into 0 by the model.
Upward and downward operating reserves¶
A description of the data included in the files oT_Data_OperatingReserveUp.csv and oT_Data_OperatingReserveDown.csv follows:
Identifiers |
Header |
Description |
|||
|---|---|---|---|---|---|
Period |
Scenario |
LoadLevel |
Area |
Upward/downward operating reserves of the area for each load level |
MW |
Given that the operating reserves depend on the area, defining an area as a country can be sensible. These operating reserves must include Automatic Frequency Restoration Reserves (aFRR) (a.k.a. secondary reserve, deployed <5 min) and Manual Frequency Restoration Reserves (mFRR) (a.k.a. tertiary reserve, deployed <12.5 min) for electricity balancing from ENTSO-E.
Internally, all the values below 1e-5 times the maximum system demand of each area will be converted into 0 by the model.
Upward and downward operating reserve activation (optional files)¶
A description of the data included in the files oT_Data_OperatingReserveUpEnergy.csv and oT_Data_OperatingReserveDownEnergy.csv follows:
Identifiers |
Header |
Description |
|||
|---|---|---|---|---|---|
Period |
Scenario |
LoadLevel |
Area |
Upward/downward operating reserve activation of the area for each load level |
MW |
Given that the operating reserves depend on the area, defining an area as a country can be sensible. These operating reserves must include the activation of the Automatic Frequency Restoration Reserves (aFRR) (a.k.a. secondary reserve, deployed <5 min) and Manual Frequency Restoration Reserves (mFRR) (a.k.a. tertiary reserve, deployed <12.5 min) for electricity balancing from ENTSO-E.
The values of the upward/downward operating reserve activation must be lower than or equal to the upward/downward operating reserve requirement; otherwise, the model lowers them. All the values below 1e-5 times the maximum system demand of each area are converted into 0 by the model.
These files are optional. If not given, the upward and downward operating reserve activation constraints are not formulated. If given, then the parameters UpReserveActivation and DwReserveActivation are not used, and the values of the upward/downward operating reserve activation are directly read from these files.
Upward and downward ramp reserves (optional files)¶
A description of the data included in the files oT_Data_RampReserveUp.csv and oT_Data_RampReserveDown.csv follows:
Identifiers |
Header |
Description |
|||
|---|---|---|---|---|---|
Period |
Scenario |
LoadLevel |
Area |
Upward/downward ramp reserves of the area for each load level |
MW/h |
The ramp reserves are typically associated with a specific additional proportion of the net demand ramp. Ramp reserves protect the system against uncertainty in the VRES production. These files are optional. If not given, the ramp reserve constraints are not formulated.
Generation¶
A description of the data included for each (electricity and heat) generating unit in the file oT_Data_Generation.csv follows:
Header |
Description |
|
|---|---|---|
Generator |
Name of the generator. Each generator must have a unique name. |
|
Node |
Name of the node where the generator is located. If left empty or assigned to a non-existing node, the generator is ignored |
|
Technology |
Technology of the generator (nuclear, coal, CCGT, OCGT, ESS, solar, wind, biomass, etc.) |
|
MutuallyExclusive |
List of mutually exclusive sets to which the generator belongs. Only one generator per set can be committed simultaneously. It is computationally demanding. |
|
BinaryCommitment |
Binary unit commitment decision |
Yes/No |
NoOperatingReserve |
No contribution to operating reserve. Yes, if the unit does not contribute to the operating reserve |
Yes/No |
OutflowsIncompatibility |
Outflows are incompatible with the charging process (e.g., electric vehicle). This is not the case for an electrolyzer |
Yes/No |
StorageType |
Represents the time period (hour, day, week, month, year) over which the requirement that aggregate electricity production must equal aggregate consumption is enforced. If empty, Hourly by default. The state of charge is recorded one period more frequently than the declared type: Weekly is recorded daily, Monthly weekly, and Yearly monthly. The recording interval must not exceed the stage duration, which requires stages of at least 24 h, 168 h and 672 h respectively. Declarations exceeding this limit are rejected, as a cycle that cannot complete within a stage yields an empty constraint set, relaxing the problem and understating system cost |
Hourly/Daily/Weekly/Monthly/Yearly |
OutflowsType |
Represents the time period (hour, day, week, month, year) over which the specified amount of energy must be consumed/withdrawn from the storage unit. If empty, Hourly by default As for StorageType, the period must not exceed the stage duration, though it is taken at face value here rather than one period shorter: stages of at least 168 h, 672 h and 8736 h are required for Weekly, Monthly and Yearly respectively. |
Hourly/Daily/Weekly/Monthly/Yearly |
EnergyType |
Represents the time period (hour, day, week, month, year) over which the specified max/min amount of energy is to be produced by the unit. If empty, Hourly by default As for StorageType, the period must not exceed the stage duration, though it is taken at face value here rather than one period shorter: stages of at least 168 h, 672 h and 8736 h are required for Weekly, Monthly and Yearly respectively. |
Hourly/Daily/Weekly/Monthly/Yearly |
EnergyNeutrality |
Requires the unit to exchange no net electricity with the system over its EnergyType period, after round-trip losses, so that it shifts energy within each period without displacing energy between them. Delivering E takes E/Efficiency from the system, so the requirement is met when output equals Efficiency times consumption. If empty, not required |
Yes/No |
MustRun |
Must-run unit |
Yes/No |
InitialPeriod |
Initial period (year) when the unit is installed or can be installed, if it is a candidate |
Year |
FinalPeriod |
Final period (year) when the unit is installed or can be installed, if it is a candidate |
Year |
MaximumPower |
Maximum power output of electricity (generation/discharge for ESS units) |
MW |
MinimumPower |
Minimum power output of electricity (i.e., minimum stable load in the case of a thermal power plant) |
MW |
MaximumPowerHeat |
Maximum heat output (heat produced by a CHP, at its maximum electric power, or by a fuel heater, which does not produce electric power) |
MW |
MinimumPowerHeat |
Minimum heat output (heat produced by a CHP, at its minimum electric power, or by a fuel heater, which does not produce electric power) |
MW |
MaximumReactivePower |
Maximum reactive power output (discharge for ESS units) (not used in this version) |
MW |
MinimumReactivePower |
Minimum reactive power output (not used in this version) |
MW |
MaximumCharge |
Maximum consumption/charge level when the ESS unit is storing energy |
MW |
MinimumCharge |
Minimum consumption/charge level when the ESS unit is storing energy |
MW |
InitialStorage |
Initial amount of energy stored at the first instant of the time scope |
GWh |
MaximumStorage |
Maximum amount of energy that can be stored by the ESS unit |
GWh |
MinimumStorage |
Minimum amount of energy that can be stored by the ESS unit |
GWh |
Efficiency |
Round-trip efficiency of the pump/turbine cycle of a pumped-hydro storage power plant or charge/discharge of a battery |
p.u. |
ProductionFunctionHydro |
Production function from water inflows (denominator) to electricity (numerator) (only used for hydropower plants modeled with water units and basin topology) |
kWh/m3 |
ProductionFunctionH2 |
Production function from electricity (numerator) to hydrogen (denominator) (only used for electrolyzers) |
kWh/kgH2 |
ProductionFunctionHeat |
Production function from electricity (numerator) to heat (denominator) (only used for heat pumps or electric boilers) |
kWh/kWh |
ProductionFunctionH2ToHeat |
Production function from hydrogen (numerator) to heat (denominator) (only used for hydrogen heater, which produces heat by burning hydrogen) |
kgH2/kWh |
ProductionFunctionH2ToPower |
Production function from hydrogen (numerator) to power (denominator) (only used for a hydrogen-fired generator, which produces electricity by burning hydrogen) Note the unit: unlike ProductionFunctionH2ToHeat, which is read in kgH2/kWh, this one is read in grams and is not rescaled |
gH2/kWh |
MaximumProductionH2 |
Maximum hydrogen produced without consuming electricity, by a reformer or an import terminal. A unit with this >0 forms the hydrogen source set |
tH2/h |
ProductionCostH2 |
Cost of that hydrogen, carrying fuel, variable O&M and the carbon price together Note the unit: unlike HNSCost and H2ExcCost, which are read in €/kgH2, this one is read in M€/tH2 and is not rescaled |
M€/tH2 |
ProductionEmissionH2 |
CO2 released per tonne of that hydrogen. Reported only: it is not charged in the objective and enters no emission limit |
tCO2/tH2 |
MaximumStorageH2 |
Maximum hydrogen a store can hold, e.g. a salt cavern. A unit with this >0 forms the hydrogen storage set |
tH2 |
MaximumChargeH2 |
Maximum rate at which that store can be filled |
tH2/h |
InitialStorageH2 |
Hydrogen held at the first load level. The store returns to this level at the end of the horizon |
tH2 |
StorageTypeH2 |
Storage cycle of the hydrogen store: hourly, daily, weekly, monthly or yearly |
|
Availability |
Unit availability for area adequacy reserve margin (also called de-rating factor or capacity credit (CC) or Firm Capacity Equivalent (FCE) or Effective Load-Carrying Capability (ELCC)) |
p.u. |
Inertia |
Unit inertia constant |
s |
EFOR |
Equivalent Forced Outage Rate (probability that a generating unit will be unavailable due to forced outages during a given period) |
p.u. |
RampUp |
Maximum rate of increasing its output for generating units, or maximum rate of increasing its discharge rate or decreasing its charge rate for ESS units. If left empty, no ramp up constraint is formulated for the generator. |
MW/h |
RampDown |
Maximum rate of decreasing its output for generating units, or maximum rate of increasing its charge rate or decreasing its discharge rate for ESS units. If left empty, no ramp down constraint is formulated for the generator. |
MW/h |
UpTime |
Minimum uptime |
h |
DownTime |
Minimum downtime |
h |
StableTime |
Minimum stable time (intended for nuclear units to be at their minimum load, if lower than the rated capacity, during this time). Power variations (ramp up/ramp down) below 1% are not considered for activating the minimum stable time |
h |
ShiftTime |
Maximum shift time |
h |
FuelCost |
Fuel cost |
€/GJ |
LinearTerm |
Linear term (slope) of the heat rate straight line |
GJ/MWh |
ConstantTerm |
Constant term (intercept) of the heat rate straight line |
GJ/h |
OMVariableCost |
Variable O&M cost |
€/MWh |
OperReserveCost |
Operating reserve cost |
€/MW |
StartUpCost |
Startup cost |
M€ |
ShutDownCost |
Shutdown cost |
M€ |
CO2EmissionRate |
CO2 emission rate. It can be negative for units absorbing CO2 emissions, such as biomass |
tCO2/MWh |
OMFixedCost |
Fixed O&M -FOM- cost (optional column, if not introduced it is considered 0). It will be added to the annualized capital investment cost and subtracted from the annualized retirement cost |
M€/GW*yr |
FixedInvestmentCost |
Overnight investment (capital -CAPEX- and fixed O&M -FOM-) cost. FOM cost can be included here or in the OMFixedCost column |
M€ |
FixedRetirementCost |
Overnight retirement (capital -CAPEX- and fixed O&M -FOM-) cost |
M€ |
FixedChargeRate |
Fixed-charge rate to annualize the overnight investment cost. Proportion of annual payment to return the overnight investment cost |
p.u. |
StorageInvestment |
Storage capacity and energy inflows are proportional to the investment decision. For example, in a battery with 4 h duration, the storage capacity will be proportional to the power invested. In a candidate reservoir, the size is usually predetermined and cannot be made proportional to the investment decision. |
Yes/No |
BinaryInvestment |
Binary unit investment decision |
Yes/No |
InvestmentLo |
Lower bound of investment decision |
p.u. |
InvestmentUp |
Upper bound of investment decision |
p.u. |
BinaryRetirement |
Binary unit retirement decision |
Yes/No |
RetirementLo |
Lower bound of retirement decision |
p.u. |
RetirementUp |
Upper bound of retirement decision |
p.u. |
The main characteristics that define each type of generator are the following:
Generator type |
Description |
Set name |
|---|---|---|
Any generator |
It has MaximumPower or MaximumCharge or MaximumPowerHeat >0 |
g |
Thermal |
Fuel-based variable cost (fuel cost x linear term + CO2 emission cost) >0 |
t |
VRE |
Fuel-based variable cost (fuel cost x linear term + CO2 emission cost) =0 and MaximumStorage =0. It may have OMVariableCost >0 |
re |
Non-renewable |
All the generators except the RES |
nr |
ESS |
It has MaximumCharge or MaximumStorage >0 or ProductionFunctionH2 or ProductionFunctionHeat >0 and ProductionFunctionHydro =0 |
es |
Hydro power plant (energy) |
ESS with ProductionFunctionHydro =0 |
es |
Pumped-hydro storage (energy) |
ESS with MaximumCharge >0 and MaximumStorage >0 |
es |
Battery (BESS), load shifting (DSM) |
ESS with MaximumCharge >0 and MaximumStorage >0 (usually, StorageType daily) |
es |
Data center flexibility |
ESS with MaximumCharge >0 and MaximumStorage >0 (usually, StorageType daily) |
es |
Electric vehicle (EV) |
ESS with electric energy outflows |
es |
Electrolyzer (ELZ) |
ESS with electric energy outflows and ProductionFunctionH2 >0 and ProductionFunctionHeat =0 and ProductionFunctionHydro =0 |
el |
Hydrogen-fired generator (H2P) |
It has ProductionFunctionH2ToPower >0 |
h2p |
Hydrogen storage |
It has MaximumStorageH2 >0. Scoped to any unit, not only generators |
hs |
Hydrogen source |
It has MaximumProductionH2 >0. Scoped to any unit, not only generators |
sr |
Heat pump or electric boiler |
ESS with ProductionFunctionHeat >0 and ProductionFunctionH2 =0 and ProductionFunctionHydro =0 |
hp |
CHP or fuel heating unit |
It has RatedMaxPowerElec >0 and RatedMaxPowerHeat >0 and ProductionFunctionHeat =0 |
ch |
Fuel heating unit, fuel boiler |
It has RatedMaxPowerElec =0 and RatedMaxPowerHeat >0 and ProductionFunctionHeat =0 |
bo |
Hydrogen heating unit |
Fuel heating unit with ProductionFunctionH2ToHeat >0 |
hh |
Hydro power plant (water) |
It has ProductionFunctionHydro >0 |
h |
Reservoir (water) |
It has water volume |
rs |
The model always considers a month of 672 hours, i.e., 4 weeks, not calendar months. The model assumes a year of 8736 hours, i.e., 52 weeks, not calendar years.
Daily storage type means the ESS inventory is assessed at every step. Daily storage type is assessed at the end of every hour, weekly storage type is assessed at the end of every day, monthly storage type is assessed at the end of every week, and the yearly storage type is evaluated at the end of every month. Outflows type represents when the energy extracted from the storage must be satisfied (for daily outflows type at the end of every day, i.e., the sum of the energy consumed must be equal to the sum of outflows daily). The contribution of EVs and electrolyzers to the system flexibility can be analyzed by changing the outflows type (from hourly to daily or weekly or monthly or yearly). Energy type represents when the minimum or maximum energy to be produced by a unit must be satisfied (for daily energy type at the end of every day, i.e., the sum of the energy generated by the unit must be lower/greater than the sum of max/min energy for every day). The storage cycle is the minimum between the inventory assessment period (defined by the storage type), the outflows period (defined by the outflows type), and the energy period (determined by the energy type) (only if outflows or energy power values have been introduced). It can be one time step, day, week, or month, but it cannot exceed the stage duration. For example, if the stage lasts 168 hours, the storage cycle can only be hourly or daily.
The initial storage of the ESSs is also fixed at the beginning and end of each stage, only if the initial inventory lies between the storage limits. For example, the initial storage level is set for hour 8736 in the case of a single stage or for hours 4368 and 4369 (end of the first stage and beginning of the second stage) in the case of two stages, each with 4368 hours.
A generator with operation cost (sum of the fuel and emission cost, excluding O&M cost) >0 is considered a non-renewable unit. If the unit has no operation cost and its maximum storage =0, it is considered a renewable unit. If its maximum storage is >0, with or without operation cost, it is regarded as an ESS.
A very small variable O&M cost for the ESS (not below 0.01 €/MWh; otherwise the model converts it to 0) can prevent it from pumping with avoided curtailment (at no cost) and then discharging as spillage.
The startup cost of a generating unit refers to the expenses incurred when bringing a power generation unit online, from an idle state to a point where it can produce electricity.
Must-run non-renewable units are always committed, i.e., their commitment decision equals 1. All must-run units are forced to produce at least their minimum output.
EFOR is used to reduce the maximum and minimum power of the unit. For hydropower plants, it can be used to reduce their maximum power by the water head effect. It does not reduce the maximum charge.
Those generators or ESS with fixed cost >0 are considered candidates and can be installed. The fixed cost is the product of the overnight investment cost (FixedInvestmentCost) and the fixed charge rate (FixedChargeRate).
Maximum, minimum, and initial storage values are considered proportional to the invested capacity for the candidate ESS units if StorageInvestment is activated (Yes). This can be used for battery investment decisions where the investment can be continuous (StorageInvestment=Yes). For a particular hydro storage investment, the dam investment is linked to this particular hydro and cannot be made proportional (StorageInvestment=No).
A generator can belong to several mutually exclusive sets; their names must be separated by “|” when entered. For example, if Generator1 belongs to Set1 and Set2, the data entry should be “Set1|Set2”. If any of the generators in a group are installation/retirement candidates, it is assumed that exclusivity is yearly, so only one can be committed during the whole period. When all mutually exclusive generators in a set are installed and functioning, it is assumed that the exclusivity is hourly, and which generator is committed can change at every load level.
A generator can be restricted to providing reserves only while generating or only while consuming. The NoOperatingReserve entry accepts two inputs separated by a “|”. The first value corresponds to operating reserves while generating, and the second is operating reserves while consuming power. If only one value is entered, both values are considered the same. If no value is entered, both values are considered “No”.
If the lower and upper bounds of investment/retirement decisions are very close (with a difference <1e-4) to 0 or 1, they are converted into 0 and 1. To forbid
investment or retirement on a candidate, set the corresponding upper bound (InvestmentUp or RetirementUp) to 1e-5: it falls below the snap threshold and
is internally converted to 0. A blank cell or 0 in these columns is interpreted as “no upper bound” (full p.u. allowed) and lets the candidate be freely
chosen by the optimization.
A hydrogen source, a reformer or an import terminal, is a unit with MaximumProductionH2 above zero. It makes hydrogen at ProductionCostH2 without drawing electricity, so the earlier workaround of an isolated electricity network feeding an electrolyzer is no longer needed.
The hydrogen subsystem is summarised below. A turbine and a boiler burn hydrogen, and they are charged for it in the hydrogen balance alone, so either one switches the carrier on by itself.
A summary of the main characteristics of the different types of hydro and ESS is shown in the following figure:
Generation investment cost factor (optional file)¶
A description of the data included in the file oT_Data_GenerationInvestmentFactor.csv follows:
Identifiers |
Header |
Description |
||
|---|---|---|---|---|
Period |
Generator |
Factor |
Factor on the investment cost of capacity installed in the period |
p.u. |
It multiplies the annualized investment cost of a candidate unit, e.g., to represent learning rates. The capacity installed in a period keeps the factor of that period in all later periods. If no value is provided, the factor is 1.
Variable maximum and minimum generation¶
A description of the data included in the files oT_Data_VariableMaxGeneration.csv and oT_Data_VariableMinGeneration.csv follows:
Identifiers |
Header |
Description |
|||
|---|---|---|---|---|---|
Period |
Scenario |
LoadLevel |
Generator |
Maximum (minimum) power generation of the unit by load level |
MW |
Not all the generators need to be defined as columns of these files, only those with values different from 0.
This information can be used to consider scheduled outages or weather-dependent operating capacity.
To force a generator to produce 0, a small value (e.g., 0.1 MW) strictly >0, but not 0 (in which case the value will be ignored), must be entered. This is needed to limit the solar production at night, for example. It can also be used for upper-bounding and/or lower-bounding the output of any generator (e.g., run-of-the-river hydro, wind). If the user enters a minimum generation value greater than the maximum, the model lowers it to match the maximum.
If a thermal unit has a variable minimum generation > 0 in a certain load level, it is considered committed in that load level.
Internally, all the values below 1e-5 times the maximum system demand of each area will be converted into 0 by the model.
Variable maximum and minimum consumption¶
A description of the data included in the files oT_Data_VariableMaxConsumption.csv and oT_Data_VariableMinConsumption.csv follows:
Identifiers |
Header |
Description |
|||
|---|---|---|---|---|---|
Period |
Scenario |
LoadLevel |
Generator |
Maximum (minimum) power consumption of the unit by load level |
MW |
Not all the generators need to be defined as columns of these files, only those with values different from 0.
To force an ESS to consume 0, a value (e.g., 0.1 MW) strictly >0, but not 0 (in which case the value will be ignored), must be entered. It can also be used for upper-bounding and/or lower-bounding the consumption of any ESS (e.g., pumped-hydro storage, battery, DSM). If the user enters a maximum consumption value lower than the minimum, the model lowers the minimum to match the maximum.
Internally, all the values below 1e-5 times the maximum system demand of each area will be converted into 0 by the model.
Variable fuel cost¶
A description of the data included in the file oT_Data_VariableFuelCost.csv follows:
Identifiers |
Header |
Description |
|||
|---|---|---|---|---|---|
Period |
Scenario |
LoadLevel |
Generator |
Variable fuel cost |
€/GJ |
Not all the generators need to be defined as columns of this file, only those with values different from 0.
Internally, all the values below 1e-4 will be converted into 0 by the model.
Fuel cost affects the linear and constant terms of the heat rate, expressed in GJ/MWh and GJ/h, respectively.
Variable emission cost¶
A description of the data included in the file oT_Data_VariableEmissionCost.csv follows:
Identifiers |
Header |
Description |
|||
|---|---|---|---|---|---|
Period |
Scenario |
LoadLevel |
Generator |
Variable emission cost |
€/tCO2 |
Not all the generators need to be defined as columns of this file, only those with values different from 0. Values 0 or empty cells are replaced by CO2 cost
of the file oT_Data_Parameter.csv or by the values of the file oT_Data_EmissionCost.csv.
Internally, all the values below 1e-4 will be converted into 0 by the model.
Energy inflows¶
A description of the data included in the file oT_Data_EnergyInflows.csv follows:
Identifiers |
Header |
Description |
|||
|---|---|---|---|---|---|
Period |
Scenario |
LoadLevel |
Generator |
Energy inflows by load level |
MWh/h |
Not all the generators need to be defined as columns of this file, only those with values different from 0.
If you have daily energy inflow data, just input the daily amount during the first hour of every day if the ESS has daily or weekly storage capacity.
Internally, all the values below 1e-5 times the maximum system demand of each area will be converted into 0 by the model.
Energy inflows are considered proportional to the invested capacity for the candidate ESS units if StorageInvestment is activated.
Energy outflows¶
A description of the data included in the file oT_Data_EnergyOutflows.csv follows:
Identifiers |
Header |
Description |
|||
|---|---|---|---|---|---|
Period |
Scenario |
LoadLevel |
Generator |
Energy outflows by load level |
MWh/h |
Not all the generators need to be defined as columns of this file, only those with values different from 0.
These energy outflows can represent the electric energy extracted from an ESS to produce H2 from electrolyzers, move EVs, or produce heat, or the hydro outflows for irrigation. Using these outflows is incompatible with the charge of the ESS within the same time step (as the discharge of a battery is incompatible with the charge in the same hour).
If you have hourly/daily/weekly/monthly/yearly outflow data, you can just input the daily/weekly/monthly/yearly amount at the first hour of every day/week/month/year.
Internally, all the values below 1e-5 times the maximum system demand of each area will be converted into 0 by the model.
Variable maximum and minimum storage¶
A description of the data included in the files oT_Data_VariableMaxStorage.csv and oT_Data_VariableMinStorage.csv follows:
Identifiers |
Header |
Description |
|||
|---|---|---|---|---|---|
Period |
Scenario |
LoadLevel |
Generator |
Maximum (minimum) storage of the ESS by load level |
GWh |
Not all the generators need to be defined as columns of these files, only those with values different from 0.
It can also be used for upper-bounding and/or lower-bounding the storage of any generator (e.g., storage hydro). If the user enters a maximum storage value lower than the minimum, the model lowers the minimum to match the maximum.
For example, these data can define the operating guide (rule) curves for the ESS.
Variable maximum and minimum energy¶
A description of the data included in the files oT_Data_VariableMaxEnergy.csv and oT_Data_VariableMinEnergy.csv follows:
Identifiers |
Header |
Description |
|||
|---|---|---|---|---|---|
Period |
Scenario |
LoadLevel |
Generator |
Maximum (minimum) power of the unit by load level |
MW |
Not all the generators need to be defined as columns of these files, only those with values different from 0.
It can also be used for upper-bounding and/or lower-bounding the energy of any generator (e.g., storage hydro). If the user enters a maximum power value lower than the minimum, the model lowers the minimum to match the maximum.
For example, these data can be used to define the minimum and/or maximum energy to be produced hourly, daily, weekly, monthly, or yearly (depending on the energy type).
Electricity transmission network¶
At least one electric transmission line connecting two nodes must be defined.
A description of the circuit (initial node, final node, circuit) data included in the file oT_Data_Network.csv follows:
Header |
Description |
|
|---|---|---|
InitialNode |
Name of the initial node of the transmission line |
|
FinalNode |
Name of the final node of the transmission line |
|
Circuit |
Name of the circuit (if there are several circuits between two nodes, they must have different names) |
|
LineType |
Line type {AC, DC, Transformer, Converter}. AC lines can be subject to Kirchhoff’s second law. DC lines, transformers, and converters are not subject to Kirchhoff’s second law. |
|
Switching |
The transmission line can switch on/off |
Yes/No |
InitialPeriod |
Initial period (year) when the unit is installed or can be installed, if candidate |
Year |
FinalPeriod |
Final period (year) when the unit is installed or can be installed, if candidate |
Year |
Voltage |
Line voltage (e.g., 400, 220 kV, 220.400 kV if transformer). Used only for plotting purposes |
kV |
Length |
Line length (only used for reporting purposes). If not defined, computed as 1.1 times the geographical distance |
km |
LossFactor |
Transmission losses equal to the line power flow times this factor |
p.u. |
Resistance |
Resistance (not used in this version) |
p.u. |
Reactance |
Reactance. Lines must have a reactance different from 0 to be considered |
p.u. |
Susceptance |
Susceptance (not used in this version) |
p.u. |
AngMax |
Maximum angle difference (not used in this version) |
º |
AngMin |
Minimum angle difference (not used in this version) |
º |
Tap |
Tap changer (not used in this version) |
p.u. |
Converter |
Converter station (not used in this version) |
Yes/No |
TTC |
Total transfer capacity (maximum permissible thermal load) in forward direction. Static line rating |
MW |
TTCBck |
Total transfer capacity (maximum permissible thermal load) in backward direction. Static line rating |
MW |
SecurityFactor |
Security factor to consider approximately N-1 contingencies (e.g., common values are in the range 0.6-0.7). NTC=TTCxSecurityFactor. The security factors cannot all be 0; otherwise, there is no network capacity. |
p.u. |
FixedInvestmentCost |
Overnight investment (capital -CAPEX- and fixed O&M -FOM-) cost |
M€ |
FixedChargeRate |
Fixed-charge rate to annualize the overnight investment cost |
p.u. |
BinaryInvestment |
Binary line/circuit investment decision |
Yes/No |
InvestmentLo |
Lower bound of investment decision |
p.u. |
InvestmentUp |
Upper bound of investment decision |
p.u. |
SwOnTime |
Minimum switch-on time |
h |
SwOffTime |
Minimum switch-off time |
h |
The initial and final nodes are where the transmission line starts and ends, respectively. They must be different.
Depending on the voltage, lines are plotted with different colors (orange < 200 kV, 200 < green < 350 kV, 350 < red < 500 kV, 500 < orange < 700 kV, blue > 700 kV).
If there is no data for TTCBck, i.e., TTCBck is left empty or is equal to 0, the TTC replaces it in the code. Internally, all the TTC and TTCBck values below 1e-5 times the maximum system demand of each area will be converted into 0 by the model.
Reactance can take a negative value due to the approximation of three-winding transformers. No Kirchhoff’s second law disjunctive constraint is formulated for a circuit with negative reactance.
Those lines with fixed cost >0 are considered candidates and can be installed. The fixed cost is the product of the overnight investment cost (FixedInvestmentCost) and the fixed charge rate (FixedChargeRate). The reactance of a candidate line does not change even if the candidate line is partially invested.
If the lower and upper bounds of investment decisions are very close (with a difference <1e-4) to 0 or 1, they are converted into 0 and 1. To forbid investment
on a candidate line, set InvestmentUp to 1e-5: it falls below the snap threshold and is internally converted to 0. A blank cell or 0 in this column is
interpreted as “no upper bound” (full p.u. allowed) and lets the candidate be freely chosen by the optimization.
Running an AC optimal power flow¶
The AC model is off by default. To switch it on, set IndACPowerFlow in oT_Data_Option.csv and give the case the two
AC-only files described below. Three cases ship ready to run:
case |
what it is |
|---|---|
|
nine nodes, small enough to solve in seconds |
|
RTS-GMLC over the week containing the annual peak |
|
RTS-GMLC over a full year |
from openTEPES.openTEPES import openTEPES_run
openTEPES_run('openTEPES/cases', '9n_AC', 'gurobi', 0, 0)
Any option can be overridden for a single run with --option Key=Value, which is repeatable and accepts a
comma-separated list. One case can then be run under several formulations without copying it:
openTEPES_Main --dir openTEPES/cases --case 9n_AC --option IndACPowerFlow=0 # as DC
openTEPES_Main --dir openTEPES/cases --case 9n_AC --option IndACPowerFlow=1 # branch flow
openTEPES_Main --dir openTEPES/cases --case 9n_AC --option IndACPowerFlow=3 --solver ipopt # rectangular
The bundled 9n and 9n_AC differ by two cells and hold the same 34 MB of data otherwise. Switching the AC model on
this way also brings in the AC-only input files, so an overridden run reads the same tables as a case with the flag set.
IndACPowerFlow = 1 is the branch flow model and solves with a linear-conic solver such as Gurobi. Values 2 and 3 are
the bus-injection models and need a non-linear solver such as ipopt, as does IndACModelType = 2. The run prints the
configuration it resolved to before it solves, so the mode in force is visible without reading the case files.
The results are described under AC network operation; two of them say whether the answer can be trusted, and the note there explains why they are not substitutes for each other.
The price on the branch current¶
The AC branch current enters the model as an inequality, so nothing forces it down to the value the flows imply. A small
price on it does, and EpsilonCurrent in oT_Data_Parameter.csv sets that price.
It has to be given per case. The value that closes the cone depends on the cost scale and the loading of the case, and measured on a tight cone the bundled cases span three orders of magnitude:
case |
SBase |
EpsilonCurrent |
why |
|---|---|---|---|
|
1000 MVA |
1e-3 |
the value that closes its cone |
|
100 MVA |
1e-6 |
keeps the relaxed cost below the exact optimum; 1e-4 closes the cone but raises the cost 0.7% above it, and 1e-3 by 16% |
pglib case118 |
100 MVA |
1e-6 |
closes the cone outright; 1e-3 raises the cost 17% |
RTS-GMLC and case118 share a base and still differ by two orders of magnitude, so the value does not follow from SBase
either. A value too small leaves the relaxation slack; a value too large changes the dispatch and can raise the relaxed
cost above the exact optimum, so it no longer bounds it.
The RTS cases use 1e-6: the relaxed cost stays below the exact optimum and the cone is loose on about 0.4% of
branch-hours, which IndACRestore resolves. Closing the cone there instead would take 1e-4 and the bound would be lost.
IndACRestore = 1 re-solves the network at the exact equations after the solve and adds nothing to the objective, so
EpsilonCurrent may be kept small and the restoration pass used for a physical operating point. A case that sets
nothing keeps the previous default.
The price steers the solve and is not part of the reported system cost; it is reported beside it.
The thermal limit of an AC branch¶
Under the branch flow model (IndACPowerFlow = 1), the rating TTC limits the squared branch current to
(TTC / Vmin)^2, where Vmin is the lowest voltage allowed at the sending bus. The apparent power that this limit admits is
TTC * V / Vmin, so above Vmin a branch may carry more than its rating: about 2% at 1.0 p.u. with a lower limit of
0.98 p.u., 5% with 0.95 p.u., and 16% at 1.10 p.u. with 0.95 p.u. The DC model, in contrast, limits the active power to the
rating itself.
IndACApparentPowerLimit = 1 also limits the apparent power at both ends of each branch to the rating,
P^2 + Q^2 <= TTC^2. With the second-order cone and the piecewise-linear current (IndACModelType 0 and 1), the circle is
an inscribed polygon of 24 sides: the constraints are linear, and the model never admits more than the rating and admits up
to 0.9% less between the vertices. The exact non-linear model (IndACModelType = 2) and the AC recovery step
(IndACRestore = 1) use the circle itself. The current limit is kept in all settings, because it also removes the flows of
a branch that is out of service.
The circle was first added to the cone program as a quadratic constraint. On a 695-bus case with fixed generation, Gurobi’s barrier then stopped with numerical trouble on some variants of the case, and scaling the constraint by the rating or turning off presolve aggregation moved the failure to other variants. The polygon solved all of them.
The penalty on the voltage setpoint deviation¶
The voltage limits of a bus, VMin and VMax, are given globally or per bus in oT_Data_BusVoltage.csv. They state where
the voltage may lie, but no term in the objective states where inside the limits it should lie. With a free dispatch, the
generation cost determines the voltages. With fixed generation, as when a known power flow solution is reproduced, all
voltage profiles within the limits have the same cost, and the solver returns one of them. The price on the branch current
(see “The price on the branch current” above) then determines the voltages: a higher voltage carries the same power with a
lower current, so that penalty drives every voltage to its upper limit.
A voltage setpoint gives the objective a target. VSet in oT_Data_BusVoltage.csv gives the setpoint of a bus, and
VoltageDeviationCost in oT_Data_Parameter.csv gives the penalty on the deviation from it, in EUR per p.u. of voltage per
hour. The deviation is taken on the squared voltage that the model uses, and scaled so that near the setpoint it equals
|V - VSet|. All terms are linear, so the relaxation remains a cone program. Like the current penalty, the deviation
penalty affects the solution but is not part of the reported system cost; it is reported beside it as
AC Voltage Penalty (not in total).
The penalty is a soft target, and it competes with the other terms of the objective:
The current penalty. Moving a voltage away from where the current penalty would put it requires reactive power flow, which increases the current. With both penalties positive the result lies between the two: on
9n_ACa bus with a setpoint of 1.02 p.u. reaches 1.006 p.u. on average. WithEpsilonCurrentat zero the setpoint alone determines the voltage.Reactive power slack. The slack should never be used to hold a setpoint. Keep the penalty well below the cost of the reactive power a bus would need: at 1000 EUR/p.u./h a deviation of 0.01 p.u. costs 10 EUR/h, against 10000 EUR for one Mvar of slack at the usual
ENSCost.
On a 695-bus Nordic transmission case with all generator outputs fixed at a reference power flow solution and
EpsilonCurrent at zero, setpoints at 427 regulated buses with a penalty of 1000 EUR/p.u./h reduced the median voltage
difference from the reference solution from 2.45 kV to 0.01 kV, with no reactive power slack. A penalty one hundred times
higher gave the same result.
Reactive power demand (optional file, AC only)¶
The file oT_Data_ReactiveDemand.csv gives the reactive power demand of every node at every load level, in MVAr, with the same
shape as oT_Data_Demand.csv. It is read only when IndACPowerFlow is different from 0.
The model reports the total reactive demand it read at the start of the run, so a case where the file did not arrive is visible before the solve.
Bus shunt devices (optional file, AC only)¶
The file oT_Data_BusShunt.csv describes the reactors and capacitor banks connected to a bus. It is read only when
IndACPowerFlow is different from 0.
File |
Dictionary |
Description |
|---|---|---|
oT_Data_BusShunt |
sh |
Bus shunt devices |
Identifier |
Description |
|---|---|
Shunt |
Name of the device |
Node |
Bus the device is connected to |
Parameter |
Description |
Unit |
|---|---|---|
InitialPeriod |
Initial period when the device is available |
Year |
FinalPeriod |
Final period when the device is available |
Year |
Gshb |
Shunt conductance, per unit on SBase, referred to the nominal voltage of the bus |
p.u. |
Bshb |
Shunt susceptance, per unit on SBase, referred to the nominal voltage of the bus. Positive is a capacitor, which injects reactive power; negative is a reactor, which absorbs it |
p.u. |
FixedInvestmentCost |
Fixed investment cost. A device with a cost is a candidate; one without is existing plant |
MEUR |
FixedChargeRate |
Fixed-charge rate to annualise the investment cost |
p.u. |
BinaryInvestment |
Binary or continuous investment decision for this device |
Yes/No |
InvestmentLo |
Lower bound of the investment decision |
p.u. |
InvestmentUp |
Upper bound of the investment decision |
p.u. |
Switchable |
Whether the device has an on/off state per load level. Without it an existing device is in service every hour of the horizon, so a bank that must be open at light load cannot be represented |
Yes/No |
Units |
Number of identical units the device stands for. With a value above 1 the model chooses how many are in service, so a stepped bank is a count rather than a single on or off |
Integer |
The reactive power a device injects is Bshb * |V|^2 * SBase, so it varies with the voltage: at the upper voltage limit a bank
delivers about 10% more than its nameplate. The rating at nominal voltage in MVAr is Bshb * SBase, with SBase in MVA. A
device of -1.0 p.u. on a 100 MVA base is therefore a 100 MVAr reactor.
Each unit of a bank carries the full susceptance of one unit, not a share of the bank. Units = 4 with Bshb = 0.075 on a
1000 MVA base is four 75 MVAr steps, not four 18.75 MVAr steps.
Bus voltage limits and setpoints (optional file, AC only)¶
The file oT_Data_BusVoltage.csv names a band and a setpoint for individual buses. It is read only when IndACPowerFlow is
different from 0; a bus the file does not name keeps the band derived from VMin and VMax in oT_Data_Parameter.csv.
Identifier |
Description |
|---|---|
Node |
Bus the row applies to |
Parameter |
Description |
Unit |
|---|---|---|
VMin |
Minimum voltage magnitude of the bus. Given with VMax; equal values hold the bus at one voltage |
p.u. |
VMax |
Maximum voltage magnitude of the bus |
p.u. |
VSet |
Voltage setpoint of the bus, with the deviation penalized by |
p.u. |
The band is applied after the bound tightening, so it replaces the band the branches imply. The reference bus is fixed at VNom whatever the file says, and a setpoint on it is not penalized.
Variable electric transmission line TTC forward and backward (optional files)¶
A description of the data included in the files oT_Data_VariableTTCFrw.csv and oT_Data_VariableTTCBck.csv follows:
Identifiers |
Header |
Description |
|||||
|---|---|---|---|---|---|---|---|
Period |
Scenario |
LoadLevel |
Initial node |
Final node |
Circuit |
Maximum TTC forward (backward) of an electric transmission line by load level |
MW |
Not all the electric transmission lines need to be defined as columns of these files, only those with values different from 0.
This information can be used to consider the transmission line’s weather-dependent maximum capacity.
To force the flow of a transmission line to be 0, a small value (e.g., 0.1 MW) strictly >0, but not 0 (in which case the value will be ignored), must be entered. If the user enters a minimum transmission line capacity greater than the maximum, the model lowers the minimum to match the maximum.
If you want to force the flow of a transmission line to be equal to a value, enter the same value (with the opposite sign) in both files (e.g., 125 MW in
oT_Data_VariableTTCFrw.csv and -125 MW in oT_Data_VariableTTCBck.csv) or vice versa.
Internally, all the values below 1e-5 times the maximum system demand of each area will be converted into 0 by the model.
If the variables TTCFrw and TTCBck are both very small (e.g., 0.000001) for any time step, they are set to 0, and the line flow is forced to be 0, i.e., the line is switched off.
Power transfer distribution factors¶
With IndPTDF = 1 the factors are read from oT_Data_VariablePTDF.csv, which carries one column per branch and node and
one row per load level. With IndPTDF = 2 they are computed from the Reactance column of the network file instead, so
they cannot disagree with the network beside them, and no table is needed. Asking to read a table that is not there, or
to compute factors beside a table, is an error rather than a silent choice between them. A case that provides the table
and says nothing about the flag keeps working as before.
The computed factors cover every AC line. DC links are left out: a point-to-point link carries what its converters are told to carry, so it does not obey Kirchhoff’s voltage law and has no place in a susceptance matrix.
IndPTDF = 2 is refused when the case has candidate or switchable AC lines. The factors belong to one topology, and a
decision that changes the topology would leave them stale in a way nothing detects: the flows stay plausible and stop
being right. Candidate generators, candidate storage and candidate DC links are all fine, because none of them enter the
susceptance matrix. A case that does change its AC topology can still use IndPTDF = 1, where the table is indexed by
load level and the user says how the factors move.
Flow-based coupling is a lossless representation. The loss constraints are skipped whenever it is on, so a case that also
asks for IndBinNetLosses gets no losses; the run says so at the start.
Node location¶
At least two different nodes must be defined.
A description of the data included in the file oT_Data_NodeLocation.csv follows:
Identifier |
Header |
Description |
|
|---|---|---|---|
Node |
Latitude |
Node latitude |
º |
Node |
Longitude |
Node longitude |
º |
Hydropower System Input Data¶
These input files are introduced explicitly to allow a representation of the hydropower system based on volume and water inflow data, considering the water stream topology (hydro cascade basins). If they are unavailable, the model runs with an energy-based representation of the hydropower system.
Dictionaries. Sets¶
The dictionaries include all the possible elements of the corresponding sets in the optimization problem. You cannot use non-English characters (e.g., ó, º).
File |
Description |
|---|---|
|
Reservoirs |
The information contained in these input files determines the topology of the hydro basins and how water flows through the different hydropower and pumped-hydro power plants and reservoirs. These relations follow the water downstream direction.
File |
Dictionary |
Description |
|---|---|---|
|
ReservoirToHydro |
Reservoir upstream of hydropower plant (i.e., hydro takes the water from the reservoir) |
|
HydroToReservoir |
Hydropower plant upstream of reservoir (i.e., hydro releases the water to the reservoir) |
|
ReservoirToPumpedHydro |
Reservoir upstream of pumped-hydro power plant (i.e., pumped-hydro pumps from the reservoir) |
|
PumpedHydroToReservoir |
Pumped-hydro power plant upstream of reservoir (i.e., pumped-hydro pumps to the reservoir) |
|
ReservoirToReservoir |
Reservoir upstream of reservoir (i.e., reservoir one spills the water to reservoir two) |
Natural water inflows¶
A description of the data included in the file oT_Data_HydroInflows.csv follows:
Identifiers |
Header |
Description |
|||
|---|---|---|---|---|---|
Period |
Scenario |
LoadLevel |
Reservoir |
Natural water inflows by load level |
m3/s |
All the reservoirs must be defined as columns in this file.
If you have daily natural water inflow data, just input the daily amount during the first hour of every day if the reservoir has daily or weekly storage capacity.
Internally, all the values below 1e-5 times the maximum system demand of each area will be converted into 0 by the model.
Natural water outflows¶
A description of the data included in the file oT_Data_HydroOutflows.csv follows:
Identifiers |
Header |
Description |
|||
|---|---|---|---|---|---|
Period |
Scenario |
LoadLevel |
Reservoir |
Water outflows by load level (e.g., for irrigation) |
m3/s |
All the reservoirs must be defined as columns in this file.
These water outflows can be used to represent the water needed for irrigation.
If you have hourly/daily/weekly/monthly/yearly water outflow data, you can just input the daily/weekly/monthly/yearly amount at the first hour of every day/week/month/year.
Internally, all the values below 1e-5 times the maximum system demand of each area will be converted into 0 by the model.
Reservoir¶
A description of the data included in the file oT_Data_Reservoir.csv follows:
Header |
Description |
|
|---|---|---|
StorageType |
Reservoir storage type based on reservoir storage capacity (hourly, daily, weekly, monthly, yearly). The volume is recorded one period more frequently than the declared type, as for StorageType in the Generation table, so stages of at least 24 h, 168 h and 672 h are required for Weekly, Monthly and Yearly respectively |
Hourly/Daily/Weekly/Monthly/Yearly |
OutflowsType |
Water outflows type based on the water extracted from the reservoir (daily, weekly, monthly, yearly). The period is taken at face value, as for OutflowsType in the Generation table, so stages of at least 168 h, 672 h and 8736 h are required for Weekly, Monthly and Yearly respectively |
Daily/Weekly/Monthly/Yearly |
InitialStorage |
Initial volume stored at the first instant of the time scope |
hm3 |
MaximumStorage |
Maximum volume that the hydro reservoir can store |
hm3 |
MinimumStorage |
Minimum volume that the hydro reservoir can store |
hm3 |
BinaryInvestment |
Binary reservoir investment decision |
Yes/No |
FixedInvestmentCost |
Overnight investment (capital -CAPEX- and fixed O&M -FOM-) cost |
M€ |
FixedChargeRate |
Fixed-charge rate to annualize the overnight investment cost |
p.u. |
InitialPeriod |
Initial period (year) when the unit is installed or can be installed, if candidate |
Year |
FinalPeriod |
Final period (year) when the unit is installed or can be installed, if candidate |
Year |
The model always considers a month of 672 hours, i.e., 4 weeks, not calendar months. The model assumes a year of 8736 hours, i.e., 52 weeks, not calendar years.
Daily storage type means the ESS inventory is assessed every time step. For the daily storage type, it is evaluated at the end of every hour; for the weekly storage type, it is assessed at the end of every day; for the monthly storage type, it is evaluated at the end of every week; and the yearly storage type is assessed at the end of every month. Outflows type represents the interval when the energy extracted from the storage must be satisfied (for daily outflows type at the end of every day, i.e., the energy consumed must equal the sum of outflows for every day). The storage cycle is the minimum between the inventory assessment period (defined by the storage type), the outflows period (determined by the outflows type), and the energy period (defined by the energy type) (only if outflows or energy power values have been introduced). It can be one time step, day, week, or month, but it cannot exceed the stage duration. For example, if the stage lasts 168 hours, the storage cycle can only be hourly or daily.
The initial reservoir volume is also fixed at the beginning and end of each stage, only if the initial volume lies between the reservoir storage limits. For example, the initial volume is set for hour 8736 in the case of a single stage or for hours 4368 and 4369 (end of the first stage and beginning of the second stage) in the case of two stages, each with 4368 hours.
Variable maximum and minimum reservoir volume¶
A description of the data included in the files oT_Data_VariableMaxVolume.csv and oT_Data_VariableMinVolume.csv follows:
Identifiers |
Header |
Description |
|||
|---|---|---|---|---|---|
Period |
Scenario |
LoadLevel |
Reservoir |
Maximum (minimum) reservoir volume by load level |
hm3 |
Not all the reservoirs need to be defined as columns of these files, only those with values different from 0.
It can also be used for upper-bounding and/or lower-bounding the volume of any reservoir. If the user enters a maximum volume value lower than the minimum, the model lowers the minimum to match the maximum.
For example, these data can be used to define the operating guide (rule) curves for the hydro reservoirs.
Hydrogen System Input Data¶
These input files are specifically introduced to allow a representation of the hydrogen energy vector to supply the hydrogen demand with hydrogen produced from
electricity or by any other means through the hydrogen network. The hydrogen data are expressed in tH2 for what a store holds and in tH2/h for everything that
flows, the same split the electricity data make between GWh and MW. However, they can easily be converted into MWh by multiplying the tH2 values by
33.33 MWh/tH2 (the lower heating value of hydrogen). To represent the hydrogen demand in MWh instead of tH2, input it in MWh in
the file oT_Data_DemandHydrogen.csv and convert it into tH2 by dividing the MWh values by 33.33 MWh/tH2.
If hydrogen is produced only from electricity, with no hydrogen flows among nodes, the hydrogen demand can be represented by the energy outflows associated with the unit (i.e., electrolyzer), and these hydrogen demand and network files are not needed.
File |
Description |
|---|---|
|
Hydrogen demand |
|
Hydrogen pipeline network data |
Hydrogen demand¶
A description of the data included in the file oT_Data_DemandHydrogen.csv follows:
Identifiers |
Header |
Description |
|||
|---|---|---|---|---|---|
Period |
Scenario |
LoadLevel |
Node |
Hydrogen demand of the node for each load level |
tH2/h |
Internally, all the values below 1e-5 times the maximum system demand of each area (or above its negative, for negative demand) will be converted into 0 by the model.
Hydrogen transmission pipeline network¶
A description of the circuit (initial node, final node, circuit) data included in the file oT_Data_NetworkHydrogen.csv follows:
Header |
Description |
|
|---|---|---|
InitialPeriod |
Initial period (year) when the unit is installed or can be installed, if candidate |
Year |
FinalPeriod |
Final period (year) when the unit is installed or can be installed, if candidate |
Year |
Length |
Pipeline length (only used for reporting purposes). If not defined, computed as 1.1 times the geographical distance |
km |
TTC |
Total transfer capacity (maximum permissible hydrogen flow) in forward direction. Static pipeline rating |
tH2/h |
TTCBck |
Total transfer capacity (maximum permissible hydrogen flow) in backward direction. Static pipeline rating |
tH2/h |
SecurityFactor |
Security factor to consider approximately N-1 contingencies. NTC = TTC x SecurityFactor. The security factors cannot all be 0; otherwise, there is no network capacity. |
p.u. |
FixedInvestmentCost |
Overnight investment (capital -CAPEX- and fixed O&M -FOM-) cost |
M€ |
FixedChargeRate |
Fixed-charge rate to annualize the overnight investment cost |
p.u. |
BinaryInvestment |
Binary pipeline investment decision |
Yes/No |
InvestmentLo |
Lower bound of investment decision |
p.u. |
InvestmentUp |
Upper bound of investment decision |
p.u. |
The initial and final nodes are where the hydrogen pipeline starts and ends. They must be different.
If there is no data for TTCBck, i.e., TTCBck is left empty or is equal to 0, the TTC replaces it in the code. Internally, all the TTC and TTCBck values below 1e-5 times the maximum system demand of each area will be converted into 0 by the model.
Those pipelines with fixed cost >0 are considered candidates and can be installed.
If the lower and upper bounds of investment decisions are very close (with a difference <1e-4) to 0 or 1, they are converted into 0 and 1. To forbid investment
on a candidate pipeline, set InvestmentUp to 1e-5: it falls below the snap threshold and is internally converted to 0. A blank cell or 0 in this column is
interpreted as “no upper bound” (full p.u. allowed) and lets the candidate be freely chosen by the optimization.
Heat System Input Data¶
These input files are specifically introduced to allow a representation of the heat energy vector to supply the heat demand with heat produced from electricity or from any fuel through the heat network. If heat is produced only from electricity, with no heat transfer among nodes, the heat demand can be represented by the energy outflows associated with the unit (i.e., heat pump or electric boiler).
File |
Description |
|---|---|
|
Heat reserve margin |
|
Heat demand |
|
Heat pipeline network data |
Heat adequacy reserve margin¶
The adequacy reserve margin for heating is the ratio between the available capacity and the maximum demand. It is modeled in the same way as the adequacy
reserve margin for electricity, considering the units’ heat demand and heat capacity. A description of the data included in the file
oT_Data_ReserveMarginHeat.csv follows:
Identifiers |
Header |
Description |
||
|---|---|---|---|---|
Period |
Area |
ReserveMargin |
Minimum heat adequacy reserve margin for each period and area |
p.u. |
This parameter is only used for system heating generation expansion, not for system operation. If no value is provided for an area, the reserve margin is considered 0.
Heat demand¶
A description of the data included in the file oT_Data_DemandHeat.csv follows:
Identifiers |
Header |
Description |
|||
|---|---|---|---|---|---|
Period |
Scenario |
LoadLevel |
Node |
Heat demand of the node for each load level |
MW |
Internally, all the values below 1e-5 times the maximum system demand of each area (or above its negative, for negative demand) will be converted into 0 by the model.
Heat transmission pipeline network¶
A description of the circuit (initial node, final node, circuit) data included in the file oT_Data_NetworkHeat.csv follows:
Header |
Description |
|
|---|---|---|
InitialPeriod |
Initial period (year) when the unit is installed or can be installed, if candidate |
Year |
FinalPeriod |
Final period (year) when the unit is installed or can be installed, if candidate |
Year |
Length |
Pipeline length (only used for reporting purposes). If not defined, computed as 1.1 times the geographical distance |
km |
TTC |
Total transfer capacity (maximum permissible heat flow) in forward direction. Static pipeline rating |
MW |
TTCBck |
Total transfer capacity (maximum permissible heat flow) in backward direction. Static pipeline rating |
MW |
SecurityFactor |
Security factor to consider approximately N-1 contingencies. NTC = TTC x SecurityFactor. The security factors cannot all be 0; otherwise, there is no network capacity. |
p.u. |
FixedInvestmentCost |
Overnight investment (capital -CAPEX- and fixed O&M -FOM-) cost |
M€ |
FixedChargeRate |
Fixed-charge rate to annualize the overnight investment cost |
p.u. |
BinaryInvestment |
Binary pipeline investment decision |
Yes/No |
InvestmentLo |
Lower bound of investment decision |
p.u. |
InvestmentUp |
Upper bound of investment decision |
p.u. |
The initial and final nodes are where the heat pipe starts and ends. They must be different.
If there is no data for TTCBck, i.e., TTCBck is left empty or is equal to 0, the TTC replaces it in the code. Internally, all the TTC and TTCBck values below 1e-5 times the maximum system demand of each area will be converted into 0 by the model.
Those pipelines with fixed cost >0 are considered candidates and can be installed.
If the lower and upper bounds of investment decisions are very close (with a difference <1e-4) to 0 or 1, they are converted into 0 and 1. To forbid investment
on a candidate pipeline, set InvestmentUp to 1e-5: it falls below the snap threshold and is internally converted to 0. A blank cell or 0 in this column is
interpreted as “no upper bound” (full p.u. allowed) and lets the candidate be freely chosen by the optimization.
Flow-Based Market Coupling¶
This input file is introduced explicitly to allow the flow-based market coupling method. If it is not available, the model runs with the DCOPF method.
File |
Description |
|---|---|
|
Power transfer distribution factors (PTDF) |
Variable power transfer distribution factors¶
A description of the data included in the file oT_Data_VariablePTDF.csv follows:
Identifiers |
Header |
Description |
||||||
|---|---|---|---|---|---|---|---|---|
Period |
Scenario |
LoadLevel |
Initial node |
Final node |
Circuit |
Node |
Power transfer distribution factors by load level |
p.u. |
Not all the transmission lines need to be defined as columns of this file, only those with values different from 0.