Finance models to account for lifetime performance of electrolyzer (follow-on to 463)#491
Finance models to account for lifetime performance of electrolyzer (follow-on to 463)#491elenya-grant wants to merge 60 commits intoNatLabRockies:developfrom
Conversation
…ART into converter_baseclass
…lyzer performance baseclass
…d of time until replacement
…ance in finance calcs
jaredthomas68
left a comment
There was a problem hiding this comment.
I know this is still a work in progress. I glanced through and am leaving a few comments.
Based on discussion in dev meetings, I also want to make sure we avoid using average lifetime production for each year because that could alter the financial results. If we have yearly, let's try to use that.
| self.dt / 3600 | ||
| ) | ||
| outputs["capacity_factor"] = outputs["total_electricity_produced"].sum() / max_production | ||
| outputs["annual_electricity_produced"] = outputs["total_electricity_produced"] * ( |
There was a problem hiding this comment.
any reason to not just divide here?
| outputs["annual_hydrogen_produced"] = np.sum(hydrogen_out_with_availability) | ||
|
|
||
| # Compute percent hydrogen lost due to O&M maintenance | ||
| # TODO: make below total rather than annual |
There was a problem hiding this comment.
while touching this, we may want to reconsider the name since hydrogen_lost seems like leaks, but this is specifically for down-time. Maybe hydrogen_opportunity_cost_OM or something like that? #223
| # output is minimum between available feedstocks and output demand | ||
| pig_iron_production = np.minimum.reduce(pig_iron_from_feedstocks) | ||
| outputs["pig_iron_out"] = pig_iron_production | ||
| outputs["total_pig_iron_produced"] = np.sum(pig_iron_production) |
There was a problem hiding this comment.
As I understand it, DRI does not produce pig iron, it produces sponge iron (aka DRI-grade pellets).
There was a problem hiding this comment.
Pig iron is specifically what comes out of a blast furnace I believe
|
|
||
| outputs["rated_methanol_production"] = inputs["plant_capacity_kgpy"] / 8760 | ||
| outputs["total_methanol_produced"] = outputs["methanol_out"].sum() | ||
| max_production = len(meoh_prod) * inputs["plant_capacity_kgpy"] / 8760 |
There was a problem hiding this comment.
double check this equation, seem like it may not be safe for varying dt
Finance models to account for lifetime performance of electrolyzer
This PR is a follow-on to #463 to highlight what test values change when the finance models account for lifetime performance of the electrolyzer model. There is some new hard-coded logic introduced to show just this case. A subsequent PR will remove the added logic that's specific to the electrolyzer and will always use lifetime performance calculations for all technologies. This PR will help ensure that differing test values in the follow-on PR are not related to a change in the electrolyzer performance.
This PR should not be merged in until after PR #463 is.
Section 1: Type of Contribution
Section 2: Draft PR Checklist
TODO:
Type of Reviewer Feedback Requested (on Draft PR)
Structural feedback:
Implementation feedback:
Other feedback:
Section 3: General PR Checklist
docs/files are up-to-date, or added when necessaryCHANGELOG.mdhas been updated to describe the changes made in this PRSection 3: Related Issues
This partially resolves Issue #485 but not completely.
Section 4: Impacted Areas of the Software
Section 4.1: New Files
path/to/file.extensionmethod1: What and why something was changed in one sentence or less.Section 4.2: Modified Files
examples/08_wind_electrolyzer/user_finance_model/simple_lco.pyexamples/test/test_all_examples.py: see Section 6h2integrate/core/h2integrate_model.pyh2integrate/finances/numpy_financial_npv.pyh2integrate/finances/profast_base.pymethod1: What and why something was changed in one sentence or less.Section 5: Additional Supporting Information
Section 6: Test Results, if applicable
Changed test values in
test_all_examples.pyTests where LCOH (or equivalent) decreased:
test_steel_example: LCOS also decreasedtest_simple_ammonia_exampletest_ammonia_synloop_exampletest_co2h_methanol_example: LCOM decreasedtest_splitter_wind_doc_h2_exampletest_wind_solar_electrolyzer_exampletest_wombat_electrolyzer_example: note that this test does not actually test the example using wombattest_csvgen_design_of_experimentsTests where LCOH increased:
test_hydrogen_dispatch_exampletest_electrolyzer_om_example: this test is for the example that uses wombat. The reason the LCOH increased is because the capacity factor is lower when output from the wombat model (capacity factor of about 0.13) than theECOElectrolyzerPerformanceModel(capacity factor of about 0.16).Section 7 (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.yml