1c_parameters.gms 8.13 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
20
* --- Internal counters -------------------------------------------------------
Scalars
    errorcount /0/
21
    solveCount /0/
22
23
    tSolveFirst "counter (ord) for the first t in the solve"
    tSolveLast "counter for the last t in the solve"
24
    tCounter "counter for t" /0/
Juha Kiviluoma's avatar
Juha Kiviluoma committed
25
    lastCounter "last member in use of the general counter"
26
27
28
    ts_length "Length of time series (t)"
    continueLoop "Helper to stop the looping early"
    intervalLength "Legnth of the interval to be calculated, considering end of modelling period"
29
    currentForecastLength "Length of the forecast in the curren solve, minimum of unchanging and decreasing forecast lengths"
Juha Kiviluoma's avatar
Juha Kiviluoma committed
30
31
32
33
    count "General counter"
    count_lambda, count_lambda2 "Counter for lambdas"
    cum_slope "Cumulative for slope"
    cum_lambda "Cumulative for lambda"
34
    heat_rate "Heat rate temporary parameter"
Juha Kiviluoma's avatar
Juha Kiviluoma committed
35
    tmp "General temporary parameter"
36
37
    tmp_ "General temporary parameter"
    tmp__ "General temporary parameter"
38
39
40
    tmp_dist "Temporary parameter for calculating the distance between operating points"
    tmp_op "Temporary parameter for operating point"
    tmp_count_op "Counting the number of valid operating points in the unit data"
Topi Rasku's avatar
Topi Rasku committed
41
    f_improve / 12 /
42
43
    tRealizedLast "counter (ord) for the last realized t in the solve"
    firstResultsOutputSolve /1/;
44
45
;

46
47
* --- Power plant and fuel data -----------------------------------------------
Parameters
48
49
    p_gn(grid, node, param_gn) "Properties for energy nodes"
    p_gnBoundaryPropertiesForStates(grid, node, param_gnBoundaryTypes, param_gnBoundaryProperties) "Properties of different state boundaries and limits"
50
51
    p_gnn(grid, node, node, param_gnn) "Data for interconnections between energy nodes"
    p_gnu(grid, node, unit, param_gnu) "Unit data where energy type matters"
Juha Kiviluoma's avatar
Juha Kiviluoma committed
52
    p_unit(unit, *) "Unit data where energy type does not matter"
53
    p_nReserves(node, restype, *) "Data defining the reserve rules in each node"
54
55
    p_nuReserves(node, unit, restype, *) "Reserve provision data for units"
    p_gnPolicy(grid, node, param_policy, *) "Policy data for grid, node"
56
57
    p_groupPolicy(group, param_policy) "Two-dimensional policy data for groups"
    p_groupPolicy3D(group, param_policy, *) "Three-dimensional policy data for groups"
58
    p_fuelEmission(fuel, emission) "Fuel emission content"
Juha Kiviluoma's avatar
Juha Kiviluoma committed
59
    p_uFuel(unit, param_fuel, fuel, param_unitFuel) "Parameters interacting between units and fuels"
60
    p_unitFuelEmissionCost(unit, fuel, emission) "Emission costs for each unit, calculated from input data"
61
    p_effUnit(effSelector, unit, effSelector, *)  "Data for piece-wise linear efficiency blocks"
62
    p_effGroupUnit(effSelector, unit, *) "Unit data specific to a efficiency group (e.g. left border of the unit)"
63
    p_uNonoperational(unit, starttype, min_max) "Non-operational time after being shut down before start up"
64
    p_uStartup(unit, starttype, cost_consumption, unit_capacity) "Startup cost and fuel consumption"
65
    p_u_maxOutputInLastRunUpInterval(unit) "Maximum output in the last interval for the run-up to min. load (p.u.)"
66
    p_u_runUpTimeIntervals(unit) "Time intervals required for the run-up phase"
67
    p_u_runUpTimeIntervalsCeil(unit) "Ceiling of time intervals required for the run-up phase"
68
    p_ut_runUp(unit, t) "Output for the time intervals where the unit is being started up to the minimum load (minimum output in the last interval) (p.u.)"
69
70
// Time dependent unit & fuel parameters
    ts_unit(unit, *, f, t) "Time dependent unit data, where energy type doesn't matter"
71
    ts_effUnit(effSelector, unit, effSelector, *, f, t) "Time dependent data for piece-wise linear efficiency blocks"
72
    ts_effGroupUnit(effSelector, unit, *, f, t) "Time dependent efficiency group unit data"
