Currently, the ChangeTable object can be used to scale existing {plants, branches, dclines, demand} via scale_plant_capacity, scale_branch_capacity, scale_dcline_capacity, and scale_demand, and add new energy storage devices via add_storage_capacity. We want the capability to be able to add new HVDC branches, in the same way that we add new storage devices.
For adding new storage devices, we pass a dictionary of {bus: energy storage power capacity, ...}. All other information to define a battery's operation is filled in with default values or ratios, via logic within the Scaler object (although this may change, see #111). I envision the interface to adding HVDC lines to be similar, where the minimal set of information to pass would be each new branch's bidirectional capacity (MW), 'from' bus and 'to' bus, e.g.
new_dclines = [
{'capacity': 1000, 'from': 867, 'to': 5309},
{'capacity': 500, 'from': 123, 'to': 4567},
...
]
scenario.state.builder.change_table.add_dcline(new_dclines)
would result in the dcline DataFrame attribute of the Grid object getting two new rows representing two new DC lines in the network. New lines can be full of zeros except:
- dcline_id (would be determined automatically by looking at the number of pre-existing DC lines)
- from_bus_id
- to_bus_id
- status (1)
- Pf: 'capacity' field
- Pt: 0.98 * 'capacity' field
- Pmin: -1 * 'capacity' field
- Pmax: 'capacity' field
As far as I know, the Pf and Pt parameters are only used for storing the results of a powerflow calculation and perhaps as a warm-start for calculating powerflow, so they are included only to be consistent with the rest of the data in dcline.csv.
The implementation within the Scaler (or replacement object) should be substantially more simple than the implementation of the add_storage_capacity, since we only need to add rows to a single pre-existing DataFrame, where for storage we had to modify several different tables.
Currently, the ChangeTable object can be used to scale existing {plants, branches, dclines, demand} via
scale_plant_capacity,scale_branch_capacity,scale_dcline_capacity, andscale_demand, and add new energy storage devices viaadd_storage_capacity. We want the capability to be able to add new HVDC branches, in the same way that we add new storage devices.For adding new storage devices, we pass a dictionary of {bus: energy storage power capacity, ...}. All other information to define a battery's operation is filled in with default values or ratios, via logic within the Scaler object (although this may change, see #111). I envision the interface to adding HVDC lines to be similar, where the minimal set of information to pass would be each new branch's bidirectional capacity (MW), 'from' bus and 'to' bus, e.g.
would result in the
dclineDataFrame attribute of theGridobject getting two new rows representing two new DC lines in the network. New lines can be full of zeros except:As far as I know, the Pf and Pt parameters are only used for storing the results of a powerflow calculation and perhaps as a warm-start for calculating powerflow, so they are included only to be consistent with the rest of the data in
dcline.csv.The implementation within the Scaler (or replacement object) should be substantially more simple than the implementation of the
add_storage_capacity, since we only need to add rows to a single pre-existing DataFrame, where for storage we had to modify several different tables.