Commit efe2ca3d authored by jussi ikäheimo's avatar jussi ikäheimo
Browse files

Merge remote-tracking branch 'gitlab/dev' into storagemapping

parents 3b311cb3 3f0e463b
......@@ -265,6 +265,7 @@ param_gnn "Set of possible data parameters for grid, node, node (nodal interconn
variableTransCost "Variable cost applied to transfers (EUR/MW)"
availability "Availability of the interconnection (p.u.)"
useTimeseriesAvailability "A flag to use time series form input for availability"
useTimeseriesLoss "A flag to use time series form input for transferLoss"
/
param_gnu "Set of possible data parameters for grid, node, unit" /
......
......@@ -22,7 +22,7 @@ $offtext
* If input_file excel has been set in the command line arguments, then Gdxxrw will be run to convert the Excel into a GDX file
* using the sheet defined by input_excel_index command line argument (default: 'INDEX').
$if set input_file_excel $call 'gdxxrw Input="%input_dir%/%input_file_excel%" Output="%input_dir%/%input_file_gdx%" Index=%input_excel_index%! %input_excel_checkdate%'
$ife %system.errorlevel%>0 $abort gdxxrw failed!
$ife %system.errorlevel%>0 $abort gdxxrw failed! Check that your input Excel is valid and that your file path and file name are correct.
* --input_file_gdx=nameOfInputFile.gdx for input_file_gdx in input_dir
$ifthen exist '%input_dir%/%input_file_gdx%'
......@@ -30,65 +30,71 @@ $ifthen exist '%input_dir%/%input_file_gdx%'
* --input_file_gdx=ABSOLUTE/PATH/nameOfInputFile.gdx for input_file_gdx not in input_dir
$elseif exist '%input_file_gdx%'
$$gdxin '%input_file_gdx%'
$else
$$goto no_input_gdx
$endif
$$loaddcm grid
$$loaddc node
$$loaddc flow
$$loaddc unittype
$$loaddc unit
$$loaddc unitUnittype
$$loaddc unit_fail
$$loaddc commodity
$$loaddc unitUnitEffLevel
$$loaddc effLevelGroupUnit
$$loaddc group
$$loaddc p_gn
$$loaddc p_gnn
$$loaddc ts_gnn
$$loaddc p_gnu_io
$$loaddc p_gnuBoundaryProperties
$$loaddc p_unit
$$loaddc ts_unit
$$loaddc p_unitConstraint
$$loaddc p_unitConstraintNode
$$loaddc restype
$$loaddc restypeDirection
$$loaddc restypeReleasedForRealization
$$loaddc restype_inertia
$$loaddc p_groupReserves
$$loaddc p_groupReserves3D
$$loaddc p_groupReserves4D
$$loaddc p_gnuReserves
$$loaddc p_gnnReserves
$$loaddc p_gnuRes2Res
$$loaddc ts_reserveDemand
$$loaddc p_gnBoundaryPropertiesForStates
$$loaddc p_uStartupfuel
$$loaddc flowUnit
$$loaddc emission
$$loaddc p_nEmission
$$loaddc ts_cf
*$$loaddc p_price // Disabled for convenience, see line 278-> ("Determine Fuel Price Representation")
$$loaddc ts_priceChange
$$loaddc ts_influx
$$loaddc ts_node
$$loaddc p_s_discountFactor
$$loaddc t_invest
$$loaddc utAvailabilityLimits
$$loaddc p_storageValue
$$loaddc ts_storageValue
$$loaddc uGroup
$$loaddc gnuGroup
$$loaddc gn2nGroup
$$loaddc gnGroup
$$loaddc sGroup
$$loaddc p_groupPolicy
$$loaddc p_groupPolicyUnit
$$loaddc p_groupPolicyEmission
$$loaddc gnss_bound
$$loaddc uss_bound
$$gdxin
$loaddcm grid
$loaddc node
$loaddc flow
$loaddc unittype
$loaddc unit
$loaddc unitUnittype
$loaddc unit_fail
$loaddc commodity
$loaddc unitUnitEffLevel
$loaddc effLevelGroupUnit
$loaddc group
$loaddc p_gn
$loaddc p_gnn
$loaddc ts_gnn
$loaddc p_gnu_io
$loaddc p_gnuBoundaryProperties
$loaddc p_unit
$loaddc ts_unit
$loaddc p_unitConstraint
$loaddc p_unitConstraintNode
$loaddc restype
$loaddc restypeDirection
$loaddc restypeReleasedForRealization
$loaddc restype_inertia
$loaddc p_groupReserves
$loaddc p_groupReserves3D
$loaddc p_groupReserves4D
$loaddc p_gnuReserves
$loaddc p_gnnReserves
$loaddc p_gnuRes2Res
$loaddc ts_reserveDemand
$loaddc p_gnBoundaryPropertiesForStates
$loaddc p_uStartupfuel
$loaddc flowUnit
$loaddc emission
$loaddc p_nEmission
$loaddc ts_cf
*$loaddc p_price // Disabled for convenience, see line 278-> ("Determine Fuel Price Representation")
$loaddc ts_priceChange
$loaddc ts_influx
$loaddc ts_node
$loaddc p_s_discountFactor
$loaddc t_invest
$loaddc utAvailabilityLimits
$loaddc p_storageValue
$loaddc ts_storageValue
$loaddc uGroup
$loaddc gnuGroup
$loaddc gn2nGroup
$loaddc gnGroup
$loaddc sGroup
$loaddc p_groupPolicy
$loaddc p_groupPolicyUnit
$loaddc p_groupPolicyEmission
$loaddc gnss_bound
$loaddc uss_bound
$gdxin
$label no_input_gdx
* Read changes to inputdata through gdx files (e.g. node2.gdx, unit2.gdx, unit3.gdx) - allows scenarios through Sceleton Titan Excel files.
$include 'inc/1e_scenChanges.gms'
......@@ -406,9 +412,11 @@ flowNode(flow, node)${ sum((f, t), ts_cf(flow, node, f, t))
* --- Timeseries parameters for node-node connections -------------------------
// Nodes with flows
// Transfer links with time series enabled for certain parameters
gn2n_timeseries(grid, node, node_, 'availability')${p_gnn(grid, node, node_, 'useTimeseriesAvailability')}
= yes;
gn2n_timeseries(grid, node, node_, 'transferLoss')${p_gnn(grid, node, node_, 'useTimeseriesLoss')}
= yes;
* =============================================================================
* --- Reserves Sets & Parameters ----------------------------------------------
......
......@@ -57,16 +57,21 @@ q_balance(gn(grid, node), msft(m, s, f, t)) // Energy/power balance dynamics sol
// Controlled energy transfer, applies when the current node is on the left side of the connection
- sum(gn2n_directional(grid, node, node_),
+ (1 - p_gnn(grid, node, node_, 'transferLoss')) // Reduce transfer losses
* v_transfer(grid, node, node_, s, f, t)
+ p_gnn(grid, node, node_, 'transferLoss') // Add transfer losses back if transfer is from this node to another node
* v_transferRightward(grid, node, node_, s, f, t)
+ v_transfer(grid, node, node_, s, f, t)
+ [
+ p_gnn(grid, node_, node, 'transferLoss')${not gn2n_timeseries(grid, node_, node, 'transferLoss')}
+ ts_gnn_(grid, node_, node, 'transferLoss', f, t)${gn2n_timeseries(grid, node_, node, 'transferLoss')}
] // Reduce transfer losses if transfer is from another node to this node
* v_transferLeftward(grid, node, node_, s, f, t)
) // END sum(node_)
// Controlled energy transfer, applies when the current node is on the right side of the connection
+ sum(gn2n_directional(grid, node_, node),
+ v_transfer(grid, node_, node, s, f, t)
- p_gnn(grid, node_, node, 'transferLoss') // Reduce transfer losses if transfer is from another node to this node
- [
+ p_gnn(grid, node_, node, 'transferLoss')${not gn2n_timeseries(grid, node_, node, 'transferLoss')}
+ ts_gnn_(grid, node_, node, 'transferLoss', f, t)${gn2n_timeseries(grid, node_, node, 'transferLoss')}
] // Reduce transfer losses if transfer is from another node to this node
* v_transferRightward(grid, node_, node, s, f, t)
) // END sum(node_)
......@@ -127,14 +132,20 @@ q_resDemand(restypeDirectionGroup(restype, up_down, group), sft(s, f, t))
and not gnGroup(grid, node_, group)
and restypeDirectionGridNodeNode(restype, up_down, grid, node_, node)
},
+ (1 - p_gnn(grid, node_, node, 'transferLoss') )
+ [1
- p_gnn(grid, node_, node, 'transferLoss')${not gn2n_timeseries(grid, node_, node, 'transferLoss')}
- ts_gnn_(grid, node_, node, 'transferLoss', f, t)${gn2n_timeseries(grid, node_, node, 'transferLoss')}
]
* v_resTransferRightward(restype, up_down, grid, node_, node, s, f+df_reserves(grid, node_, restype, f, t), t) // Reserves from another node - reduces the need for reserves in the node
) // END sum(gn2n_directional)
+ sum(gn2n_directional(grid, node, node_)${ gnGroup(grid, node, group)
and not gnGroup(grid, node_, group)
and restypeDirectionGridNodeNode(restype, up_down, grid, node_, node)
},
+ (1 - p_gnn(grid, node, node_, 'transferLoss') )
+ [1
- p_gnn(grid, node_, node, 'transferLoss')${not gn2n_timeseries(grid, node_, node, 'transferLoss')}
- ts_gnn_(grid, node_, node, 'transferLoss', f, t)${gn2n_timeseries(grid, node_, node, 'transferLoss')}
]
* v_resTransferLeftward(restype, up_down, grid, node, node_, s, f+df_reserves(grid, node_, restype, f, t), t) // Reserves from another node - reduces the need for reserves in the node
) // END sum(gn2n_directional)
......@@ -216,14 +227,20 @@ q_resDemandLargestInfeedUnit(restypeDirectionGroup(restype, 'up', group), unit_f
and not gnGroup(grid, node_, group)
and restypeDirectionGridNodeNode(restype, 'up', grid, node_, node)
},
+ (1 - p_gnn(grid, node_, node, 'transferLoss') )
+ [1
- p_gnn(grid, node_, node, 'transferLoss')${not gn2n_timeseries(grid, node_, node, 'transferLoss')}
- ts_gnn_(grid, node_, node, 'transferLoss', f, t)${gn2n_timeseries(grid, node_, node, 'transferLoss')}
]
* v_resTransferRightward(restype, 'up', grid, node_, node, s, f+df_reserves(grid, node_, restype, f, t), t) // Reserves from another node - reduces the need for reserves in the node
) // END sum(gn2n_directional)
+ sum(gn2n_directional(grid, node, node_)${ gnGroup(grid, node, group)
and not gnGroup(grid, node_, group)
and restypeDirectionGridNodeNode(restype, 'up', grid, node_, node)
},
+ (1 - p_gnn(grid, node, node_, 'transferLoss') )
+ [1
- p_gnn(grid, node_, node, 'transferLoss')${not gn2n_timeseries(grid, node_, node, 'transferLoss')}
- ts_gnn_(grid, node_, node, 'transferLoss', f, t)${gn2n_timeseries(grid, node_, node, 'transferLoss')}
]
* v_resTransferLeftward(restype, 'up', grid, node, node_, s, f+df_reserves(grid, node_, restype, f, t), t) // Reserves from another node - reduces the need for reserves in the node
) // END sum(gn2n_directional)
......@@ -334,10 +351,16 @@ q_rateOfChangeOfFrequencyTransfer(group, gn2n(grid, node_, node_fail), sft(s, f,
// Loss of import due to potential interconnector failures
+ p_gnn(grid, node_fail, node_, 'portion_of_transfer_to_reserve')
* v_transferRightward(grid, node_fail, node_, s, f, t)${gn2n_directional(grid, node_fail, node_)}
* (1 - p_gnn(grid, node_fail, node_, 'transferLoss') )
* [1
- p_gnn(grid, node_fail, node_, 'transferLoss')${not gn2n_timeseries(grid, node_fail, node_, 'transferLoss')}
- ts_gnn_(grid, node_fail, node_, 'transferLoss', f, t)${gn2n_timeseries(grid, node_fail, node_, 'transferLoss')}
]
+ p_gnn(grid, node_, node_fail, 'portion_of_transfer_to_reserve')
* v_transferLeftward(grid, node_, node_fail, s, f, t)${gn2n_directional(grid, node_, node_fail)}
* (1 - p_gnn(grid, node_, node_fail, 'transferLoss') )
* [1
- p_gnn(grid, node_fail, node_, 'transferLoss')${not gn2n_timeseries(grid, node_fail, node_, 'transferLoss')}
- ts_gnn_(grid, node_fail, node_, 'transferLoss', f, t)${gn2n_timeseries(grid, node_fail, node_, 'transferLoss')}
]
// Loss of export due to potential interconnector failures
+ p_gnn(grid, node_fail, node_, 'portion_of_transfer_to_reserve')
* v_transferLeftward(grid, node_fail, node_, s, f, t)${gn2n_directional(grid, node_fail, node_)}
......@@ -394,7 +417,10 @@ q_resDemandLargestInfeedTransfer(restypeDirectionGroup(restype, up_down, group),
and not (sameas(node_, node_left) and sameas(node, node_right)) // excluding the failing link
and restypeDirectionGridNodeNode(restype, up_down, grid, node_, node)
},
+ (1 - p_gnn(grid, node_, node, 'transferLoss') )
+ [1
- p_gnn(grid, node_, node, 'transferLoss')${not gn2n_timeseries(grid, node_, node, 'transferLoss')}
- ts_gnn_(grid, node_, node, 'transferLoss', f, t)${gn2n_timeseries(grid, node_, node, 'transferLoss')}
]
* v_resTransferRightward(restype, up_down, grid, node_, node, s, f+df_reserves(grid, node_, restype, f, t), t)
) // END sum(gn2n_directional)
+ sum(gn2n_directional(grid, node, node_)${ gnGroup(grid, node, group)
......@@ -402,7 +428,10 @@ q_resDemandLargestInfeedTransfer(restypeDirectionGroup(restype, up_down, group),
and not (sameas(node, node_left) and sameas(node_, node_right)) // excluding the failing link
and restypeDirectionGridNodeNode(restype, up_down, grid, node_, node)
},
+ (1 - p_gnn(grid, node, node_, 'transferLoss') )
+ [1
- p_gnn(grid, node_, node, 'transferLoss')${not gn2n_timeseries(grid, node_, node, 'transferLoss')}
- ts_gnn_(grid, node_, node, 'transferLoss', f, t)${gn2n_timeseries(grid, node_, node, 'transferLoss')}
]
* v_resTransferLeftward(restype, up_down, grid, node, node_, s, f+df_reserves(grid, node_, restype, f, t), t)
) // END sum(gn2n_directional)
......@@ -2866,14 +2895,22 @@ q_instantaneousShareMax(group, sft(s, f, t))
and gnGroup(grid, node, group)
and not gnGroup(grid, node_, group)
},
+ v_transferLeftward(grid, node, node_, s, f, t) * (1-p_gnn(grid, node, node_, 'transferLoss'))
+ v_transferLeftward(grid, node, node_, s, f, t)
* [1
- p_gnn(grid, node_, node, 'transferLoss')${not gn2n_timeseries(grid, node_, node, 'transferLoss')}
- ts_gnn_(grid, node_, node, 'transferLoss', f, t)${gn2n_timeseries(grid, node_, node, 'transferLoss')}
]
) // END sum(gn2n_directional)
+ sum(gn2n_directional(grid, node_, node)${ gn2nGroup(grid, node_, node, group)
and gnGroup(grid, node, group)
and not gnGroup(grid, node_, group)
},
+ v_transferRightward(grid, node_, node, s, f, t) * (1-p_gnn(grid, node_, node, 'transferLoss'))
+ v_transferRightward(grid, node_, node, s, f, t)
* [1
- p_gnn(grid, node_, node, 'transferLoss')${not gn2n_timeseries(grid, node_, node, 'transferLoss')}
- ts_gnn_(grid, node_, node, 'transferLoss', f, t)${gn2n_timeseries(grid, node_, node, 'transferLoss')}
]
) // END sum(gn2n_directional)
=L=
......@@ -3000,14 +3037,20 @@ q_capacityMargin(gn(grid, node), sft(s, f, t))
+ sum(gn2n_directional(grid, node_, node),
+ v_transfer(grid, node_, node, s, f, t)
- v_transferRightward(grid, node_, node, s, f, t)
* p_gnn(grid, node_, node, 'transferLoss')
* [
+ p_gnn(grid, node_, node, 'transferLoss')${not gn2n_timeseries(grid, node_, node, 'transferLoss')}
+ ts_gnn_(grid, node_, node, 'transferLoss', f, t)${gn2n_timeseries(grid, node_, node, 'transferLoss')}
]
) // END sum(gn2n_directional)
// Transfer from node
- sum(gn2n_directional(grid, node, node_),
+ v_transfer(grid, node, node_, s, f, t)
+ v_transferLeftward(grid, node, node_, s, f, t)
* p_gnn(grid, node, node_, 'transferLoss')
* [
+ p_gnn(grid, node_, node, 'transferLoss')${not gn2n_timeseries(grid, node_, node, 'transferLoss')}
+ ts_gnn_(grid, node_, node, 'transferLoss', f, t)${gn2n_timeseries(grid, node_, node, 'transferLoss')}
]
) // END sum(gn2n_directional)
// Diffusion to node
......@@ -3285,14 +3328,20 @@ q_ReserveShareMax(group, restypeDirectionGroup(restype, up_down, group_), sft(s,
and not gnGroup(grid, node_, group_)
and restypeDirectionGridNodeNode(restype, up_down, grid, node_, node)
},
+ (1 - p_gnn(grid, node_, node, 'transferLoss') )
+ [1
- p_gnn(grid, node_, node, 'transferLoss')${not gn2n_timeseries(grid, node_, node, 'transferLoss')}
- ts_gnn_(grid, node_, node, 'transferLoss', f, t)${gn2n_timeseries(grid, node_, node, 'transferLoss')}
]
* v_resTransferRightward(restype, up_down, grid, node_, node, s, f+df_reserves(grid, node_, restype, f, t), t) // Reserves from another node - reduces the need for reserves in the node
) // END sum(gn2n_directional)
+ sum(gn2n_directional(grid, node, node_)${ gnGroup(grid, node, group_)
and not gnGroup(grid, node_, group_)
and restypeDirectionGridNodeNode(restype, up_down, grid, node_, node)
},
+ (1 - p_gnn(grid, node, node_, 'transferLoss') )
+ [1
- p_gnn(grid, node_, node, 'transferLoss')${not gn2n_timeseries(grid, node_, node, 'transferLoss')}
- ts_gnn_(grid, node_, node, 'transferLoss', f, t)${gn2n_timeseries(grid, node_, node, 'transferLoss')}
]
* v_resTransferLeftward(restype, up_down, grid, node, node_, s, f+df_reserves(grid, node_, restype, f, t), t) // Reserves from another node - reduces the need for reserves in the node
) // END sum(gn2n_directional)
......
Markdown is supported
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