73
74
// Alias used for interval aggregation
    ts_unit_(unit, *, f, t)
75
76
77
78
;

* --- Probability -------------------------------------------------------------
Parameters
79
80
81
82
    p_msWeight(mType, s) "Weight of sample"
    p_msProbability(mType, s) "Probability to reach sample conditioned on anchestor samples"
    p_mfProbability(mType, f) "Probability of forecast"
    p_msft_probability(mType, s, f, t) "Probability of forecast"
83
84
85
86
87
88
;

Scalar p_sWeightSum "Sum of sample weights";

* --- Model structure ---------------------------------------------------------
Parameters
89
    // Time displacement arrays
90
    dt(t) "Displacement needed to reach the previous time period (in time periods)"
91
    dt_noReset(t) "Displacement needed to reach the previous time period (in time periods)"
92
    dt_circular(t) "Circular t displacement if the time series data is not long enough to cover the model horizon"
93
    dt_next(t) "Displacement needed to reach the next time period (in time periods)"
94
95
    dtt(t, t) "Displacement needed to reach any previous time period (in time periods)"
    dt_toStartup(unit, t) "Displacement from the current time period to the time period where the unit has been started up in case online variable changes from 0 to 1"
96
97
98
99
100
    dt_starttypeUnitCounter(starttype, unit, counter) "Displacement needed to account for starttype constraints"
    dt_downtimeUnitCounter(unit, counter) "Displacement needed to account for downtime constraints"
    dt_uptimeUnitCounter(unit, counter) "Displacement needed to account for uptime constraints"

    // Forecast displacement arrays
101
102
103
    df(f, t) "Displacement needed to reach the realized forecast on the current time step"
    df_central(f, t) "Displacement needed to reach the central forecast - this is needed when the forecast tree gets reduced in dynamic equations"
    df_nReserves(node, restype, f, t) "Forecast index displacement needed to reach the realized forecast when committing reserves."
104

105
106
107
108
109
    // Temporary displacement arrays
    ddt(t) "Temporary time displacement array."
    ddf(f, t) "Temporary forecast displacement array."
    ddf_(f, t) "Temporary forecast displacement array."

110
    // Other
111
    p_slackDirection(slack) "+1 for upward slacks and -1 for downward slacks"
112
    tForecastNext(mType) "When the next forecast will be availalbe (ord time)"
113
    aaSolveInfo(mType, t, solveInfoAttributes) "stores information about the solve status"
Niina Helistö's avatar
Niina Helistö committed
114
115
    msStart(mType, s) "Start point of samples"
    msEnd(mType, s) "End point of samples"
116
    tOrd(t) "Order of t"
117
118
119
120
;

* --- Stochastic data parameters ----------------------------------------------
Parameters
121
    ts_influx(grid, node, f, t) "External power inflow/outflow during a time period (MWh/h)"
122
    ts_cf(flow, node, f, t) "Available capacity factor time series (per unit)"
123
    ts_reserveDemand(restype, up_down, node, f, t) "Reserve demand in region in the time period/slice (MW)"
124
    ts_nodeState(grid, node, param_gnBoundaryTypes, f, t) "Fix the states of a node according to time-series form exogenous input"
125
    ts_fuelPriceChange(fuel, t) "Initial fuel price and consequent changes in fuel price (€/MWh)"
126
    ts_fuelPrice(fuel, t) "Fuel price time series (EUR/MWh)"
127
    ts_unavailability(unit, t) "Unavailability of a unit in the time period/slice (p.u.)"
128
129

    // Aliases used for interval aggregation
130
    ts_influx_(grid, node, f, t)
131
    ts_influx_temp(grid, node, f, t)
132
    ts_cf_(flow, node, f, t)
133
    ts_reserveDemand_(restype, up_down, node, f, t)
134
    ts_nodeState_(grid, node, param_gnBoundaryTypes, f, t)
Topi Rasku's avatar
Topi Rasku committed
135
    ts_fuelPrice_(fuel, t)
136
137
138
139
;

* --- Other time dependent parameters -----------------------------------------
Parameters
Juha Kiviluoma's avatar
Juha Kiviluoma committed
140
    p_storageValue(grid, node, t) "Value of stored something at the end of a time step"
141
    p_stepLength(mType, f, t) "Length of a time step (t)"
142
    p_stepLengthNoReset(mType, f, t) "Length of a time step (t)"
143
;
144
Option clear = p_storageValue; // Required for whatever reason.