-
Notifications
You must be signed in to change notification settings - Fork 42
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
adding average LCO-ccsinje and adjustment cost bugfixes #492
Conversation
tabeado
commented
Dec 8, 2023
- added average levelized cost of ccsinje and cost from electricity demand for ccsinje in report.LCOE.
- bugfix of average adjustment cost in report.LCOE
- bugfix of "capital cost w/ adjCost" for ccsinje, dac, and some transport techs in report.Technology
R/reportLCOE.R
Outdated
v_directteinv_wadj <- readGDX(gdx,name=c("o_avgAdjCostInv"),field="l",format="first_found")[,ttot,] | ||
v_directteinv <- readGDX(gdx,name=c("v_costInvTeDir","vm_costInvTeDir","v_directteinv"),field="l",format="first_found")[,ttot,] ## Total direct Investment Cost in Timestep | ||
#v_directteinv_wadj <- readGDX(gdx,name=c("o_avgAdjCostInv"),field="l",format="first_found")[,ttot,] ## average adjustment cost per unit installed in period | ||
v_adjteinv <- readGDX(gdx,name=c("v_costInvTeAdj"),field="l",format="first_found")[,ttot,] ## total adjustment cost in period |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
maybe the R variable can also be called "v_costInvTeAdj"? normally I think the convention is to go with the REMIND variable name unless it is not possible.. (like v_directteinv above this)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I agree in principle, but wanted to stick with the convention used in this part of the script. "v_costInvTeDir" turns into "v_directteinv", and I just applied the same logic. What did you mean saying "(like v_directteinv above this)"?
|
||
# calculate secondary Fuel cost for ccsinje | ||
te_annual_secFuel_cost <- new.magpie(getRegions(te_inv_annuity),ttot_from2005, "ccsinje" , fill=0) | ||
te_annual_secFuel_cost[,,"ccsinje"] <- setNames(-pm_prodCouple[,,"ccsinje"] * Fuel.Price[,,"seel"] * vm_co2CCS[,,"ccsinje.1"], "ccsinje") |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I am probably missing something, but why negative here? (-pm_prodCouple) oh I see nevermind it is because CCS consumes energy, would be nice to write this more explicitly (like below)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
could also write a short documentation of the meanings of the three things multiplied here, I read it as
negative sign (so pm_prodCouple turns positive) * energy demand of CO2 injection (pm_prodCouple) * secondary electricity price * amount of CO2 captured (with units like below)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It says in line 249 that negative values mean own consumption, positive values mean coupled product. As I want positive cost, I need to multiply.
I can adjust the line with the units if you want to have a more detailed documentation.
R/reportLCOE.R
Outdated
# calculate secondary Fuel cost for ccsinje | ||
te_annual_secFuel_cost <- new.magpie(getRegions(te_inv_annuity),ttot_from2005, "ccsinje" , fill=0) | ||
te_annual_secFuel_cost[,,"ccsinje"] <- setNames(-pm_prodCouple[,,"ccsinje"] * Fuel.Price[,,"seel"] * vm_co2CCS[,,"ccsinje.1"], "ccsinje") | ||
# units: pm_prodCouple[,,"ccsinje"] = [TWa/GtC]; Fuel.Price = [USD2005/GtC]; vm_co2CCS= [GtC]; te_annual_secFuel_cost = [USD2005] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
fuel price has unit USD2005/TWa, right?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Good catch, will adjust
R/reportLCOE.R
Outdated
te_annual_OMF_cost[,,"ccsinje"]) | ||
# distribute ccs injection cost over techs | ||
te_annual_OMF_cost[,,"ccsinje"] + te_annual_secFuel_cost[,,"ccsinje"]) | ||
# distribute ccs injection cost over techs => this does not include adjustment cost incurred! => what is the reasoning behind it? |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
don't quite understand this comment, do you mean why is adjustment cost not added as a OMF cost? What is the unit of total_ccsInj_cost?
Btw I don't quite get the formula here; shouldn't the total cost = annuitized (investment cost + other fixed costs (OMF, adjCost)) + running cost (energy cost, OMV cost, CO2 tax)... It looks like OMF and energy cost are here, but the others(?)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I put this in the commit accidentally. The point is that only ccs injection cost without adjustment cost are distributed across technologies. I just wondered why there is no version that includes adjustment cost as these can be very substantial
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The general formula for total cost should be (and is):
annuitized (investment cost + adjCost) + OMF cost (don't need to be annuitized) + running cost (energy cost, OMV cost, CO2 tax).
The ccs cost only has investment cost + OMF cost + now also energy cost
Adjustment cost are missing, that was precisely the point of my comment
R/reportLCOE.R
Outdated
#### Carbon Transport and storage ("ccsinje") | ||
setNames(te_annual_inv_cost[,ttot_from2005,"ccsinje"]/ | ||
vm_co2CCS_tCO2[,,"ccsinje.1"], | ||
paste0("LCOx|average|","cco2_stored|","ccsinje","|supply-side", "|Investment Cost")), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
instead of calling it LCOx, maybe something more concrete like "LCOCS" Levelized cost of carbon/Co2 storage?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
why do we give "cco2_stored" in the variable name? I thought usually for readability we have something more like "Captured CO2|Injected CO2 |Supply side|..." etc. not sure what the convention is
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I called it "cco2_stored" because the convention for the other items in this dimension is pe2se$all_te. In my understanding, "cco2" would be the remind element corresponding to that. However, it is not about cco2 (all captured co2) but only the part of it that is stored, thus the additional "_stored"
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
about LCOx vs LCOCS: I think that is a general question of how we want to call "LCO other than E" in this script. There are plans to also add LCO of CDR options. Do we want to give all of them their own abbreviation? Or do we want to have a generic LCOx and then filter according to the technologies, as it is the case with LCOE?
R/reportLCOE.R
Outdated
|
||
# calculate standing system LCOE | ||
# divide total cost of standing system in that time step by total generation (before curtailment) in that time step | ||
# exception: grid and storage cost are calculate by dividing by generation after curtailment | ||
# convert from USD2005/MWh to USD2015/MWh (*1.2) | ||
# exceptions: grid and storage cost are calculate by dividing by generation after curtailment |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
maybe add another exception here that for CCS, it is divided by CO2 (or C?) stored
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe would also be nice to have a trial run (or output LCOE csv available - or its screenshot), so a CCS expert can comment on the costs (not an expert here :P) maybe Jess or Anne?
You can compare results here: /p/tmp/tabeado/remind2_clean/reportLCOE_adjustment |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for the nice edits! I approve this change :) Happy holiday~ :3