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 ...@@ -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)" variableTransCost "Variable cost applied to transfers (EUR/MW)"
availability "Availability of the interconnection (p.u.)" availability "Availability of the interconnection (p.u.)"
useTimeseriesAvailability "A flag to use time series form input for availability" 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" / param_gnu "Set of possible data parameters for grid, node, unit" /
......
...@@ -22,7 +22,7 @@ $offtext ...@@ -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 * 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'). * 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%' $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 * --input_file_gdx=nameOfInputFile.gdx for input_file_gdx in input_dir
$ifthen exist '%input_dir%/%input_file_gdx%' $ifthen exist '%input_dir%/%input_file_gdx%'
...@@ -30,65 +30,71 @@ $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 * --input_file_gdx=ABSOLUTE/PATH/nameOfInputFile.gdx for input_file_gdx not in input_dir
$elseif exist '%input_file_gdx%' $elseif exist '%input_file_gdx%'
$$gdxin '%input_file_gdx%' $$gdxin '%input_file_gdx%'
$else
$$goto no_input_gdx
$endif $endif
$$loaddcm grid $loaddcm grid
$$loaddc node $loaddc node
$$loaddc flow $loaddc flow
$$loaddc unittype $loaddc unittype
$$loaddc unit $loaddc unit
$$loaddc unitUnittype $loaddc unitUnittype
$$loaddc unit_fail $loaddc unit_fail
$$loaddc commodity $loaddc commodity
$$loaddc unitUnitEffLevel $loaddc unitUnitEffLevel
$$loaddc effLevelGroupUnit $loaddc effLevelGroupUnit
$$loaddc group $loaddc group
$$loaddc p_gn $loaddc p_gn
$$loaddc p_gnn $loaddc p_gnn
$$loaddc ts_gnn $loaddc ts_gnn
$$loaddc p_gnu_io $loaddc p_gnu_io
$$loaddc p_gnuBoundaryProperties $loaddc p_gnuBoundaryProperties
$$loaddc p_unit $loaddc p_unit
$$loaddc ts_unit $loaddc ts_unit
$$loaddc p_unitConstraint $loaddc p_unitConstraint
$$loaddc p_unitConstraintNode $loaddc p_unitConstraintNode
$$loaddc restype $loaddc restype
$$loaddc restypeDirection $loaddc restypeDirection
$$loaddc restypeReleasedForRealization $loaddc restypeReleasedForRealization
$$loaddc restype_inertia $loaddc restype_inertia
$$loaddc p_groupReserves $loaddc p_groupReserves
$$loaddc p_groupReserves3D $loaddc p_groupReserves3D
$$loaddc p_groupReserves4D $loaddc p_groupReserves4D
$$loaddc p_gnuReserves $loaddc p_gnuReserves
$$loaddc p_gnnReserves $loaddc p_gnnReserves
$$loaddc p_gnuRes2Res $loaddc p_gnuRes2Res
$$loaddc ts_reserveDemand $loaddc ts_reserveDemand
$$loaddc p_gnBoundaryPropertiesForStates $loaddc p_gnBoundaryPropertiesForStates
$$loaddc p_uStartupfuel $loaddc p_uStartupfuel
$$loaddc flowUnit $loaddc flowUnit
$$loaddc emission $loaddc emission
$$loaddc p_nEmission $loaddc p_nEmission
$$loaddc ts_cf $loaddc ts_cf
*$$loaddc p_price // Disabled for convenience, see line 278-> ("Determine Fuel Price Representation") *$loaddc p_price // Disabled for convenience, see line 278-> ("Determine Fuel Price Representation")
$$loaddc ts_priceChange $loaddc ts_priceChange
$$loaddc ts_influx $loaddc ts_influx
$$loaddc ts_node $loaddc ts_node
$$loaddc p_s_discountFactor $loaddc p_s_discountFactor
$$loaddc t_invest $loaddc t_invest
$$loaddc utAvailabilityLimits $loaddc utAvailabilityLimits
$$loaddc p_storageValue $loaddc p_storageValue
$$loaddc ts_storageValue $loaddc ts_storageValue
$$loaddc uGroup $loaddc uGroup
$$loaddc gnuGroup $loaddc gnuGroup
$$loaddc gn2nGroup $loaddc gn2nGroup
$$loaddc gnGroup $loaddc gnGroup
$$loaddc sGroup $loaddc sGroup
$$loaddc p_groupPolicy $loaddc p_groupPolicy
$$loaddc p_groupPolicyUnit $loaddc p_groupPolicyUnit
$$loaddc p_groupPolicyEmission $loaddc p_groupPolicyEmission
$$loaddc gnss_bound $loaddc gnss_bound
$$loaddc uss_bound $loaddc uss_bound
$$gdxin
$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. * 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' $include 'inc/1e_scenChanges.gms'
...@@ -406,9 +412,11 @@ flowNode(flow, node)${ sum((f, t), ts_cf(flow, node, f, t)) ...@@ -406,9 +412,11 @@ flowNode(flow, node)${ sum((f, t), ts_cf(flow, node, f, t))
* --- Timeseries parameters for node-node connections ------------------------- * --- 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')} gn2n_timeseries(grid, node, node_, 'availability')${p_gnn(grid, node, node_, 'useTimeseriesAvailability')}
= yes; = yes;
gn2n_timeseries(grid, node, node_, 'transferLoss')${p_gnn(grid, node, node_, 'useTimeseriesLoss')}
= yes;
* ============================================================================= * =============================================================================
* --- Reserves Sets & Parameters ---------------------------------------------- * --- Reserves Sets & Parameters ----------------------------------------------
......
...@@ -57,16 +57,21 @@ q_balance(gn(grid, node), msft(m, s, f, t)) // Energy/power balance dynamics sol ...@@ -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 // Controlled energy transfer, applies when the current node is on the left side of the connection
- sum(gn2n_directional(grid, node, node_), - sum(gn2n_directional(grid, node, node_),
+ (1 - p_gnn(grid, node, node_, 'transferLoss')) // Reduce transfer losses + v_transfer(grid, node, node_, s, f, t)
* 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 + p_gnn(grid, node_, node, 'transferLoss')${not gn2n_timeseries(grid, node_, node, 'transferLoss')}
* v_transferRightward(grid, node, node_, s, f, t) + 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_) ) // END sum(node_)
// Controlled energy transfer, applies when the current node is on the right side of the connection // Controlled energy transfer, applies when the current node is on the right side of the connection
+ sum(gn2n_directional(grid, node_, node), + sum(gn2n_directional(grid, node_, node),
+ v_transfer(grid, node_, node, s, f, t) + 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) * v_transferRightward(grid, node_, node, s, f, t)
) // END sum(node_) ) // END sum(node_)
...@@ -127,14 +132,20 @@ q_resDemand(restypeDirectionGroup(restype, up_down, group), sft(s, f, t)) ...@@ -127,14 +132,20 @@ q_resDemand(restypeDirectionGroup(restype, up_down, group), sft(s, f, t))
and not gnGroup(grid, node_, group) and not gnGroup(grid, node_, group)
and restypeDirectionGridNodeNode(restype, up_down, grid, node_, node) 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 * 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) ) // END sum(gn2n_directional)
+ sum(gn2n_directional(grid, node, node_)${ gnGroup(grid, node, group) + sum(gn2n_directional(grid, node, node_)${ gnGroup(grid, node, group)
and not gnGroup(grid, node_, group) and not gnGroup(grid, node_, group)
and restypeDirectionGridNodeNode(restype, up_down, grid, node_, node) 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 * 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) ) // END sum(gn2n_directional)
...@@ -216,14 +227,20 @@ q_resDemandLargestInfeedUnit(restypeDirectionGroup(restype, 'up', group), unit_f ...@@ -216,14 +227,20 @@ q_resDemandLargestInfeedUnit(restypeDirectionGroup(restype, 'up', group), unit_f
and not gnGroup(grid, node_, group) and not gnGroup(grid, node_, group)
and restypeDirectionGridNodeNode(restype, 'up', grid, node_, node) 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 * 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) ) // END sum(gn2n_directional)
+ sum(gn2n_directional(grid, node, node_)${ gnGroup(grid, node, group) + sum(gn2n_directional(grid, node, node_)${ gnGroup(grid, node, group)
and not gnGroup(grid, node_, group) and not gnGroup(grid, node_, group)
and restypeDirectionGridNodeNode(restype, 'up', grid, node_, node) 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 * 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) ) // END sum(gn2n_directional)
...@@ -334,10 +351,16 @@ q_rateOfChangeOfFrequencyTransfer(group, gn2n(grid, node_, node_fail), sft(s, f, ...@@ -334,10 +351,16 @@ q_rateOfChangeOfFrequencyTransfer(group, gn2n(grid, node_, node_fail), sft(s, f,
// Loss of import due to potential interconnector failures // Loss of import due to potential interconnector failures
+ p_gnn(grid, node_fail, node_, 'portion_of_transfer_to_reserve') + 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_)} * 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') + 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)} * 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 // Loss of export due to potential interconnector failures
+ p_gnn(grid, node_fail, node_, 'portion_of_transfer_to_reserve') + 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_)} * 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), ...@@ -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 not (sameas(node_, node_left) and sameas(node, node_right)) // excluding the failing link
and restypeDirectionGridNodeNode(restype, up_down, grid, node_, node) 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) * v_resTransferRightward(restype, up_down, grid, node_, node, s, f+df_reserves(grid, node_, restype, f, t), t)
) // END sum(gn2n_directional) ) // END sum(gn2n_directional)
+ sum(gn2n_directional(grid, node, node_)${ gnGroup(grid, node, group) + sum(gn2n_directional(grid, node, node_)${ gnGroup(grid, node, group)
...@@ -402,7 +428,10 @@ q_resDemandLargestInfeedTransfer(restypeDirectionGroup(restype, up_down, 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 not (sameas(node, node_left) and sameas(node_, node_right)) // excluding the failing link
and restypeDirectionGridNodeNode(restype, up_down, grid, node_, node) 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) * v_resTransferLeftward(restype, up_down, grid, node, node_, s, f+df_reserves(grid, node_, restype, f, t), t)
) // END sum(gn2n_directional) ) // END sum(gn2n_directional)
...@@ -2866,14 +2895,22 @@ q_instantaneousShareMax(group, sft(s, f, t)) ...@@ -2866,14 +2895,22 @@ q_instantaneousShareMax(group, sft(s, f, t))
and gnGroup(grid, node, group) and gnGroup(grid, node, group)
and not 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) ) // END sum(gn2n_directional)
+ sum(gn2n_directional(grid, node_, node)${ gn2nGroup(grid, node_, node, group) + sum(gn2n_directional(grid, node_, node)${ gn2nGroup(grid, node_, node, group)
and gnGroup(grid, node, group) and gnGroup(grid, node, group)
and not 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) ) // END sum(gn2n_directional)
=L= =L=
...@@ -3000,14 +3037,20 @@ q_capacityMargin(gn(grid, node), sft(s, f, t)) ...@@ -3000,14 +3037,20 @@ q_capacityMargin(gn(grid, node), sft(s, f, t))
+ sum(gn2n_directional(grid, node_, node), + sum(gn2n_directional(grid, node_, node),
+ v_transfer(grid, node_, node, s, f, t) + v_transfer(grid, node_, node, s, f, t)
- v_transferRightward(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) ) // END sum(gn2n_directional)
// Transfer from node // Transfer from node
- sum(gn2n_directional(grid, node, node_), - sum(gn2n_directional(grid, node, node_),
+ v_transfer(grid, node, node_, s, f, t) + v_transfer(grid, node, node_, s, f, t)
+ v_transferLeftward(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) ) // END sum(gn2n_directional)
// Diffusion to node // Diffusion to node
...@@ -3285,14 +3328,20 @@ q_ReserveShareMax(group, restypeDirectionGroup(restype, up_down, group_), sft(s, ...@@ -3285,14 +3328,20 @@ q_ReserveShareMax(group, restypeDirectionGroup(restype, up_down, group_), sft(s,
and not gnGroup(grid, node_, group_) and not gnGroup(grid, node_, group_)
and restypeDirectionGridNodeNode(restype, up_down, grid, node_, node) 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 * 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) ) // END sum(gn2n_directional)
+ sum(gn2n_directional(grid, node, node_)${ gnGroup(grid, node, group_) + sum(gn2n_directional(grid, node, node_)${ gnGroup(grid, node, group_)
and not gnGroup(grid, node_, group_) and not gnGroup(grid, node_, group_)
and restypeDirectionGridNodeNode(restype, up_down, grid, node_, node) 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 * 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) ) // 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