Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Change Replacements Treatment #210

Draft
wants to merge 16 commits into
base: develop
Choose a base branch
from
Draft

Conversation

adfarth
Copy link
Collaborator

@adfarth adfarth commented Mar 30, 2023

  • ElectricStorage and Generator have replacement_year inputs. It is assumed that these two technologies can be replaced within the analysis period.
  • Previously, replacement costs were treated as tax deductible. Neither ITC nor MACRS were applied to these costs.
  • Now, we are treating replacement costs are depreciable and are applying the ITC and MACRS to these costs.
  • The following new inputs have been added to ElectricStorage and Generator:
    -- replace_macrs_option_years
    -- replace_macrs_bonus_fraction
    -- replace_total_itc_fraction
  • For Generators, we assume no ITC or MACRS incentives for the upfront cost or replacements
  • For ElectricStorage replacements, we assume that the MACRS bonus depreciation has phased out, that storage qualifies for 5-year depreciation (2025 and onward), and that the ITC remains at 30%.
  • This is all captured in the effective_cost() calculation

TODO:

  • Update CHANGELOG
  • Add tests
  • Update reporting of results (esp. in financial.jl and proforma.jl)
  • Update existing tests once this branch is fully tested
  • Consider changing input names to "replacement" not just "replace"?
  • Also update docs?
  • Check if generator replacement costs apply to total capacity or just new

Note! I haven't looked into tax treatment assumptions built into replacement costs with battery degradation modeling.

@adfarth adfarth added this to the v1.0.0 release milestone Mar 30, 2023
@@ -344,43 +344,48 @@ function cost_curve(tech::AbstractTech, financial::Financial)
itc_unit_basis = (cap_cost_slope[s] + rebate_federal) / (1 - itc)
end

macrs_schedule = [0.0]
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added all of this as in-line conditional statements below

@@ -48,7 +48,7 @@
can_export_beyond_nem_limit = false,
can_curtail::Bool = false,
macrs_option_years::Int = 0,
macrs_bonus_fraction::Real = 1.0,
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure why we previously defaulted this to 1. It got set to 0 anyway (in cost_curve.jl) since macrs_option_years = 0.

@@ -162,6 +175,63 @@ function effective_cost(;
return round(cap_cost_slope, digits=4)
end

function replacement_effective_cost(;
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I made this a separate function so we can just call this to get replacement costs in the reporting of results.

@Bill-Becker Bill-Becker force-pushed the replacements-treatment branch 2 times, most recently from 77fbd52 to d032dc7 Compare January 30, 2024 04:46
@adfarth adfarth linked an issue Nov 5, 2024 that may be closed by this pull request
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
1 participant