1a_definitions.gms 12.5 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$ontext
This file is part of Backbone.

Backbone is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

Backbone is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public License
along with Backbone.  If not, see <http://www.gnu.org/licenses/>.
$offtext

18
19
* --- Model parameters, features and switches ---------------------------------
Sets  // Model related selections
20
    mType "model types in the Backbone"
21
        /invest, storage, schedule, realtime, building, schedule_dispatch/
22
    mSetting "setting categories for models"
23
        /t_start, t_jump, t_horizon, t_forecastStart, t_forecastLength, t_forecastJump, t_end, t_reserveLength, samples, forecasts, readForecastsInTheLoop, intervalEnd, intervalLength, IntervalInHours, t_aggregate/
24
25
26
    counter "general counter set"
        /c000*c999/

27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
    solveInfoAttributes
        /
          modelStat
          solveStat
          totalTime
          iterations
          nodes
          numEqu
          numDVar
          numVar
          numNZ
          sumInfes
          objEst
          objVal
        /

43
    // Efficiency approximation related sets
44
45
46
    op "Operating points in the efficiency curves, also functions as index for data points"
        /op00*op12/ // IMPORTANT! Has to equal the same param_unit!
    eff "Effiency for the corresponding operating point ('op') in the efficiency curves, also used for data indexing"
47
48
49
        /eff00*eff12/ // IMPORTANT! Has to equal the same param_unit!
    lambda "Lambda approximation indeces"
        /lambda01*lambda12/ // IMPORTANT! Has to equal effLambda!
Juha Kiviluoma's avatar
Juha Kiviluoma committed
50
    effSelector "Select equations and lambdas/slope for efficiency calculations"
51
        / directOff, directOn, lambda01*lambda12 /
Juha Kiviluoma's avatar
Juha Kiviluoma committed
52
53
54
55
56
57
58
59
    effDirect(effSelector) "Using direct input to output equation"
        / directOff, directOn /
    effDirectOff(effSelector) "Using direct input to output equation without online variable, i.e. constant efficiency"
        / directOff /
    effDirectOn(effSelector) "Using direct input to output equation with online variable"
        / directOn /
    effLambda(effSelector) "Lambdas in use for part-load efficiency representation"
        / lambda01*lambda12 /
60
61
    effOnline(effSelector) "Efficiency selectors that use online variables"
        / directOn, lambda01*lambda12 / // IMPORTANT! Online variables are generated based on this, so keep it up to date!
Juha Kiviluoma's avatar
Juha Kiviluoma committed
62
63
    effLevel "Pre-defined levels for efficiency representation that can start from t_solve + x"
        / level1*level9 /
64
65
66
67
68
69

    // Variable direction related sets
    up_down "Direction set used by some variables, e.g. reserve provisions and generation ramps"
        / up, down /
    inc_dec "Increase or decrease in dummy, or slack variables"
       / increase, decrease /
70
71
;

72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
Sets //Reserve type sets
    restype "Reserve types"
        / primary "Automatic frequency containment reserves"
          secondary "Fast frequency restoration reserves"
          tertiary "Replacement reserves"
        /
    restypeDirection(restype, up_down) "Different combinations of reserve types and directions"
        / primary.up
          primary.down
          secondary.up
          secondary.down
          tertiary.up
          tertiary.down
        /
;
Juha Kiviluoma's avatar
Juha Kiviluoma committed
87

88
89
* Numeric parameters
Parameter
90
    settings(mSetting)
91
    mSettings(mType, mSetting)
Juha Kiviluoma's avatar
Juha Kiviluoma committed
92
    mSettingsEff(mtype, effLevel)
93
    mInterval(mType, mSetting, counter)
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
    t_skip_counter
;


Parameter params(*) /
$if exist 'params.inc' $include 'params.inc'
/;


* Model features
Set feature "Set of optional model features" /
    findStorageStart "Solve for optimal storage start levels"
    storageValue     "Use storage value instead of fixed control"
    storageEnd       "Expected storage end levels greater than starting levels"
    addOn            "Use StoSSch as a storage add-on to a larger model"
    extraRes         "Use extra tertiary reserves for error in elec. load during time step"
    rampSched        "Use power based scheduling"
/;

Set active(feature) "Set membership tells active model features" /
$if exist 'features.inc' $include 'features.inc'
/;

* --- Parse command line options and store values -----------------------------

* Features
$if set findStorageStart active('findStorageStart') = %findStorageStart%;
$if set storageValue active('storageValue') = %storageValue%;
$if set storageEnd active('storageEnd') = %storageEnd%;
$if set addOn active('addOn') = %addOn%;
$if set extraRes active('extraRes') = %extraRes%;
$if set rampSched active('rampSched') = %rampSched%;


