Commit 6421e64e authored by Juha Kiviluoma's avatar Juha Kiviluoma
Browse files

Merge branch 'Fix_ramp_constraints' into generic_forecast_loop_read

# Conflicts:
#	inc/3d_setVariableLimits.gms
parents 67e9a1a6 d38f8017
......@@ -23,13 +23,16 @@ Backbone has been designed with a modular structure, making it easier to change
* 1d_results.gms - Contains definitions for the model results.
* 1e_inputs.gms - Contains instructions on how to load input data, as well as forms a lot of helpful sets based on said data, for example in order to facilitate writing the constraints.
* 2a_variables.gms - Contains variable definitions used by the models.
* 2b_equations.gms - Contains the equation definitions for the models.
* 2b_eqDeclarations.gms - Contains equation declarations for the models.
* 2c_objective.gms - Contains the objective function definition.
* 2d_constraints.gms - Contains definitions for constraint equations.
* *Model Definition Files* - Contains GAMS definitions for different models, essentially lists the equations (constraints) that apply. Current files include *schedule.gms*, *building.gms* and *invest.gms*.
* 3a_periodicInit.gms - Initializes various data and sets for the solve loop.
* 3b_inputsLoop.gms - Instructions for possible data import inside the solve loop, as well as forecast in-the-loop improvements.
* 3c_periodicLoop.gms - Contains instructions for the forecast-time structure of the desired model.
* 3d_setVariableLimits.gms - Defines the variable boundaries for each solve.
* 3e_solve.gms - Contains the GAMS solve command for using the solver.
* 3f_afterSolve.gms - Fixes some variable values after solve.
* 4a_outputVariant.gms - Contains instructions for storing desired results during the solve loop.
* 4b_outputInvariant.gms - Calculates further results post-solve.
* 4c_outputQuickFile.gms
......@@ -37,10 +40,11 @@ Backbone has been designed with a modular structure, making it easier to change
Most of these files are under *\inc* in the Backbone folder, except for the model definition files being housed under *\defModels*. Other than the abovementioned files, a few key input files are required for Backbone to work. These are assumed to be found under *\input* and are briefly described below.
* inputData.gdx - Contains most of the input data about the system to be modelled.
* 1_options.gms - Contains options to control the solver. Not required but included if exists.
* timeAndSamples.inc - Contains definitions for the time, forecast and sample index ranges.
* modelsInit.gms - Contains model parameters for the solve (or a link to a template under *\defModels* to be used). Useful for any additional GAMS scripting.
Backbone folder contains two template files *timeAndSamples_temp.inc* and *modelsInit_temp.gms* to provide examples of the input format. These files can be copied into *\input* and renamed to *timeAndSamples.inc* and *modelsInit.gms*.
Backbone folder contains three template files *1_options_temp.gms*, *timeAndSamples_temp.inc*, and *modelsInit_temp.gms* to provide examples of the input format. These files can be copied into *\input* and renamed to *1_options.gms*, *timeAndSamples.inc*, and *modelsInit.gms*.
## When Simply Using Backbone
......
......@@ -42,6 +42,7 @@ Model building /
* q_conversionSOS2InputIntermediate
* q_conversionSOS2Constraint
* q_conversionSOS2IntermediateOutput
* q_fuelUseLimit
// Energy Transfer
q_transfer
......
......@@ -99,7 +99,7 @@ if (mType('building'),
// Lenght of reserve horizon
mSettings('building', 't_reserveLength') = 0;
* --- Define Unit Efficiency Approximations -----------------------------------
* --- Define Unit Approximations ----------------------------------------------
// Define unit aggregation threshold
mSettings('building', 't_aggregate') = 0;
......@@ -107,15 +107,18 @@ if (mType('building'),
// Define unit aggregation and efficiency levels starting indeces
mSettingsEff('building', 'level1') = 1;
* ---- Define output settings for results
// Define threshold for omitting start-up and shutdown trajectories
mSettings('building', 't_omitTrajectories') = 8761;
* --- Define output settings for results --------------------------------------
// Define when to start outputting results - allows to skip an initialization period. Uses ord(t) > results_t_start in the code.
mSettings('schedule', 'results_t_start') = 1;
mSettings('building', 'results_t_start') = 1;
* ---- Control the solver
// Control the use of advanced basis
mSettings('schedule', 'loadPoint') = 2; // 0 = no basis, 1 = latest solve, 2 = all solves, 3 = first solve
mSettings('schedule', 'savePoint') = 2; // 0 = no basis, 1 = latest solve, 2 = all solves, 3 = first solve
* --- Control the solver ------------------------------------------------------
// Control the use of advanced basis
mSettings('building', 'loadPoint') = 2; // 0 = no basis, 1 = latest solve, 2 = all solves, 3 = first solve
mSettings('building', 'savePoint') = 2; // 0 = no basis, 1 = latest solve, 2 = all solves, 3 = first solve
); // END if(mType)
......@@ -26,7 +26,6 @@ Model invest /
// Unit Operation
q_maxDownward
q_noReserveInRunUp
q_maxUpward
q_startshut
q_startuptype
......@@ -37,12 +36,15 @@ Model invest /
q_genRamp
q_rampUpLimit
q_rampDownLimit
q_rampUpDown
q_rampSlack
q_outputRatioFixed
q_outputRatioConstrained
q_conversionDirectInputOutput
q_conversionSOS2InputIntermediate
q_conversionSOS2Constraint
q_conversionSOS2IntermediateOutput
q_fuelUseLimit
// Energy Transfer
q_transfer
......
......@@ -80,7 +80,7 @@ if (mType('invest'),
// Define forecast properties and features
mSettings('invest', 't_forecastStart') = 0;
mSettings('invest', 't_forecastLengthUnchanging') = 0; // Length of forecasts in time steps - this does not decrease when the solve moves forward (requires forecast data that is longer than the horizon at first)
mSettings('building', 't_forecastLengthDecreasesFrom') = 0; // Length of forecasts in time steps - this decreases when the solve moves forward until the new forecast data is read (then extends back to full length)
mSettings('invest', 't_forecastLengthDecreasesFrom') = 0; // Length of forecasts in time steps - this decreases when the solve moves forward until the new forecast data is read (then extends back to full length)
mSettings('invest', 't_forecastJump') = 0;
// Define Realized and Central forecasts
......@@ -105,7 +105,7 @@ if (mType('invest'),
// Lenght of reserve horizon
mSettings('invest', 't_reserveLength') = 36; // CHECK THIS
* --- Define Unit Efficiency Approximations -----------------------------------
* --- Define Unit Approximations ----------------------------------------------
// Define unit aggregation threshold
mSettings('invest', 't_aggregate') = 8761;
......@@ -113,16 +113,19 @@ if (mType('invest'),
// Define unit aggregation and efficiency levels starting indeces
mSettingsEff('invest', 'level1') = 1;
* ---- Define output settings for results
// Define threshold for omitting start-up and shutdown trajectories
mSettings('invest', 't_omitTrajectories') = 8761;
* --- Define output settings for results --------------------------------------
// Define when to start outputting results - allows to skip an initialization period. Uses ord(t) > results_t_start in the code.
mSettings('schedule', 'results_t_start') = 1;
mSettings('invest', 'results_t_start') = 1;
* ---- Control the solver
// Control the use of advanced basis
mSettings('schedule', 'loadPoint') = 2; // 0 = no basis, 1 = latest solve, 2 = all solves, 3 = first solve
mSettings('schedule', 'savePoint') = 2; // 0 = no basis, 1 = latest solve, 2 = all solves, 3 = first solve
* --- Control the solver ------------------------------------------------------
// Control the use of advanced basis
mSettings('invest', 'loadPoint') = 2; // 0 = no basis, 1 = latest solve, 2 = all solves, 3 = first solve
mSettings('invest', 'savePoint') = 2; // 0 = no basis, 1 = latest solve, 2 = all solves, 3 = first solve
); // END if(mType)
......
......@@ -26,7 +26,6 @@ Model schedule /
// Unit Operation
q_maxDownward
* q_noReserveInRunUp
q_maxUpward
q_startshut
q_startuptype
......@@ -37,12 +36,15 @@ Model schedule /
q_genRamp
q_rampUpLimit
q_rampDownLimit
q_rampUpDown
q_rampSlack
q_outputRatioFixed
q_outputRatioConstrained
q_conversionDirectInputOutput
q_conversionSOS2InputIntermediate
q_conversionSOS2Constraint
q_conversionSOS2IntermediateOutput
q_fuelUseLimit
// Energy Transfer
q_transfer
......
......@@ -82,7 +82,7 @@ if (mType('schedule'),
// Define forecast properties and features
mSettings('schedule', 't_forecastStart') = 1;
mSettings('schedule', 't_forecastLengthUnchanging') = 36; // Length of forecasts in time steps - this does not decrease when the solve moves forward (requires forecast data that is longer than the horizon at first)
mSettings('building', 't_forecastLengthDecreasesFrom') = 168; // Length of forecasts in time steps - this decreases when the solve moves forward until the new forecast data is read (then extends back to full length)
mSettings('schedule', 't_forecastLengthDecreasesFrom') = 168; // Length of forecasts in time steps - this decreases when the solve moves forward until the new forecast data is read (then extends back to full length)
mSettings('schedule', 't_forecastJump') = 24;
mTimeseries_loop_read('schedule', 'ts_reserveDemand') = no;
mTimeseries_loop_read('schedule', 'ts_unit') = no;
......@@ -120,7 +120,7 @@ if (mType('schedule'),
// Lenght of reserve horizon
mSettings('schedule', 't_reserveLength') = 36;
* --- Define Unit Efficiency Approximations -----------------------------------
* --- Define Unit Approximations ----------------------------------------------
// Define unit aggregation threshold
mSettings('schedule', 't_aggregate') = 168;
......@@ -129,15 +129,18 @@ if (mType('schedule'),
mSettingsEff('schedule', 'level1') = 1;
mSettingsEff('schedule', 'level2') = 12;
* ---- Define output settings for results
// Define threshold for omitting start-up and shutdown trajectories
mSettings('schedule', 't_omitTrajectories') = 8761;
* --- Define output settings for results --------------------------------------
// Define when to start outputting results - allows to skip an initialization period. Uses ord(t) > results_t_start in the code.
mSettings('schedule', 'results_t_start') = 1;
* ---- Control the solver
* --- Control the solver ------------------------------------------------------
// Control the use of advanced basis
mSettings('schedule', 'loadPoint') = 2; // 0 = no basis, 1 = latest solve, 2 = all solves, 3 = first solve
mSettings('schedule', 'savePoint') = 2; // 0 = no basis, 1 = latest solve, 2 = all solves, 3 = first solve
); // END if(mType)
......@@ -52,6 +52,10 @@ p_u_maxOutputInLastRunUpInterval
p_u_runUpTimeIntervals
dt_toStartup
p_ut_runUp
p_u_maxOutputInFirstShutdownInterval
p_u_shutdownTimeIntervals
dt_toShutdown
p_ut_shutdown
* Variables
v_obj
......@@ -61,12 +65,14 @@ v_transfer
v_state
v_fuelUse
v_sos2
v_startup
v_spill
v_online_LP
v_online_MIP
v_startup
v_shutdown
v_genRampUpDown
v_transferRightward
v_transferLeftward
v_resTransferRightward
v_resTransferLeftward
v_reserve
......@@ -82,7 +88,6 @@ v_invest_MIP
// Unit Operation
q_maxDownward
q_noReserveInRunUp
q_maxUpward
q_startshut
q_startuptype
......@@ -93,12 +98,15 @@ v_invest_MIP
q_genRamp
q_rampUpLimit
q_rampDownLimit
q_rampUpDown
q_rampSlack
q_outputRatioFixed
q_outputRatioConstrained
q_conversionDirectInputOutput
q_conversionSOS2InputIntermediate
q_conversionSOS2Constraint
q_conversionSOS2IntermediateOutput
q_fuelUseLimit
// Energy Transfer
q_transfer
......@@ -114,7 +122,18 @@ v_invest_MIP
q_boundStateMaxDiff
q_boundCyclic
// Policy
q_inertiaMin
q_instantaneousShareMax
q_constrainedOnlineMultiUnit
q_capacityMargin
q_constrainedCapMultiUnit
q_emissioncap
q_energyShareMax
q_energyShareMin
* Dummy variables
vq_gen
vq_resDemand
vq_resMissing
v_stateSlack
......@@ -34,11 +34,11 @@ Sets
// General Time Structure
t_start, // First time step for the start of simulation
t_jump, // Number of time steps realized with each solve
t_horizon, // Length of the simulation horizon (central forecast)
t_horizon, // Length of the simulation horizon in time steps (central forecast)
t_end, // Last time step of the simulation
loadPoint, // load advanced basis; 0 = no basis, 1 = all solves, 2 = first solve
savePoint, // save advanced basis; 0 = no basis, 1 = all solves, 2 = first solve
intervalEnd, // End index of a time step interval
loadPoint, // Load advanced basis; 0 = no basis, 1 = latest solve, 2 = all solves, 3 = first solve
savePoint, // Save advanced basis; 0 = no basis, 1 = latest solve, 2 = all solves, 3 = first solve
intervalEnd, // Last time step in the block of intervals with the same length
intervalLength, // Number of time steps aggregated within interval
IntervalInHours, // Length of one time step in hours
......@@ -53,7 +53,8 @@ Sets
// Features
t_reserveLength, // Length of reserve provision horizon in time steps
t_aggregate, // Unit aggregation threshold time index
results_t_start // time period where results outputting starts
t_omitTrajectories, // Threshold time index for omitting start-up and shutdown trajectories
results_t_start // Time index where results outputting starts
/
// Solve info
......@@ -141,8 +142,6 @@ Sets
/ hot, warm /
cost_consumption "Startup cost or startup fuel consumption"
/ cost, consumption /
unit_capacity "Unit or capacity based parameter"
/ unit, capacity / // Is capacity needed anymore?
// Other Features
feature "Set of optional model features" /
......@@ -212,8 +211,8 @@ Sets
* --- Parameter Data Related Sets ---------------------------------------------
param_gn "Possible parameters for grid, node" /
selfDischargeLoss "Self discharge rate of the node [MW/v_state]"
energyStoredPerUnitOfState "A possible unit conversion if v_state uses something else than MWh"
selfDischargeLoss "Self discharge rate of the node (MW/[v_state])"
energyStoredPerUnitOfState "A possible unit conversion if v_state uses something else than MWh (MWh/[v_state])"
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"
......@@ -245,15 +244,15 @@ param_gnBoundaryProperties "Properties that can be set for the different boundar
/
param_gnn "Set of possible data parameters for grid, node, node (nodal interconnections)" /
transferCap "Transfer capacity limits"
transferCapBidirectional "Total bidirectional transfer capacity limit"
transferCap "Transfer capacity limits (MW)"
transferCapBidirectional "Total bidirectional transfer capacity limit (MW)"
transferLoss "Transfer losses"
diffCoeff "Coefficients for energy diffusion between nodes"
boundStateMaxDiff "Maximum difference of node state pairs"
diffCoeff "Coefficients for energy diffusion between nodes (MW/[v_state])"
boundStateMaxDiff "Maximum difference of node state pairs ([v_state])"
transferCapInvLimit "Capacity limit for investments (MW)"
investMIP "Choice of making integer investment instead of continous investment (MW versus number of links)"
investMIP "A flag to make integer investment instead of continous investment (MW versus number of links)"
unitSize "Size of one link for integer investments (MW)"
invCost "Investment cost (€/MW)"
invCost "Investment cost (EUR/MW)"
annuity "Investment annuity"
/
......@@ -262,41 +261,42 @@ param_gnu "Set of possible data parameters for grid, node, unit" /
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)"
maxRampUp "Speed to ramp up (p.u. / min)"
maxRampDown "Speed to ramp down (p.u. / min)"
rampUpCost "Wear and tear cost of ramping up (€/MW)"
rampDownCost "Wear and tear cost of ramping down (€/MW)"
maxGenCap "Maximum output capacity investment (MW)"
maxConsCap "Maximum loading capacity investment (MW)"
minGenCap "Minimum output capacity investment (MW)"
minConsCap "Minimum loading capacity investment (MW)"
upperLimitCapacityRatio "Ratio of the upper limit of the node state and the unit capacity investment"
unitSizeGen "Output capacity of one unit for integer investments (MW)"
unitSizeCons "Loading capacity of one unit for integer investments (MW)"
unitSizeTot "Sum of output and loading capacity of one unit (MW)"
unitSizeGenNet "Output minus loading capacity of one unit (MW)"
invCosts "Investment costs (€/MW)"
maxRampUp "Speed to ramp up (p.u./min)"
maxRampDown "Speed to ramp down (p.u./min)"
rampUpCost "Wear and tear cost of ramping up (EUR/MW)" // redundant
rampDownCost "Wear and tear cost of ramping down (EUR/MW)" // redundant
upperLimitCapacityRatio "Ratio of the upper limit of the node state and the unit capacity investment ([v_state]/MW)"
unitSizeGen "Output capacity of one subunit for integer investments (MW)"
unitSizeCons "Loading capacity of one subunit for integer investments (MW)"
unitSizeTot "Sum of output and loading capacity of one subunit (MW)"
invCosts "Investment costs (EUR/MW)"
annuity "Investment annuity factor"
fomCosts "Fixed operation and maintenance costs (€/MW/a)"
fomCosts "Fixed operation and maintenance costs (EUR/MW/a)"
inertia "Inertia of the unit (s)"
unitSizeMVA "Generator MVA rating (MVA)"
unitSizeMVA "Generator MVA rating of one subunit (MVA)"
/
param_gnuBoundaryProperties "Properties that can be set for the different boundaries" /
rampLimit "Maximum ramp speed (p.u./min)"
rampCost "Wear and tear cost of ramping up (EUR/MW)"
/
param_unit "Set of possible data parameters for units" /
unitCount "Number of subunits if aggregated"
outputCapacityTotal "Output capacity of the unit, calculated by summing all the outputs together by default, unless defined in data"
unitOutputCapacityTotal "Output capacity of the unit, calculated by summing all the unit output sizes together by default"
unitOutputCapacityTotal "Output capacity of the unit, calculated by summing all the subunit output sizes together by default"
availability "Availability of given energy conversion technology (p.u.)"
omCosts "Variable operation and maintenance costs (€/MWh)"
startCostCold "Variable start-up costs for cold starts excluding fuel costs (€/MW)"
startCostWarm "Variable start-up costs for warm starts excluding fuel costs (€/MW)"
startCostHot "Variable start-up costs for hot starts excluding fuel costs (€/MW)"
omCosts "Variable operation and maintenance costs (EUR/MWh)"
startCostCold "Variable start-up costs for cold starts excluding fuel costs (EUR/MW)"
startCostWarm "Variable start-up costs for warm starts excluding fuel costs (EUR/MW)"
startCostHot "Variable start-up costs for hot starts excluding fuel costs (EUR/MW)"
startFuelConsCold "Consumption of start-up fuel per cold subunit started up (MWh_fuel/MW)"
startFuelConsWarm "Consumption of start-up fuel per warm subunit started up (MWh_fuel/MW)"
startFuelConsHot "Consumption of start-up fuel per hot subunit started up (MWh_fuel/MW)"
startColdAfterXhours "Offline hours after which the start-up will be a cold start (h)"
startWarmAfterXhours "Offline hours after which the start-up will be a warm start (h)"
rampSpeedToMinLoad "Ramping speed from start-up to minimum load (p.u. / min.)"
rampSpeedToMinLoad "Ramping speed from start-up to minimum load (p.u./min)"
rampSpeedFromMinLoad "Ramping speed from shutdown decision to zero load (p.u./min)"
minOperationHours "Minimum operation time (h), prevents shutdown after startup until the defined amount of time has passed"
minShutdownHours "Minimum shut down time (h), prevents starting up again after the defined amount of time has passed"
SO2 "SO2 emissions (tonne per MWh_fuel)"
......@@ -306,10 +306,10 @@ param_unit "Set of possible data parameters for units" /
eff00 * eff12 "Efficiency of the unit to convert input to output/intermediate product"
opFirstCross "The operating point where the real efficiency curve and approximated efficiency curve cross"
op00 * op12 "Right border of the efficiency point"
level1 * level9 "Level of simplification in the part-load efficiency representation"
useTimeseries "Uses time series form input for unit parameters whenever possible"
section "Possibility to define a no load fuel use for units with zero minimum output"
investMIP "Choice of making integer investment instead of continous investment (number of units versus MW)"
level1 * level9 "Level of simplification in the part-load efficiency representation"
useTimeseries "A flag to use time series form input for unit parameters whenever possible"
investMIP "A flag to make integer investment instead of continous investment"
maxUnitCount "Maximum number of units when making integer investments"
minUnitCount "Minimum number of units when making integer investments"
/
......@@ -321,8 +321,8 @@ param_fuel "Parameters for fuels" /
/
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"
maxFuelCons "Maximum absolute fuel consumption in a unit - not used for start-up fuels"
maxFuelFraction "Maximum share of a fuel in the consumption mix - exact share for start-up fuels"
/
param_policy "Set of possible data parameters for grid, node, regulation" /
......
......@@ -46,11 +46,11 @@ Sets
unit_investLP(unit) "Units with continuous investments allowed"
unit_investMIP(unit) "Units with integer investments allowed"
* --- Nodes -----------------------------------------------------------------
* --- Nodes -------------------------------------------------------------------
node_spill(node) "Nodes that can spill; used to remove v_spill variables where not relevant"
flowNode(flow, node) "Nodes with flows"
* --- Sets bounding geography and units -------------------------------------
* --- Sets bounding geography and units ---------------------------------------
gn(grid, node) "Grids and their nodes"
* NOTE! Should it be possible to permit time-series form upper or lower bounds on states? If so, then gn() needs rethinking.
gn2n(grid, node, node) "All (directional) transfer links between nodes in specific energy grids"
......@@ -72,9 +72,9 @@ Sets
restypeDirection(restype, up_down) "Different combinations of reserve types and directions"
restypeDirectionNode(restype, up_down, node) "Nodes with reserve requirements"
nuRescapable(restype, up_down, node, unit) "Units capable and available to provide particular reserves"
restypeReleasedForRealization(restype) "Reserve types that are released for the realized time periods"
restypeReleasedForRealization(restype) "Reserve types that are released for the realized time intervals"
* --- Sets to define time, forecasts and samples -----------------------------------------------
* --- Sets to define time, forecasts and samples ------------------------------
$$include 'input/timeAndSamples.inc'
m(mType) "model(s) in use"
t_full(t) "Full set of time steps in the current model"
......@@ -87,32 +87,36 @@ Sets
tt_forecast(t) "Temporary subset for time steps used for forecast updating during solve loop"
mf(mType, f) "Forecasts present in the models"
ms(mType, s) "Samples present in the models"
mstStart(mType, s, t) "Start point of samples"
ft(f, t) "Combination of forecasts and time periods in the current model"
mst_start(mType, s, t) "Start point of samples"
mst_end(mType, s, t) "Last point of samples"
ft(f, t) "Combination of forecasts and t:s in the current solve"
ft_realized(f, t) "Realized ft"
ft_realizedNoReset(f, t) "Full set of realized ft, facilitates calculation of results"
mft_nReserves(node, restype, mType, f, t) "Forecast-time steps locked due to committing reserves ahead of time."
mft(mType, f, t) "Combination of forecasts and time periods in the models"
msf(mType, s, f) "Model, sample, forecast"
msft(mType, s, f, t) "Combination of samples, forecasts and time periods in the models"
mft_start(mType, f, t) "Start point of simulation"
mft_nReserves(node, restype, mType, f, t) "Combination of forecasts and t:s locked due to committing reserves ahead of time."
mft(mType, f, t) "Combination of forecasts and t:s in the current model solve"
msf(mType, s, f) "Combination of samples and forecasts in the models"
msft(mType, s, f, t) "Combination of samples, forecasts and t:s in the current model solve"
mft_start(mType, f, t) "Start point of the current model solve"
mf_realization(mType, f) "fRealization of the forecasts"
mf_central(mType, f) "Forecast that continues as sample(s) after the forecast horizon ends"
ms_initial(mType, s) "Sample that presents the realized/forecasted period"
ms_central(mType, s) "Sample that continues the central forecast after the forecast horizon ends"
mft_lastSteps(mType, f, t) "Last time period of the model"
mft_lastSteps(mType, f, t) "Last interval of the current model solve"
modelSolves(mType, t) "when different models are to be solved"
f_solve(f) "forecasts in the model to be solved next"
t_latestForecast(t) "t for the latest forecast that is available"
* --- Sets used for the changing unit aggregation and efficiency approximations
uft(unit, f, t) "Active units on time steps, enables aggregation of units for later time periods"
uft_online(unit, f, t) "Units with any online and startup variables on time steps"
uft_onlineLP(unit, f, t) "Units with LP online and startup variables on time steps"
uft_onlineMIP(unit, f, t) "Units with MIP online and startup variables on time steps"
nuft(node, unit, f, t) "Enables aggregation of nodes and units for later time periods"
gnuft(grid, node, unit, f, t) "Enables aggregation of nodes and units for later time periods"
uft(unit, f, t) "Active units on intervals, enables aggregation of units for later intervals"
uft_online(unit, f, t) "Units with any online and startup variables on intervals"
uft_onlineLP(unit, f, t) "Units with LP online and startup variables on intervals"
uft_onlineMIP(unit, f, t) "Units with MIP online and startup variables on intervals"
uft_startupTrajectory(unit, f, t) "Units with start-up trajectories on intervals"
uft_shutdownTrajectory(unit, f, t) "Units with shutdown trajectories on intervals"
nuft(node, unit, f, t) "Enables aggregation of nodes and units for later intervals"
gnuft(grid, node, unit, f, t) "Enables aggregation of nodes and units for later intervals"
gnuft_ramp(grid, node, unit, f, t) "Units with ramp requirements or costs"
gnuft_rampCost(grid, node, unit, slack, f, t) "Units with ramp costs"
suft(effSelector, unit, f, t) "Selecting conversion efficiency equations"
sufts(effSelector, unit, f, t, effSelector) "Selecting conversion efficiency equations"
effGroup(effSelector) "Group name for efficiency selector set, e.g. DirectOff and Lambda02"
......@@ -120,14 +124,14 @@ Sets
effLevelGroupUnit(effLevel, effSelector, unit) "What efficiency selectors are in use for each unit at each efficiency representation level"
effGroupSelectorUnit(effSelector, unit, effSelector) "Group name for efficiency selector set, e.g. Lambda02 contains Lambda01 and Lambda02"
* --- Sets used for grouping of units, transfer links, nodes, etc.
* --- Sets used for grouping of units, transfer links, nodes, etc. ------------
group "A group of units, transfer links, nodes, etc."
uGroup(unit, group) "Units in particular groups"
gnuGroup(grid, node, unit, group) "Grid, node, unit combinations in particular groups"
gnuGroup(grid, node, unit, group) "Combination of grids, nodes and units in particular groups"
gn2nGroup(grid, node, node, group) "Transfer links in particular groups"
gnGroup(grid, node, group) "Grid, node combinations in particular gngroups"
gnGroup(grid, node, group) "Combination of grids and nodes in particular groups"
* --- Set of timeseries that will be read from files between solves
* --- Set of timeseries that will be read from files between solves -----------
mTimeseries_loop_read(mType, timeseries) "Those time series that will be read between solves"
;
* Set initial values to avoid errors when checking if parameter contents have been loaded from input data
......@@ -152,6 +156,7 @@ alias(effLambda, effLambda_);
alias(lambda, lambda_, lambda__);
alias(op, op_, op__);
alias(eff, eff_, eff__);
alias(fuel, fuel_);
*if(active('rampSched'),
......
......@@ -25,7 +25,7 @@ Scalars
lastCounter "last member in use of the general counter"
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"
* intervalLength "Length of the interval to be calculated, considering end of modelling period" // redundant
currentForecastLength "Length of the forecast in the curren solve, minimum of unchanging and decreasing forecast lengths"
count "General counter"
count_lambda, count_lambda2 "Counter for lambdas"
......@@ -49,6 +49,7 @@ Parameters
p_gnBoundaryPropertiesForStates(grid, node, param_gnBoundaryTypes, param_gnBoundaryProperties) "Properties of different state boundaries and limits"
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"
p_gnuBoundaryProperties(grid, node, unit, slack, param_gnuBoundaryProperties) "Properties for unit boundaries where energy type matters"
p_unit(unit, *) "Unit data where energy type does not matter"
p_nReserves(node, restype, *) "Data defining the reserve rules in each node"
p_nuReserves(node, unit, restype, *) "Reserve provision data for units"
......@@ -61,11 +62,15 @@ Parameters
p_effUnit(effSelector, unit, effSelector, *) "Data for piece-wise linear efficiency blocks"
p_effGroupUnit(effSelector, unit, *) "Unit data specific to a efficiency group (e.g. left border of the unit)"
p_uNonoperational(unit, starttype, min_max) "Non-operational time after being shut down before start up"
p_uStartup(unit, starttype, cost_consumption, unit_capacity) "Startup cost and fuel consumption"
p_uStartup(unit, starttype, cost_consumption) "Startup cost and fuel consumption"
p_u_maxOutputInLastRunUpInterval(unit) "Maximum output in the last interval for the run-up to min. load (p.u.)"
p_u_runUpTimeIntervals(unit) "Time intervals required for the run-up phase"
p_u_runUpTimeIntervalsCeil(unit) "Ceiling of time intervals required for the run-up phase"
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.)"
p_u_runUpTimeIntervals(unit) "Time steps required for the run-up phase"
p_u_runUpTimeIntervalsCeil(unit) "Ceiling of time steps required for the run-up phase"
p_ut_runUp(unit, t) "Output for the time steps where the unit is being started up to the minimum load (minimum output in the last interval) (p.u.)"
p_u_maxOutputInFirstShutdownInterval(unit) "Maximum output in the first interval for the shutdown from min. load (p.u.)"
p_u_shutdownTimeIntervals(unit) "Time steps required for the shutdown phase"
p_u_shutdownTimeIntervalsCeil(unit) "Ceiling of time steps required for the shutdown phase"
p_ut_shutdown(unit, t) "Output for the time steps where the unit is being shut down from the minimum load (minimum output in the first interval) (p.u.)"
// Time dependent unit & fuel parameters
ts_unit(unit, *, f, t) "Time dependent unit data, where energy type doesn't matter"
ts_effUnit(effSelector, unit, effSelector, *, f, t) "Time dependent data for piece-wise linear efficiency blocks"
......@@ -87,46 +92,47 @@ Scalar p_sWeightSum "Sum of sample weights";
* --- Model structure ---------------------------------------------------------
Parameters
// Time displacement arrays
dt(t) "Displacement needed to reach the previous time period (in time periods)"
dt_noReset(t) "Displacement needed to reach the previous time period (in time periods)"
dt(t) "Displacement needed to reach the previous time interval (in time steps)"
dt_noReset(t) "Displacement needed to reach the previous time interval (in time steps)"
dt_circular(t) "Circular t displacement if the time series data is not long enough to cover the model horizon"
dt_next(t) "Displacement needed to reach the next time period (in time periods)"
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"
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"
dt_next(t) "Displacement needed to reach the next time interval (in time steps)"
dtt(t, t) "Displacement needed to reach any previous time interval (in time steps)"
dt_toStartup(unit, t) "Displacement from the current time interval to the time interval where the unit was started up in case online variable changes from 0 to 1 (in time steps)"
dt_toShutdown(unit, t) "Displacement from the current time interval to the time interval where the shutdown phase began in case generation becomes 0 (in time steps)"
dt_starttypeUnitCounter(starttype, unit, counter) "Displacement needed to account for starttype constraints (in time steps)"
dt_downtimeUnitCounter(unit, counter) "Displacement needed to account for downtime constraints (in time steps)"
dt_uptimeUnitCounter(unit, counter) "Displacement needed to account for uptime constraints (in time steps)"
// Forecast displacement arrays
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."
df_nReserves(node, restype, f, t) "Forecast index displacement needed to reach the realized forecast when committing reserves"
// Temporary displacement arrays
ddt(t) "Temporary time displacement array."
ddf(f, t) "Temporary forecast displacement array."
ddf_(f, t) "Temporary forecast displacement array."
ddt(t) "Temporary time displacement array"
ddf(f, t) "Temporary forecast displacement array"
ddf_(f, t) "Temporary forecast displacement array"
// Other
p_slackDirection(slack) "+1 for upward slacks and -1 for downward slacks"
tForecastNext(mType) "When the next forecast will be availalbe (ord time)"
aaSolveInfo(mType, t, solveInfoAttributes) "stores information about the solve status"
msStart(mType, s) "Start point of samples"
msEnd(mType, s) "End point of samples"
tForecastNext(mType) "When the next forecast will be available (ord time)"
aaSolveInfo(mType, t, solveInfoAttributes) "Stores information about the solve status"
msStart(mType, s) "Start point of samples: first time step in the sample"
msEnd(mType, s) "End point of samples: first time step not in the sample"
tOrd(t) "Order of t"
;
* --- Stochastic data parameters ----------------------------------------------
Parameters
ts_influx(grid, node, f, t) "External power inflow/outflow during a time period (MWh/h)"
ts_cf(flow, node, f, t) "Available capacity factor time series (per unit)"
ts_reserveDemand(restype, up_down, node, f, t) "Reserve demand in region in the time period/slice (MW)"
ts_nodeState(grid, node, param_gnBoundaryTypes, f, t) "Fix the states of a node according to time-series form exogenous input"
ts_fuelPriceChange(fuel, t) "Initial fuel price and consequent changes in fuel price (/MWh)"
ts_influx(grid, node, f, t) "External power inflow/outflow during a time step (MWh/h)"
ts_cf(flow, node, f, t) "Available capacity factor time series (p.u.)"
ts_reserveDemand(restype, up_down, node, f, t) "Reserve demand in region in the time step (MW)"
ts_nodeState(grid, node, param_gnBoundaryTypes, f, t) "Fix the states of a node according to time-series form exogenous input ([v_state])"
ts_fuelPriceChange(fuel, t) "Initial fuel price and consequent changes in fuel price (EUR/MWh)"
ts_fuelPrice(fuel, t) "Fuel price time series (EUR/MWh)"
ts_unavailability(unit, t) "Unavailability of a unit in the time period/slice (p.u.)"
ts_unavailability(unit, t) "Unavailability of a unit in the time step (p.u.)"
// Aliases used for interval aggregation
// Aliases used for intervals (time step aggregation)
ts_influx_(grid, node, f, t)
ts_influx_temp(grid, node, f, t)
ts_cf_(flow, node, f, t)
......@@ -138,7 +144,7 @@ Parameters
* --- Other time dependent parameters -----------------------------------------
Parameters
p_storageValue(grid, node, t) "Value of stored something at the end of a time step"
p_stepLength(mType, f, t) "Length of a time step (t)"
p_stepLengthNoReset(mType, f, t) "Length of a time step (t)"
p_stepLength(mType, f, t) "Length of an interval in hours"