Add electric storage size class#564
Conversation
Only adds size class in inputs processing, other code modifications pending.
Bill-Becker
left a comment
There was a problem hiding this comment.
Great progress. I left some comments and requests. Can you also check the results and proforma calcs to see if we need to update anything there? Please also add a test to validate that the size_class -> cost params are being properly assigned. Let's also work toward updating battery costs to the new ATB values (zero for constant, 4% O&M, scale 2025 values from 2023 dollars to 2025 dollars using CPI - I can show you what we did last year).
| end | ||
|
|
||
| """ | ||
| get_pv_cost_params(; installed_cost_per_kw, size_class, tech_sizes_for_cost_curve, |
There was a problem hiding this comment.
update docstring for storage instead of pv
There was a problem hiding this comment.
This still has "pv" and related argument names in it.
| min_kw::Real = 0.0, | ||
| max_kw::Real = 1.0e9, | ||
| electric_load_annual_peak::Real = 0.0, | ||
| electric_load_average_peak::Real = 0.0 |
There was a problem hiding this comment.
remove "_peak" assuming this is just the average load
| { | ||
| "size_class": 1, | ||
| "name": "Residential", | ||
| "kw_tech_sizes_for_cost_curve": [0, 40], |
There was a problem hiding this comment.
let's come up with a better name since we don't consider storage a "tech", and we're not doing a cost curve with this array for storage. How about "size_class_bounds"?
| defaults[matching_default] | ||
| end | ||
|
|
||
| # STEP 2: Handle installed costs |
There was a problem hiding this comment.
We should be able to remove/avoid all this validation and separate handling for scalar versus array cost parameters, since we're not allowing an array for storage.
There was a problem hiding this comment.
Yup, I corrected those instances already.
|
|
||
| @info s.installed_cost_per_kw, s.size_class, s.electric_load_annual_peak, s.electric_load_average_peak | ||
|
|
||
| installed_cost_per_kw, installed_cost_per_kwh, installed_cost_constant, size_class, |
There was a problem hiding this comment.
The O&M cost % is included in the defaults .json, implying that it changes by size_class, but we're not assigning it by size_class here. I'm fine to take it out of that file and just used a fixed default of 2.5% (will become 4% from the new ATB). ATB uses the same % for all three of their size_classes
There was a problem hiding this comment.
Makes sense, since the degradation wear and tear will vary by cycling and not size class.
There was a problem hiding this comment.
The (new) 2025 ATB has 4% as the O&M as a fraction of total installed cost, so we should update that as well (does not change with size class) from the current 2.5%. I will comment on the actual variable to change.
There was a problem hiding this comment.
@rathod-b Here's the link to the input (default value and in docstring) to be changed to 0.04, from 0.025:
| storage_dict["off_grid_flag"] = settings.off_grid_flag | ||
|
|
||
| electric_load_annual_peak = maximum(electric_load.loads_kw) | ||
| electric_load_average_peak = sum(electric_load.loads_kw) / Int(8760*settings.time_steps_per_hour) |
There was a problem hiding this comment.
Why do we need to make sure it's converting to Int here?
There was a problem hiding this comment.
No reason for it, updated.
bug fix for existing tests
Update costs and descriptions
fix broken test
Bugfix and update to latest costs used
| { | ||
| "size_class": 1, | ||
| "name": "Residential", | ||
| "size_class_kw_bounds": [0, 40], |
There was a problem hiding this comment.
Small nitpick, but I'd prefer to keep the units at the end, so size_class_bounds_kw.
Update default costs to use 2025 costs converted to 2025$ instead of 2026 costs converted to 2025$. Also change size class names per feedback.
Bill-Becker
left a comment
There was a problem hiding this comment.
Need to update OM to 4% from 2.5% per the new ATB - we'll also have to update this in the API.
| end | ||
|
|
||
| # TODO combine functions to load size class defaults for eligible techs. | ||
| # Load PV default size class data from JSON file |
There was a problem hiding this comment.
Comment on line 565 references "PV"
|
|
||
| @info s.installed_cost_per_kw, s.size_class, s.electric_load_annual_peak, s.electric_load_average_peak | ||
|
|
||
| installed_cost_per_kw, installed_cost_per_kwh, installed_cost_constant, size_class, |
There was a problem hiding this comment.
The (new) 2025 ATB has 4% as the O&M as a fraction of total installed cost, so we should update that as well (does not change with size class) from the current 2.5%. I will comment on the actual variable to change.
|
|
||
| @info s.installed_cost_per_kw, s.size_class, s.electric_load_annual_peak, s.electric_load_average_peak | ||
|
|
||
| installed_cost_per_kw, installed_cost_per_kwh, installed_cost_constant, size_class, |
There was a problem hiding this comment.
@rathod-b Here's the link to the input (default value and in docstring) to be changed to 0.04, from 0.025:
|
@rathod-b I just merged develop into this branch and resolved the conflicts (not much), but I'll let you make the BESS O&M default cost update. There's one test that is explicitly checking for the 0.025, so we either need to hard-code that input or change the expected fraction to 0.04 in the test. |
Looks like merging develop broke the battery size class tests, and a couple others. let me know if you need any help debugging why. |
Co-authored-by: Copilot <[email protected]>
…tch with REopt-solved size Co-authored-by: Copilot <[email protected]>
I updated this. |
Co-authored-by: Copilot <[email protected]>
No description provided.