Juha Kiviluoma's avatar
Juha Kiviluoma committed
128
129
130
* --- Set definitions for parameters -----------------------------------------------------
Sets

131
param_gn  "Possible parameters for grid, node" /
132
    selfDischargeLoss "Self discharge rate of the node [MW/v_state]"
133
    energyStoredPerUnitOfState "A possible unit conversion if v_state uses something else than MWh"
134
135
136
137
138
    boundStart    "A flag to bound the first t in the run using reference constant or time series"
    boundStartAndEnd "A flag that both start and end are bound using reference constant or time series"
    boundEnd      "A flag to bound last t in each solve based on the reference constant or time series"
    boundAll      "A flag to bound the state to the reference in all time steps"
    boundStartToEnd  "Force the last states to equal the first state"
139
    boundCyclic   "A flag to impose cyclic bounds for the first and the last states"
140
    forecastLength "Length of forecasts in use for the node (hours). After this, the node will use the central forecast."
Juha Kiviluoma's avatar
Juha Kiviluoma committed
141
142
/

143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
param_gnBoundaryTypes "Types of boundaries that can be set for a node with a state variable" /
    upwardLimit   "Absolute maximum state of the node (unit depends on energyCapacity)"
    downwardLimit "Absolute minimum energy in the node (unit depends on energyCapacity)"
    upwardSlack01*upwardSlack20 "A threshold after which a specific cost co-efficient is applied (unit depends on energyCapacity)"
    downwardSlack01*downwardSlack20 "A threshold after which a specific cost co-efficient is applied (unit depends on energyCapacity)"
    reference     "Reference value for a state that can be used to bound a state (unit depends on energyCapacity)"
    maxSpill      "Maximum spill rate from the node (MWh/h)"
    minSpill      "Minimum spill rate from the node (MWh/h)"
/

param_gnBoundaryProperties "Properties that can be set for the different boundaries" /
    useTimeSeries "A flag to use time series to set state bounds and limits"
    useConstant   "A flag to use constant to set state bounds and limits"
    deltaFromReference "The constant or the time series indicate how much the boundary deviates from reference (instead of being an absolute number)"
    constant      "A constant value for the boundary or the reference"
    slackCost     "The cost of exceeding the slack boundary"
    multiplier    "A multiplier to change the value (either constant or time series), default 1"
/

slack(param_gnBoundaryTypes) "Categories for slack variables"
       / upwardSlack01*upwardSlack20, downwardSlack01*downwardSlack20 /
upwardSlack(slack) "Set of upward slacks"
       / upwardSlack01*upwardSlack20 /
downwardSlack(slack) "Set of downward slacks"
       / downwardSlack01*downwardSlack20 /
stateLimits(param_gnBoundaryTypes) "set of upward and downward state limits"
       / upwardLimit, downwardLimit /
spillLimits(param_gnBoundaryTypes) "set of upward and downward state limits"
       / maxSpill, minSpill /
useConstantOrTimeSeries(param_gnBoundaryProperties) "useTimeSeries and useConstant property together"
       / useTimeSeries, useConstant /

Juha Kiviluoma's avatar
Juha Kiviluoma committed
175
176
param_gnn "Set of possible data parameters for grid, node, node (nodal interconnections)" /
    transferCap "Transfer capacity limits"
177
    transferCapBidirectional "Total bidirectional transfer capacity limit"
Juha Kiviluoma's avatar
Juha Kiviluoma committed
178
179
180
    transferLoss "Transfer losses"
    diffCoeff   "Coefficients for energy diffusion between nodes"
    boundStateOffset "Offset parameter for relatively bound node states"
181
    boundStateMaxDiff "Maximum difference of node state pairs"
182
183
184
    transferCapInvLimit "Capacity limit for investments (MW)"
    investMIP   "Choice of making integer investment instead of continous investment (MW versus number of links)"
    unitSize    "Size of one link for integer investments (MW)"
185
    invCost "Investment cost (€/MW)"
186
    annuity "Investment annuity"
Juha Kiviluoma's avatar
Juha Kiviluoma committed
187
188
189
190
191
192
193
/

param_gnu "Set of possible data parameters for grid, node, unit" /
    maxGen      "Maximum output capacity (MW)"
    maxCons     "Maximum loading capacity (MW)"
    cB          "Share of output"
    cV          "Reduction in primary output when increasing secondary output, e.g. reduction of electricity generation due to heat generation in extraction CHP (MWh_e/MWh_h)"
