Setting up a data file for OSeMOSYS[1] 2010: Sets and Parameters
This note sets out how the datafile is structured to compile an energy model in OSeMOSYS. It is set out in the same structure and order that the inputs are specified in the OSeMOSYS code, for easy reference. It is also written in an informal style with comments aimed to help the new user familiarise themselves with the system.
The onus is on the user to use a consistent set of units. The following are suggested as a default:
First off the model sets need to be added. These include:
· The EMISSIONS to be accounted for. This is indexed by the letter “e”.
· The TECHNOLOGIES used. Note that this includes any element of the energy system which changes energy from one form to another, uses it or produces it. Conversely, unless a technology produces it, no energy is produced. Unless included as a demand, or unless a technology uses an energy form, it is not used. This is indexed by the letter “t”.
· The FUELS used (note that here energy services, or other proxies, should also be included). This is indexed by the letter “f”.
· The YEARs modelled (at the moment these are stuck as annual). This is indexed by the letter “y”.
· The TIMESLICEs to be included in each year (numbered from 1 to the total). This is indexed by the letter “l”.
· The number of “MODES_OF_OPERATION” that a technology can have, assuming that the technology can switch between a linear combination of these. (For example, a CHP plant may vary between producing maximum heat - and minimum electricity – and visa versa. The “capacity” remains constant simply because the same piece of machinery produces both outputs.) This is indexed by the letter “m”.
· The REGIONS that are to be modelled. This is indexed by the letter “r”.
· The points in time that represent extremes in storage operation, in this model known as BOUNDARY_INSTANCES. An example of a boundary instance may be the last time slice in a season. In order to check that a storage facility is operating within its physical limits at all points in time in the year, the modeller may wish to set up tests at various points in time where extremes or points of inflection are expected. In this formulation, those are referred to as “boundary instances”. This is indexed by the letter “b”.
· The STORAGE set contains the storage facilities. This is indexed by the letter “s”.
Next the parameters are entered. The first type of parameters are “Global” in that they define the aspects of the model framework.
Although the years used in the model are given in the YEAR set, the user should enter the first year given in that set. That is entered in the parameter StartYear. This is used for discounting and salvage value calculations.
The parameter YearSplit[y,l] is a matrix which gives the fraction of the year in each time slice modelled. Model years are in rows and timeslices in the columns. The same values are used for all regions. The sum of each entry over the year should equal 1. Consider, for example, a model constructed with a year that has two TIMESLICES, “Summer” and “Winter” and those are the same length. Then the YearSplit parameter for each TIMESLICE in that year will be 0.5.
(Originally there was flexibility in that different years could have different time slices, but this seemed to be an extra burden for not much return. This may be useful to add later, when the model mechanics are firmed up.)
The DiscountRate[t,r] parameter is a matrix that gives the discount rate for each technology in each region. Technologies are given in rows and regions in columns. The parameter is used to calculate a discount factor for the start of each year. That is used when discounting new capacity investments. It is used to calculate a discount factor for the middle of each year. That is used for discounting operating costs. It is also used (together with the life of a technology) to calculate the salvage value of each technology invested in during, but whose life extends beyond, the model period.
In the example files provided, a default (and common) discount rate is used. Having separate discount rates can be useful when trying to simulate specific “hurdle” rates that differ from sector to sector.
Next, the demands are entered. Note that these demands may be for energy-services, fuels, or some proxy. There are two different kinds of demands. One is an accumulated annual demand. This type of demand can be satisfied at any time of the year, as long as the total is met. This is a simplification that is useful when storage is not a constraint. Another is a specified annual demand, which has a specific demand profile during the year that must be satisfied.
The units of demand are set by the user. However, note that these should be equivalent for all demands. A suggested unit for a national model is PJ/.a.
The AccumulatedAnnualDemand[y,f,r] parameter is entered as a matrix which can be specified for any FUEL. A default demand is set to zero (so no annual demand is given to fuels not listed in the matrix). Model YEARs are in the row index and FUELs in the columns. This matrix is repeated for each REGION modelled.
There are demands who’s time of use is necessarily specified during the year. These are included in the SpecifiedAnnualDemand[y,f,r] parameter. As the name implies, in this parameter, the total specified demand for the year is entered. (This is distributed by timeslice with the next parameter.) The parameter is entered as a matrix which can be specified for any energy-service, fuel or proxy. A default demand is set to zero (so no specified demand is given to fuels not listed in the matrix). Model YEARs are in the row index and FUELs in the columns. The matrix is repeated for each REGION modelled.
For each energy-service, fuel or proxy which is given a SpecifiedAnnualDemand, a demand profile should be assigned. This is included in the SpecifiedDemandProfile[y,l,f,r] parameter. (If this is left blank then no specified demand is calculated.) The SpecifiedDemandProfile parameter indicates the annual fraction of energy-service/fuel/proxy demand that is required in each time step. For each year the sum of these is equal to one.
(Note that the specified and annual demands not added in the model equations. Should the specified demand be greater or equal to the annual demand, the latter will automatically be satisfied.)
In a departure from several existing modelling frameworks, all energy system components are set up as a technology in OSeMOSYS. A resource is represented as a technology with limits on its activity, for example. It is not a modelled as a separate component in the system. This reduces the code needed.
Performance
As the capacity may be measured in one unit and energy in another, the parameter CapacityToActivityUnit[t,r] is specified for each technology, for each region. TECHNOLOGY is given in rows and REGION in columns. The parameter effectively relates the energy (in the chosen energy units) that would be produced were one unit of capacity (in the chosen capacity unit) to be fully used for one year. Thus if capacity is measured in GW and energy in PJ, for a given technology, then parameter would have a value of 31.536.
In the parameter TechWithCapacityNeededToMeetPeakTS[t,r], all technologies who’s capacity should be such that they can contribute to meet the peak demand for the fuel that they produce (or use) are flagged. If the parameter is flagged, it has the value 1. If only a fraction of the technology’s capacity available to meet peak demand, which may be the case due to intermittency for example, then that fraction is entered into this parameter. TECHNOLOGY is given in rows and REGION in columns.
The CapacityFactor[y,t,r] is defined for each YEAR, TECHNOLOGY and REGION. It is used to convert annual capacity to the capacity available for each TIMESLICE. By default it is given the value 1 (meaning that all of the capacity is available for each TIMESLICE). Model YEARs are given in the row index and the TECHNOLOGYs in the columns. This is repeated for each REGION. Only technologies for which there is a capacity factor (to mimic “forced outage” or to de-rate them for other reasons) need explicitly be included.
The AvailabilityFactor [y,t,r] parameter is defined for each year and each technology. (It is often used to simulate "planned outages" and) it indicates the maximum time technology may run for the whole year. As with the CapacityFactor parameter, by default it is given the value 1. Model years are the row index and the technologies in the columns. Only technologies for which there is an availability factor need explicitly be included.
ResidualCapacity[y,t,r] is entered for each model year, each technology and for each region. It is the capacity left over from a period prior to the modeling period. Unlike in MESSAGE, LEAP and several other models, it is not calculated based on historical investments and a life associated with those investments. The reason for the departure is that often the life of historical investments may have changed from the time of design or implementation. It should be noted that no salvage value is assigned to any residual capacity. Model years are the row index and the technologies in the columns. It is repeated for each region and the units are in capacity.
Each technology is given a limited operational lifespan, and that is included in this parameter: OperationalLife[t,r]. It is presented as a Matrix with technologies in rows and regions in columns.
The parameter OutputActivityRatio[y,t,f,m,r] gives the rate of output of fuel as a ratio to the rate of activity of the “mode” in which a technology is operating. It is defined by year (as the technology could degrade), by technology, by fuel produced, by the technologies’ mode of operation as well as by region. Care needs to be taken to enter this matrix correctly, due to its multi-dimensional form. It is suggested that for each fuel and mode of operation, that a two dimensional matrix, with years in the rows and technologies in the columns be constructed, and this repeated for each region. Note also, that if the variable and capacity cost parameters, are being entered in terms of the technology’s output, then the OutputActivityRatio should be given the value “1”. (The latter representation is useful for power stations, who’s capacity is reported in terms of electricity power output.)
The parameter InputAcvityRatio[y,t,f,m] gives the rate of input (use) of fuel as a ratio to the rate of activity of the “mode” in which a technology is operating. (As with the OutputActivityRatio) it is defined by year (as the technology could degrade), by technology, by fuel produced, the technologies’ mode of operation and by region. Care needs to be taken to enter this matrix correctly, due to its multi-dimensional form. It is suggested that for each fuel and mode of operation, that a two dimensional matrix, with years in the rows and technologies in the columns be constructed, and this is repeated for each region. Note also, that if the variable and capacity cost parameters, are in terms of the technology’s input, then the IntputActivityRatio should be given the value “1”. (The latter representation is common for refineries, for example, whose capacity is measure in terms of barrels of crude oil processed per day.)
The CapitalCost[t,r] of each technology is given as a function of the technology as well as the year in which the technology was invested. The cost is expressed as NPV. The user should take care to ensure that this is consistent with the discount rate used. As not all technologies (as represented in OSeMOSYS) incur a capacity cost, this is left as zero by default. It is suggested that data is entered two dimensional matrix for Model years are the row index and the technologies in the columns, and this repeated for each region. The units are in currency per unit of capacity.
The variable cost , VariableCost [y,t,m,r], is defined for each year, for each technology, by mode of operation and for each region. It is the cost per unit of activity (for a given mode of operation) of that technology. As not all technologies (as represented in OSEMOSYS) incur a variable cost, this is left as zero by default. It is suggested that the data is entered is entered as a two dimensional matrix for each mode of operation that the technology has (and this repeated for each region). In this form, model years are the row index and the technologies in the columns.
The fixed cost parameter, FixedCost[y,t,r], is defined for each year, each technology and each region. It is the cost per unit of capacity of that technology. As not all technologies (as represented in OSEMOSYS) incur a fixed cost, this is left as zero by default. It is represented as a matrix with model years as the row index and the technologies as column index. The unit is currency per unit of capacity.
Capacity limits
If a technology is allowed up to a maximum total (residual and new) capacity each year of the modelling period, the limiting capacity for the affected technology is included in the TotalAnnualMaxCapacity[y,t,r] parameter. The default for all technologies is a high number (so that the limit is effectively no enforced). The unit of the parameter is the unit that is used to measure the respective technologies capacity in the model. The parameter is a matrix with the years as the row index and technologies included in the column index. It is repeated for each region.
If a technology should be invested in over a minimum total (residual and new) capacity each year, the limiting capacity for the affected technology is included in the TotalAnnualMinCapacity[y,t,r] parameter. The default for all technologies is zero (so that the limit is effectively no enforced). The unit of the parameter is the unit that is used to measure the respective technologies capacity in the model. The parameter is a matrix with the years as the row index and technologies included in the column index. It is repeated for each region.
If a technology is allowed up to a maximum new capacity each year of the modelling period, the limiting capacity for the affected technology is included in the TotalAnnualMaxCapacityInvestment[y,t,r] parameter. The default for all technologies is a high number (so that the limit is effectively no enforced). The unit of the parameter is the unit that is used to measure the respective technologies capacity in the model. The parameter is a matrix with the years as the row index and technologies included in the column index. It is repeated for each region.
If a technology should be invested in over a minimum new capacity each year, the limiting capacity for the affected technology is included in the TotalAnnualMinCapacityInvestment[y,t,r] parameter. The default for all technologies is zero (so that the limit is effectively no enforced). The unit of the parameter is the unit that is used to measure the respective technologies capacity in the model. The parameter is a matrix with the years as the row index and technologies included in the column index
Activity limits
It may be that there is an annual limit to the rate of activity (the sum of all “modes of operation”) that a technology could perform each year. If that is the case, the TotalTechnologyAnnualActivityUpperLimit[y,t,r] parameter should be invoked. The default value of this parameter is high (so that it is effectively not enforced). The unit of the parameter is the unit that is used to measure the respective technology’s rate of activity in the model. The parameter is a matrix with the years as the row index and technologies included in the column index. It is repeated for each region.
It may be that there is minimum rate of activity that a technology (considering the sum of all “modes of operation”) must perform each year. If that is the case, the TotalTechnologyAnnualActivityLowerLimit[y,t,r] parameter should be invoked. The default value of this parameter is zero (so that it is effectively not enforced). The unit of the parameter is the unit that is used to measure the respective technologies activity in the model application. The parameter is a matrix with the years as the row index and technologies included in the column index. It is repeated for each region.
Should there be a maximum level of activity by a technology over the whole model period, the parameter TotalTechnologyModelPeriodActivityUpperLimit[t,r] should be invoked. The default value of this parameter is high (so that it is effectively not enforced). The unit of the parameter is the unit that is used to measure the respective technologies activity in the model. It is repeated for each region.
Should there be a minimum level of activity (summed over all MODEs) to be enforced by a technology over the whole model period, the parameter TotalTechnologyModelPeriodActivityLowerLimit[t,r] should be invoked. The default value of this parameter is zero (so that it is effectively not enforced). The unit of the parameter is the unit that is used to measure the respective technologies activity in the model. It is repeated for each region.
The parameter, EmissionActivityRatio [y,t,e,m,r], gives the rate of emissions as a ratio to the rate of a particular mode of activity for a technology. It is defined by year, by technology, by emission, as well as by the technologies’ mode of operation and repeated for each region. Care needs to be taken to enter this matrix correctly, due to its multi-dimensional form.
An EmissionsPenalty [y,e,r] for each emission , each year and each region is given. It is represented as a matrix with model years as the row index and the emission species as column index. It is repeated for each region.
If there are emissions that need to be accounted for, but are not calculated by the model on an annual basis, they can be included as annual exogenous emissions, for each year and region in the parameter: AnnualExogenousEmission[y,e,r]. The parameter is entered as a matrix with model years as the row index, emissions (in emissions units) in the columns and these are repeated for each region.
The sum of emissions from the energy system modelled (plus any annual exogenous emissions ) may be limited using the parameter: AnnualEmissionLimit[y,e,r] The parameter is entered as a matrix with model years as the row index, emissions (in emissions units) in the columns and these are repeated for each region.
If there are emissions that need to be accounted for, but are not calculated by the model over the entire model period, they can be included as annual exogenous emissions, for each year and region in the parameter: ModelPeriodExogenousEmission[e,r]. The parameter is entered as a matrix with exogenous emissions as the row index and regions for the columns.
The sum of emissions from the energy system modelled over the model period (plus any annual or model-period exogenous emissions ) may be limited using the parameter: ModelPeriodEmissionLimit[e,r]. The parameter is entered as a matrix with emissions (in emissions units) as the row index and regions in the columns.
Depending on what fuel(s) a reserve margin is required they are given a value of “1” in the ReserveMarginTagFuel[y,f,r] parameter. The default otherwise is zero. The parameter is a matrix with the years as the row index and fuels included in the column index, and it is repeated for each region.
The ReserveMargin[y,r] parameter is given per year and indicates the reserve (installed) capacity required over the peak demand (as modelled) for the specified fuel. Note that only technologies that are tagged are included in this reserve margin. It is entered as a matrix with the years as the row index and regions included in the column index.
Each technology (in each region) that is allowed to contribute to the reserve margin is tagged in this parameter: ReserveMarginTagTechnology[y,t,r] . If the “tag value” is 1 then 100% of the installed capacity of that technology contributes to the reserve. If the tag value is .2, then only 20%. This representation is useful, as some intermittent technologies contribute to the capacity reserve in a limited manner. The parameter is a matrix with the years as the row index and technologies included in the column index. It is repeated for each region.
Each renewable technology that is tagged with this parameter: RETechnology[y,t,r]. If the “tag value” is either 1 if it exists, or 0 if it does not. The parameter is a matrix with the years as the row index and technologies included in the column index. It is repeated for each REGION.
The fuels (in each region) for which there is a renewable target are tagged using the RETagFuel[y,f,r] parameter.
The REMinProductionTarget[y,r] parameter indicates how much of the fuels (tagged in the RETagFuel parameter) must come from RE technologies (that were tagged with the RETechnology[y,t,r]. parameter). A value of 0 indicates that there is no RE target. The target is specified for each year.
[1] The following footnote is to help the user conceptualise the OSEMOSYS Model. Each technology has an activity and a capacity. When a technology is active it either uses or produces energy (or both). The activity is limited by the time that it may be active (by the availability factor). It is also limited by its capacity. The capacity should be sufficient for the activity to take place. As some technologies capacity may not be available, but may be needed to meet a peak demand, those are further de-rated by a capacity factor. When a technology is active it may or may not produce emissions (according to an EmissionsActivityRatio). A technology’s activity is related to its available capacity (by the CapacityToActivityUnit). The use of energy by a technology is related to its activity (by the ActivityInputRatio). The production of an energy form is related by the (OutputActivityRatio). Technologies incur a fixed operating and variable cost. That is a function of the capacity in place on the system. Whenever new capacity is invested in, it incurs a cost (if one is specified). When it is retired some cost is salvaged. When the technology is active, it incurs a variable cost. Where specified, the emissions from a technology may be penalised. The model minimises the capital costs (minus the salvage value), the operating costs as well as the emissions penalties for each technology.