Headroom/reserve rate connections#755
Conversation
| ) | ||
|
|
||
| self.add_output( | ||
| "electricity_headroom_sold", |
There was a problem hiding this comment.
I think this naming convention is a little confusing. the current name makes it sound like this is electricity that has already been sold. Maybe electricity_headroom_to_sell or something would make sense?
There was a problem hiding this comment.
I think _to_sell makes sense
jaredthomas68
left a comment
There was a problem hiding this comment.
I think this is fine and could come in with a few changes
| np.testing.assert_array_almost_equal(actual_in, electricity_in) | ||
|
|
||
| # The headroom should be the difference between electricity_in and the rating | ||
| headroom = prob.get_val("grid.electricity_headroom_sold") |
There was a problem hiding this comment.
I think headroom is a good name. Could refer to https://docs.nrel.gov/docs/fy19osti/73590.pdf for discussion of the different forms headroom might take.
| ) | ||
|
|
||
| self.add_output( | ||
| "electricity_headroom_sold", |
There was a problem hiding this comment.
I think _to_sell makes sense
| val=0.0, | ||
| shape=n_timesteps, | ||
| units="kW", | ||
| units=self.commodity_rate_units, |
There was a problem hiding this comment.
The units of electricity_sold needs to be kW because it is interconnected with sell price in the cost model and comes from the same input in the config. That said, you could add the unit conversion in the cost model to make it work.
Headroom/reserve accounting for energy generation and storage
For certain types of analyses, there is value in redundant power generation, where power that could be supplied at short notice but not currently online is valuable if not required.
One major place this becomes very important is for powering large loads like datacenters off the grid, where grid service reliability levels have to be recreated with on-site power.
This PR is an attempt to add "headroom" power outputs, which represent offline power (or other rate flow) capacity that could be used to provide redundancy, peak absorption, etc.
Headroom is different for different technologies: for a grid interconnect, say, it's simply the difference between the rated power output and the current power output.
For a natural gas plant, it's the power in excess of the current output that is limited by either the natural gas supply or the rated output of the capital equipment, whichever is less.
For storage it's a bit more complicated. The internal headroom is:
But then, this internal headroom must have the battery output subtracted (recall: discharge positive, charge negative), since, on one hand, active discharge counts against the capacity & rating that is offline-but-available and, on the other, active charge is excess power generation that could be diverted to power delivery, and therefore represents a form of headroom provided in some sense indirectly by the battery above and beyond its discharge capability.
Section 1: Type of Contribution
Section 2: Draft PR Checklist
TODO:
Type of Reviewer Feedback Requested (on Draft PR)
Structural feedback:
Implementation feedback:
_outvs._soldsuffixes ingridaren't necessarily generalizable in higher levels of abstractionheadroomto describe available but offline rate output from different technologies: is this the right terminology?Other feedback:
N/A
Section 3: General PR Checklist
docs/files are up-to-date, or added when necessaryCHANGELOG.md"A complete thought. [PR XYZ]((https://github.com/NatLabRockies/H2Integrate/pull/XYZ)", where
XYZshould be replaced with the actual number.Section 4: Related Issues
N/A.
Section 5: Impacted Areas of the Software
Section 5.1: New Files
path/to/file.extensionmethod1: What and why something was changed in one sentence or less.Section 5.2: Modified Files
path/to/file.extensionmethod1: What and why something was changed in one sentence or less.Section 6: Additional Supporting Information
Section 7: Test Results, if applicable
Section 8 (Optional): New Model Checklist
docs/developer_guide/coding_guidelines.mdattrsclass to define theConfigto load in attributes for the modelBaseConfigorCostModelBaseConfiginitialize()method,setup()method,compute()methodCostModelBaseClasssupported_models.pycreate_financial_modelinh2integrate_model.pytest_all_examples.pydocs/user_guide/model_overview.mddocs/section<model_name>.mdis added to the_toc.ymlgenerate_class_hierarchy.pyto update the class hierarchy diagram indocs/developer_guide/class_structure.md