194
195
    maxRampUp   "Speed to ramp up (p.u. / min)"
    maxRampDown "Speed to ramp down (p.u. / min)"
196
197
    rampUpCost  "Wear and tear cost of ramping up (€/MW)"
    rampDownCost "Wear and tear cost of ramping up (€/MW)"
198
199
    maxGenCap   "Maximum output capacity investment (MW)"
    maxConsCap  "Maximum loading capacity investment (MW)"
200
    upperLimitCapacityRatio  "Ratio of the upper limit of the node state and the unit capacity investment"
201
202
203
204
    investMIP   "Choice of making integer investment instead of continous investment (MW versus number of units)"
    unitSize    "Size of one unit for integer investments (MW)"
    invCosts    "Investment costs (€/MW)"
    annuity     "Investment annuity"
Juha Kiviluoma's avatar
Juha Kiviluoma committed
205
/
206

Topi Rasku's avatar
Topi Rasku committed
207
param_unit "Set of possible data parameters for units" /
Juha Kiviluoma's avatar
Juha Kiviluoma committed
208
    unitCount   "Number of units if aggregated"
209
    outputCapacityTotal "Output capacity of the unit, calculated by summing all the outputs together by default, unless defined in data"
Juha Kiviluoma's avatar
Juha Kiviluoma committed
210
    availability "Availability of given energy conversion technology (p.u.)"
211
212
213
214
215
216
217
218
219
    omCosts     "Variable operation and maintenance costs (€/MWh)"
    startCostCold "Variable start-up costs for cold starts excluding fuel costs (€/MWh) NOT IN USE"
    startCostWarm "Variable start-up costs for warm starts excluding fuel costs (€/MWh) NOT IN USE"
    startCost "Variable start-up costs for starts excluding fuel costs (€/MWh)"
    startFuelConsCold "Consumption of start-up fuel per capacity started up (MWh_fuel/MW) NOT IN USE"
    startFuelConsWarm "Consumption of start-up fuel per capacity started up (MWh_fuel/MW) NOT IN USE"
    startFuelCons "Consumption of start-up fuel per capacity started up (MWh_fuel/MW)"
    startCold   "Offline hours after which the start-up will be a cold start (h) NOT IN USE"
    startWarm   "Offline hours after which the start-up will be a warm start (h) NOT IN USE"
220
221
    minOperationTime "Minimum operation time (h), prevents shutdown after startup until the defined amount of time has passed"
    minShutDownTime "Minimum shut down time (h), prevents starting up again after the defined amount of time has passed"
Juha Kiviluoma's avatar
Juha Kiviluoma committed
222
223
224
225
226
    SO2         "SO2 emissions (tonne per MWh_fuel)"
    NOx         "NOx emissions (tonne per MWh_fuel)"
    CH4         "CH4 emissions (tonne per MWh_fuel)"
    resTimelim  "How long should a storage be able to provide reserve (h)"
    eff00 * eff12    "Efficiency of the unit to convert input to output/intermediate product"
227
228
    opFirstCross "The operating point where the real efficiency curve and approximated efficiency curve cross"
    op00 * op12     "Right border of the efficiency point"
Juha Kiviluoma's avatar
Juha Kiviluoma committed
229
    level1 * level9 "Level of simplification in the part-load efficiency representation"
230
    useTimeseries "Uses time series form input for unit parameters whenever possible"
231
    section     "Possibility to define a no load fuel use for units with zero minimum output"
Juha Kiviluoma's avatar
Juha Kiviluoma committed
232
/
233

Juha Kiviluoma's avatar
Juha Kiviluoma committed
234
235
236
237
238
239
240
241
242
243
244
245
param_fuel "Parameters for fuels" /
    emissionIntensity "Intensity of emission from fuel (kg/MWh_fuel)"
    main        "Main fuel of the unit - unless input fuels defined as grids"
    startup     "Startup fuel of the unit, if exists. Can be the same as main fuel - consumption using startupFuelCons"
/

param_unitFuel "Parameters for fuel limits in units" /
    maxFuelCons "Maximum absolute fuel consumption in a unit"
    maxFuelFraction "Maximum share of a fuel in the consumption mix"
/

param_policy "Set of possible data parameters for grid, node, regulation" /
246
247
248
    emissionTax "Emission tax (EUR/tonne)"
    update_frequency "???"
    gate_closure "???"
Juha Kiviluoma's avatar
Juha Kiviluoma committed
249
250
/

251
252
253
254
param_gnugnu "Set of possible data parameters for grid, node, unit, grid, node, unit" /
    capacityRatio "Fixed ratio of the capacity of the first unit to the second"
/

255

256
; // End parameter set declarations