Commit c3e9b043 authored by Niina Helistö's avatar Niina Helistö
Browse files

Cleaning up comments, descriptions etc.

parent 505a0554
......@@ -34,9 +34,9 @@ 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
intervalEnd, // End index of a time step interval
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
......@@ -138,8 +138,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" /
......@@ -194,8 +192,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"
......@@ -227,99 +225,94 @@ 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"
transferLoss "Transfer losses"
diffCoeff "Coefficients for energy diffusion between nodes"
boundStateMaxDiff "Maximum difference of node state pairs"
transferCap "Transfer capacity limits (MW)"
transferCapBidirectional "Total bidirectional transfer capacity limit (MW)"
transferLoss "Transfer losses"
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)"
unitSize "Size of one link for integer investments (MW)"
invCost "Investment cost (€/MW)"
annuity "Investment annuity"
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 (EUR/MW)"
annuity "Investment annuity"
/
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)"
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)"
annuity "Investment annuity factor"
fomCosts "Fixed operation and maintenance costs (€/MW/a)"
inertia "Inertia of the unit (s)"
unitSizeMVA "Generator MVA rating (MVA)"
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)"
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 (EUR/MW/a)"
inertia "Inertia of the unit (s)"
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 (€/MW)"
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"
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"
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)"
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 (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.)"
rampSpeedFromMinLoad "Ramping speed from shutdown decision to zero load (p.u. / min.)"
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)"
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)"
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"
opFirstCross "The operating point where the real efficiency curve and approximated efficiency curve cross"
op00 * op12 "Right border of the efficiency point"
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"
opFirstCross "The operating point where the real efficiency curve and approximated efficiency curve cross"
op00 * op12 "Right border of the efficiency point"
section "Possibility to define a no load fuel use for units with zero minimum output"
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)"
maxUnitCount "Maximum number of units when making integer investments"
minUnitCount "Minimum number of units when making integer investments"
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"
/
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"
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"
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" /
emissionTax "Emission tax (EUR/tonne)"
emissionTax "Emission tax (EUR/tonne)"
update_frequency "Frequency of updating reserve contributions"
gate_closure "Number of timesteps ahead of dispatch that reserves are fixed"
gate_closure "Number of timesteps ahead of dispatch that reserves are fixed"
use_time_series "Flag for using time series data. !!! REDUNDANT WITH useTimeseries, PENDING REMOVAL !!!"
reserveContribution "Reliability parameter of reserve provisions"
emissionCap "Emission limit (tonne)"
emissionCap "Emission limit (tonne)"
instantaneousShareMax "Maximum instantaneous share of generation and import from a particular group of units and transfer links"
energyShareMax "Maximum energy share of generation from a particular group of units"
energyShareMin "Minimum energy share of generation from a particular group of units"
......
......@@ -85,30 +85,30 @@ Sets
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"
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"
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"
......@@ -121,9 +121,9 @@ Sets
* --- 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 initial values to avoid errors when checking if parameter contents have been loaded from input data
Option clear = modelSolves;
......
......@@ -59,15 +59,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 intervals required for the shutdown phase"
p_u_shutdownTimeIntervalsCeil(unit) "Ceiling of time intervals required for the shutdown phase"
p_ut_shutdown(unit, t) "Output for the time intervals where the unit is being shut down from the minimum load (minimum output in the first interval) (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"
......@@ -89,47 +89,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_toShutdown(unit, t) "Displacement from the current time period to the time period where the shutdown phase was started in case generation becomes 0"
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)
......@@ -145,7 +145,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"
p_stepLengthNoReset(mType, f, t) "Length of an interval in hours - includes also lengths of previously realized intervals"
;
Option clear = p_storageValue; // Required for whatever reason.
......@@ -24,7 +24,7 @@ Parameters
* --- Cost Results ------------------------------------------------------------
// Total Objective Function
r_totalObj "Total operating cost over the simulation (€)" / 0 /
r_totalObj "Total operating cost over the simulation (EUR)" / 0 /
// Unit Operational Cost Components
r_gnuVOMCost(grid, node, unit, f, t) "Variable O&M costs for energy outputs (MEUR)"
......@@ -52,13 +52,13 @@ Parameters
* --- Node Results ------------------------------------------------------------
// State variable results, required for model structure
r_state(grid, node, f, t) "Node state at timestep t"
r_state(grid, node, f, t) "Node state at time step t"
// State variable slack values
r_stateSlack(grid, node, slack, f, t) "Note state slack at timestep t"
r_stateSlack(grid, node, slack, f, t) "Note state slack at time step t"
// Energy transfer and spill variable results
r_transfer(grid, from_node, to_node, f, t) "Energy transfer (MW)"
r_spill(grid, node, f, t) "Spill of energy from storage node during time period (MWh)"
r_spill(grid, node, f, t) "Spill of energy from storage node during time interval (MWh)"
// Interesting node related results
r_balanceMarginal(grid, node, f, t) "Marginal values of the q_balance equation"
......@@ -100,9 +100,9 @@ Parameters
* --- Unit Online State Results -----------------------------------------------
// Online results required for model structure
r_online(unit, f, t) "Units online"
r_startup(unit, starttype, f, t) "Units started up"
r_shutdown(unit, f, t) "Units shut down"
r_online(unit, f, t) "Sub-units online"
r_startup(unit, starttype, f, t) "Sub-units started up"
r_shutdown(unit, f, t) "Sub-units shut down"
// Interesting unit online results
r_uTotalOnline(unit) "Total online sub-unit-hours of units over the simulation"
......@@ -128,7 +128,7 @@ Parameters
* --- Investment Results ------------------------------------------------------
// Interesting investment results
r_unitInvestment(unit) "Number/amount of invested units"
r_unitInvestment(unit) "Number/amount of invested sub-units"
* --- Dummy Variable Results --------------------------------------------------
......
......@@ -109,8 +109,6 @@ gnu(grid, node, unit)${ p_gnu(grid, node, unit, 'maxGen')
or p_gnu(grid, node, unit, 'maxCons')
or p_gnu(grid, node, unit, 'unitSizeGen')
or p_gnu(grid, node, unit, 'unitSizeCons')
or p_gnu(grid, node, unit, 'maxGenCap')
or p_gnu(grid, node, unit, 'maxConsCap')
}
= yes;
// Reduce the grid dimension
......@@ -118,12 +116,10 @@ nu(node, unit) = sum(grid, gnu(grid, node, unit));
// Separation of gnu into inputs and outputs
gnu_output(gnu(grid, node, unit))${ p_gnu(grid, node, unit, 'maxGen')
or p_gnu(grid, node, unit, 'maxGenCap')
or p_gnu(grid, node, unit, 'unitSizeGen')
}
= yes;
gnu_input(gnu(grid, node, unit))${ p_gnu(grid, node, unit, 'maxCons')
or p_gnu(grid, node, unit, 'maxConsCap')
or p_gnu(grid, node, unit, 'unitSizeCons')
}
= yes;
......@@ -208,8 +204,6 @@ p_gnu(grid, node, unit, 'unitSizeCons')${ p_gnu(grid, node, unit, 'maxCons')
= p_gnu(grid, node, unit, 'maxCons') / p_unit(unit, 'unitCount'); // If maxCons and unitCount are given, calculate unitSizeCons based on them.
p_gnu(grid, node, unit, 'unitSizeTot')
= p_gnu(grid, node, unit, 'unitSizeGen') + p_gnu(grid, node, unit, 'unitSizeCons');
p_gnu(grid, node, unit, 'unitSizeGenNet')
= p_gnu(grid, node, unit, 'unitSizeGen') - p_gnu(grid, node, unit, 'unitSizeCons');
// Determine unit startup parameters based on data
// Hot startup parameters
......@@ -217,10 +211,10 @@ p_uNonoperational(unitStarttype(unit, 'hot'), 'min')
= p_unit(unit, 'minShutdownHours');
p_uNonoperational(unitStarttype(unit, 'hot'), 'max')
= p_unit(unit, 'startWarmAfterXhours');
p_uStartup(unitStarttype(unit, 'hot'), 'cost', 'unit')
p_uStartup(unitStarttype(unit, 'hot'), 'cost')
= p_unit(unit, 'startCostHot')
* sum(gnu_output(grid, node, unit), p_gnu(grid, node, unit, 'unitSizeGen'));
p_uStartup(unitStarttype(unit, 'hot'), 'consumption', 'unit')
p_uStartup(unitStarttype(unit, 'hot'), 'consumption')
= p_unit(unit, 'startFuelConsHot')
* sum(gnu_output(grid, node, unit), p_gnu(grid, node, unit, 'unitSizeGen'));
......@@ -229,27 +223,27 @@ p_uNonoperational(unitStarttype(unit, 'warm'), 'min')
= p_unit(unit, 'startWarmAfterXhours');
p_uNonoperational(unitStarttype(unit, 'warm'), 'max')
= p_unit(unit, 'startColdAfterXhours');
p_uStartup(unitStarttype(unit, 'warm'), 'cost', 'unit')
p_uStartup(unitStarttype(unit, 'warm'), 'cost')
= p_unit(unit, 'startCostWarm')
* sum(gnu_output(grid, node, unit), p_gnu(grid, node, unit, 'unitSizeGen'));
p_uStartup(unitStarttype(unit, 'warm'), 'consumption', 'unit')
p_uStartup(unitStarttype(unit, 'warm'), 'consumption')
= p_unit(unit, 'startFuelConsWarm')
* sum(gnu_output(grid, node, unit), p_gnu(grid, node, unit, 'unitSizeGen'));
// Cold startup parameters
p_uNonoperational(unitStarttype(unit, 'cold'), 'min')
= p_unit(unit, 'startColdAfterXhours');
p_uStartup(unit, 'cold', 'cost', 'unit')
p_uStartup(unit, 'cold', 'cost')
= p_unit(unit, 'startCostCold')
* sum(gnu_output(grid, node, unit), p_gnu(grid, node, unit, 'unitSizeGen'));
p_uStartup(unit, 'cold', 'consumption', 'unit')
p_uStartup(unit, 'cold', 'consumption')
= p_unit(unit, 'startFuelConsCold')
* sum(gnu_output(grid, node, unit), p_gnu(grid, node, unit, 'unitSizeGen'));
// Determine unit emission costs
p_unitFuelEmissionCost(unit_fuel, fuel, emission)${ sum(param_fuel, uFuel(unit_fuel, param_fuel, fuel)) }
= p_fuelEmission(fuel, emission)
/ 1e3 // NOTE!!! Conversion to t/MWh from t/GWh in data
/ 1e3 // NOTE!!! Conversion to t/MWh from kg/MWh in data
* sum(gnu_output(grid, node, unit_fuel),
+ p_gnPolicy(grid, node, 'emissionTax', emission) // Weighted average of emission costs from different output energy types
* [ + p_gnu(grid, node, unit_fuel, 'maxGen')
......
......@@ -17,33 +17,33 @@ $offtext
Free variable v_obj "Total operating cost (monetary unit)";
Free variables
v_gen(grid, node, unit, f, t) "Energy generation or consumption in a time step (MW)"
v_gen(grid, node, unit, f, t) "Energy generation or consumption in an interval (MW)"
v_state(grid, node, f, t) "State variable for nodes that maintain a state (MWh, unless modified by energyStoredPerUnitOfState and diffCoeff parameters)"
v_genRamp(grid, node, unit, f, t) "Change in energy generation or consumption over a time step (MW/h)"
v_transfer(grid, node, node, f, t) "Average electricity transmission level from node to node during time period/slice (MW)"
v_genRamp(grid, node, unit, f, t) "Change in energy generation or consumption over an interval (MW/h)"
v_transfer(grid, node, node, f, t) "Average electricity transmission level from node to node during an interval (MW)"
;
Integer variables
v_online_MIP(unit, f, t) "Number of units online for units with unit commitment restrictions"
v_invest_MIP(unit, t) "Number of invested generation units"
v_online_MIP(unit, f, t) "Number of sub-units online for units with unit commitment restrictions"
v_invest_MIP(unit, t) "Number of invested sub-units"
v_investTransfer_MIP(grid, node, node, t) "Number of invested transfer links"
;
SOS2 variables
v_sos2(unit, f, t, effSelector) "Intermediate lambda variable for SOS2 based piece-wise linear efficiency curve"
;
Positive variables
v_fuelUse(fuel, unit, f, t) "Fuel use of a unit during time period (MWh_fuel)"
v_startup(unit, starttype, f, t) "Unit started up after/during the time period/slice (p.u.)"
v_shutdown(unit, f, t) "Capacity shut down after/during the time period/slice (MW)"
v_genRampUpDown(grid, node, unit, slack, f, t) "Change in energy generation or consumption over a time step, separated into different 'slacks' (MW/h)"
v_spill(grid, node, f, t) "Spill of energy from storage node during time period (MWh)"
v_transferRightward(grid, node, node, f, t) "Average electricity transmission level from the first node to the second node during time period/slice (MW)"
v_transferLeftward(grid, node, node, f, t) "Average electricity transmission level from the second node to the first node during time period/slice (MW)"
v_fuelUse(fuel, unit, f, t) "Fuel use of a unit during an interval (MWh_fuel)"
v_startup(unit, starttype, f, t) "Sub-units started up after/during an interval (p.u.)"
v_shutdown(unit, f, t) "Sub-units shut down after/during an interval (p.u.)"
v_genRampUpDown(grid, node, unit, slack, f, t) "Change in energy generation or consumption over an interval, separated into different 'slacks' (MW/h)"
v_spill(grid, node, f, t) "Spill of energy from storage node during an interval (MWh)"
v_transferRightward(grid, node, node, f, t) "Average electricity transmission level from the first node to the second node during an interval (MW)"
v_transferLeftward(grid, node, node, f, t) "Average electricity transmission level from the second node to the first node during an interval (MW)"
v_resTransferRightward(restype, up_down, node, node, f, t) "Electricity transmission capacity from the first node to the second node reserved for providing reserves (MW)"
v_resTransferLeftward(restype, up_down, node, node, f, t) "Electricity transmission capacity from the second node to the first node reserved for providing reserves (MW)"
v_reserve(restype, up_down, node, unit, f, t) "Unit capacity reserved for providing reserve of specific type (MW)"
v_investTransfer_LP(grid, node, node, t) "Invested transfer capacity (MW)"
v_online_LP(unit, f, t) "Number of units online for 'units' with unit commitment restrictions (LP variant)"
v_invest_LP(unit, t) "Amount of invested generation 'units' (LP variant)"
v_online_LP(unit, f, t) "Number of sub-units online for 'units' with unit commitment restrictions (LP variant)"
v_invest_LP(unit, t) "Number of invested 'sub-units' (LP variant)"
;
* --- Feasibility control -----------------------------------------------------
......
......@@ -48,12 +48,12 @@ equations
// Unit Operation
q_maxDownward(mType, grid, node, unit, f, t) "Downward commitments will not undercut power plant minimum load constraints or maximum elec. consumption"
q_maxUpward(mType, grid, node, unit, f, t) "Upward commitments will not exceed maximum available capacity or consumed power"
q_startshut(mType, unit, f, t) "Online cap. now minus online cap in the previous time step is equal to started up minus shut down capacity"
q_startshut(mType, unit, f, t) "Online capacity now minus online capacity in the previous interval is equal to started up minus shut down capacity"
q_startuptype(mType, starttype, unit, f, t) "Startup type depends on the time the unit has been non-operational"
q_onlineOnStartUp(unit, f, t) "Unit must be online after starting up"
q_offlineAfterShutdown(unit, f, t) "Unit must be offline after shutting down"
q_onlineLimit(mType, unit, f, t) "Number of online units limited for units with startup constraints and investment possibility"
q_onlineMinUptime(mType, unit, f, t) "Unit must stay operational if it has started up during the previous minOperationHours hours"
q_onlineLimit(mType, unit, f, t) "Number of online units limited for units with startup constraints, minimum down time, or investment possibility"
q_onlineMinUptime(mType, unit, f, t) "Number of online units constrained for units with minimum up time"
q_genRamp(mType, s, grid, node, unit, f, t) "Record the ramps of units with ramp restricitions or costs"
q_rampUpLimit(mType, s, grid, node, unit, f, t) "Up ramping limited for units"
q_rampDownLimit(mType, s, grid, node, unit, f, t) "Down ramping limited for units"
......
......@@ -83,11 +83,11 @@ q_obj ..
+ sum(unitStarttype(unit, starttype),
+ v_startup(unit, starttype, f+df_central(f,t), t) // Cost of starting up
* [ // Startup variable costs
+ p_uStartup(unit, starttype, 'cost', 'unit')
+ p_uStartup(unit, starttype, 'cost')
// Start-up fuel and emission costs
+ sum(uFuel(unit, 'startup', fuel),
+ p_uStartup(unit, starttype, 'consumption', 'unit') //${ not unit_investLP(unit) } WHY THIS CONDITIONAL WOULD BE NEEDED?
+ p_uStartup(unit, starttype, 'consumption')
* [
+ ts_fuelPrice_(fuel, t)
+ sum(emission, // Emission taxes of startup fuel use
......
This diff is collapsed.
......@@ -48,11 +48,11 @@ loop(m,
* sum(unitStarttype(unit, starttype),
+ r_startup(unit, starttype, f, t)
* [ // Startup VOM
+ p_uStartup(unit, starttype, 'cost', 'unit')
+ p_uStartup(unit, starttype, 'cost')
// Startup fuel consumption and emissions
+ sum(uFuel(unit, 'startup', fuel),
+ p_uStartup(unit, starttype, 'consumption', 'unit')
+ p_uStartup(unit, starttype, 'consumption')
* [ // Fuel price
+ ts_fuelPrice(fuel, t)
// Emission costs
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment