Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@
- The `FlexibleDemandOpenLoopConverterController` has been renamed to `FlexibleDemandComponent`
- The `DemandOpenLoopConverterController` has been renamed to `GenericDemandComponent`
- Modified CI setup so Windows is temporarily disabled and also so unit, regression, and integration tests are run in separate jobs to speed up testing and provide more information on test failures. [PR 668](https://github.com/NatLabRockies/H2Integrate/pull/668)
- Change commodity in DRI and EAF model from pig iron to sponge iron based on likely carbon content [PR 670](https://github.com/NatLabRockies/H2Integrate/pull/670)

## 0.7.2 [April 9, 2026]

Expand Down
4 changes: 4 additions & 0 deletions docs/technology_models/iron_dri.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,10 @@ The models implemented in H2I are:
- `HydrogenIronReductionPlantPerformanceComponent`
- `HydrogenIronReductionPlantCostComponent`

```{note}
The DRI model outputs sponge iron, which is low in carbon content. The LBNL model calls the outputs pig iron, but that's typically produced using a blast furnace rather than through the DRI process and has higher carbon impurities.
```

Citation:
```bibtex
@article{rosner2023green,
Expand Down
9 changes: 7 additions & 2 deletions docs/technology_models/steel_eaf.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,9 @@
H2I contains two steel electric arc furnace (EAF) models, one is for a facility that utilizes iron pellets from natural gas (NG) direct iron reduction and another facility that utilizes iron pellets from hydrogen (H2)direct iron reduction.

The main difference is the required feedstocks for processing the pellets.
- NG-EAF requires: natural gas, water, pig iron and electricity.
- H2-EAF requires: natural gas, water, carbon, lime, pig iron and electricity.
- NG-EAF requires: natural gas, water, sponge iron and electricity.
- H2-EAF requires: natural gas, water, carbon, lime, sponge iron and electricity.


The original models were constructed in Aspen Pro and translated into Python and added to H2I. The models were developed in conjunction with [Lawrence Berkeley National Laboratory (LBNL)](https://www.lbl.gov/).

Expand All @@ -16,6 +17,10 @@ The models implemented in H2I are:
- `HydrogenEAFPlantPerformanceComponent`
- `HydrogenEAFPlantCostComponent`

```{note}
The EAF model use sponge iron as an input rather than pig iron, which is lower in carbon content. The LBNL model calls the input to the EAF pig iron, but that's typically produced using a blast furnace rather than through the DRI process and has higher carbon impurities.
```

Citation:
```bibtex
@article{rosner2023green,
Expand Down
6 changes: 3 additions & 3 deletions examples/21_iron_examples/iron_dri/plant_config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ technology_interconnections:
- [eaf_grid_feedstock, steel_plant, electricity, cable]
- [eaf_water_feedstock, steel_plant, water, pipe]
- [eaf_natural_gas_feedstock, steel_plant, natural_gas, pipe]
- [iron_plant, steel_plant, pig_iron, pig_iron_transport]
- [iron_plant, steel_plant, sponge_iron, sponge_iron_transport]
plant:
plant_life: 30
simulation:
Expand Down Expand Up @@ -64,8 +64,8 @@ finance_parameters:
- iron_mine
- mine_electricity_feedstock
- mine_crude_ore_feedstock
pig_iron:
commodity: pig_iron
sponge_iron:
commodity: sponge_iron
commodity_stream: iron_plant
technologies:
- processed_ore_feedstock
Expand Down
22 changes: 13 additions & 9 deletions examples/21_iron_examples/iron_dri/run_iron.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@
In this example, iron ore pellets are produced at different iron mine locations in NE Minnesota.
These mines send processed ore pellets to a separate iron DRI plant located outside Chicago.
Four different cases are generated for four different iron mine setups in the `test_inputs.csv`.
The first two cases generate standard blast furnace gradepellets at two different mine locations.
The first two cases generate standard blast furnace grade pellets at two different mine locations.
The second two cases generate DR grade pellets at the same location, with the output capacity
varied to show how the capacity of the mine does not affect the levelized cost of iron_ore pellets
(LCOI), nor does it affect the final cost of the pig_iron produced by DRI (LCOP) or the cost of the
steel produced by the EAF (LCOS).
(LCOI), nor does it affect the final cost of the sponge_iron produced by DRI (LCOS) or the cost
of the steel produced by the EAF (LCOS).

"""

Expand Down Expand Up @@ -78,22 +78,26 @@
)
)
lcois_iron.append(
float(model.model.get_val("finance_subgroup_pig_iron.price_pig_iron", units="USD/kg")[0])
float(
model.model.get_val("finance_subgroup_sponge_iron.price_sponge_iron", units="USD/kg")[0]
)
)
capexes_iron.append(
float(model.model.get_val("finance_subgroup_pig_iron.total_capex_adjusted", units="USD")[0])
float(
model.model.get_val("finance_subgroup_sponge_iron.total_capex_adjusted", units="USD")[0]
)
)
fopexes_iron.append(
float(
model.model.get_val("finance_subgroup_pig_iron.total_opex_adjusted", units="USD/year")[
0
]
model.model.get_val(
"finance_subgroup_sponge_iron.total_opex_adjusted", units="USD/year"
)[0]
)
)
vopexes_iron.append(
float(
model.model.get_val(
"finance_subgroup_pig_iron.total_varopex_adjusted", units="USD/year"
"finance_subgroup_sponge_iron.total_varopex_adjusted", units="USD/year"
)[0]
)
)
Expand Down
6 changes: 3 additions & 3 deletions examples/21_iron_examples/iron_dri/tech_config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -163,18 +163,18 @@ technologies:
model: NaturalGasIronReductionPlantCostComponent
model_inputs:
shared_parameters:
pig_iron_production_rate_tonnes_per_hr: 161.8829908675799 # equivalent to 1418095 t/yr
sponge_iron_production_rate_tonnes_per_hr: 161.8829908675799 # equivalent to 1418095 t/yr
performance_parameters:
water_density: 1000 # kg/m3
cost_parameters:
skilled_labor_cost: 40.85 # 2022 USD/hr
unskilled_labor_cost: 30.0 # 2022 USD/hr
pig_iron_transport:
sponge_iron_transport:
performance_model:
model: GenericTransporterPerformanceModel
model_inputs:
performance_parameters:
commodity: pig_iron
commodity: sponge_iron
commodity_rate_units: kg/h
eaf_grid_feedstock: # electricity feedstock for EAF
performance_model:
Expand Down
4 changes: 2 additions & 2 deletions examples/21_iron_examples/iron_mapping/driver_config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -34,10 +34,10 @@ design_variables:
lower: 0
upper: 10
objective:
name: finance_subgroup_pig_iron.LCOP
name: finance_subgroup_sponge_iron.LCOS
recorder:
file: cases.sql
overwrite_recorder: true
flag: true
includes: [site.latitude, site.longitude, finance_subgroup_pig_iron.LCOP]
includes: [site.latitude, site.longitude, finance_subgroup_sponge_iron.LCOS]
excludes: ['*']
22 changes: 11 additions & 11 deletions examples/21_iron_examples/iron_mapping/ex_out/cases.csv
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
,site.latitude (deg),site.longitude (deg),dri_grid_feedstock.price (USD/MW/h),hydrogen_feedstock.price (USD/kg),finance_subgroup_pig_iron.LCOP (USD/kg)
,site.latitude (deg),site.longitude (deg),dri_grid_feedstock.price (USD/MW/h),hydrogen_feedstock.price (USD/kg),finance_subgroup_sponge_iron.LCOS (USD/kg)
0,39.179,-94.644,58.24602573,7.819127689,0.7850112572903336
1,40.639,-94.179,51.41859144,6.486845574,0.7039548783993137
2,42.135,-74.231,54.87195632,9.087358988,0.8611145933067907
Expand Down Expand Up @@ -45,7 +45,7 @@
43,46.295,-97.814,50.4352344,6.861520616,0.726439613726291
44,41.415,-84.014,57.72454279,7.748746212,0.7807120287164648
45,40.169,-88.725,55.9963289,6.822567835,0.7246859586288446
46,41.603,-93.416,50.76824359,6.498809353,0.7046066294238851
46,41.603,-93.416,50.76824359,6.498809353,0.7046066294238849
47,44.258,-96.218,48.08888229,6.484302926,0.7034453872616688
48,42.783,-75.227,58.89441507,8.518178578,0.8272278321191734
49,43.47,-94.398,48.64393387,6.650122757,0.7135023812546356
Expand All @@ -70,7 +70,7 @@
68,40.403,-92.166,51.16250247,6.74221526,0.7193242468559962
69,38.862,-93.101,52.61488688,6.996040576,0.7347832629480767
70,41.717,-88.398,58.02462706,7.10284254,0.7418012700736446
71,44.056,-72.423,57.60315341,9.361197001,0.8779170147170843
71,44.056,-72.423,57.60315341,9.361197001,0.877917014717084
72,45.586,-87.582,57.64037358,7.851745274,0.786913049961754
73,44.721,-93.281,54.55981386,7.286968665,0.7525319703228306
74,40.227,-85.106,55.34456603,7.546306027,0.7682519002330839
Expand Down Expand Up @@ -140,7 +140,7 @@
138,42.209,-95.172,49.93455623,6.639947411,0.7130269507479543
139,40.386,-79.688,63.86411489,9.17986164,0.8676536883118218
140,41.225,-97.815,48.29404304,6.887453274,0.727774096858826
141,43.101,-88.679,53.03067508,6.615076123,0.7118586114493456
141,43.101,-88.679,53.03067508,6.615076123,0.7118586114493455
142,46.066,-92.269,61.42938904,8.143522162,0.8049102012304439
143,45.91,-90.383,57.83685565,7.028809928,0.7373176052605699
144,43.227,-75.538,75.42836767,11.27986223,0.9955041042695535
Expand Down Expand Up @@ -180,7 +180,7 @@
178,42.24,-76.323,69.36892469,11.02959371,0.9797667028885654
179,40.26,-95.917,48.50109937,6.553833735,0.7076816387944875
180,45.441,-88.545,55.8526599,6.659344602,0.7148295257785313
181,41.361,-72.544,53.88391198,7.614258476,0.7721926421678088
181,41.361,-72.544,53.88391198,7.614258476,0.7721926421678089
182,43.881,-74.532,58.37302204,7.950019899,0.7929166027975763
183,46.375,-93.045,55.3918541,7.021579046,0.7366200908703626
184,39.137,-85.003,61.51175413,8.628449283,0.8341562646653646
Expand All @@ -206,15 +206,15 @@
204,40.577,-81.398,62.90874286,9.207572255,0.8692222190216685
205,46.361,-84.431,60.67660851,8.526102871,0.8278962509744834
206,44.053,-97.747,49.14434791,7.507503977,0.7652491876919038
207,40.592,-75.951,52.92795272,7.774752517,0.7817668956631634
207,40.592,-75.951,52.92795272,7.774752517,0.7817668956631636
208,39.147,-79.282,50.22245241,7.648694799,0.7738772007716359
209,38.644,-76.981,60.48685661,9.107058567,0.8629029652934552
210,42.699,-95.913,47.57093505,6.650574037,0.7134148077286483
211,40.276,-80.446,64.19364001,9.581061709,0.8918781152361044
212,46.002,-94.17,55.75347218,7.786657918,0.7827869516303637
213,43.769,-95.151,47.31078488,6.411883727,0.6989958493683212
214,42.828,-83.285,54.80541876,7.452960164,0.7625662120288659
215,42.306,-85.339,58.19811541,7.738857599,0.7801664835008522
215,42.306,-85.339,58.19811541,7.738857599,0.7801664835008524
216,45.817,-96.539,52.01958202,7.034215719,0.7370212390937694
217,40.981,-72.087,47.38085805,7.581109738,0.769498384106217
218,43.651,-84.949,58.31734328,7.714266851,0.7786966109612123
Expand Down Expand Up @@ -364,7 +364,7 @@
362,42.695,-97.11,47.29014174,6.582336603,0.7092705952544859
363,46.317,-86.678,50.57965136,7.544514147,0.7676341459041081
364,39.278,-85.55,55.89197093,8.15175868,0.8048144424536288
365,45.259,-87.002,49.62045856,6.510959335,0.7052163945598876
365,45.259,-87.002,49.62045856,6.510959335,0.7052163945598875
366,45.913,-83.725,51.24562465,7.70481277,0.7773701205726504
367,38.913,-91.406,53.51277698,6.99251437,0.7346667109256176
368,43.752,-90.126,58.17486708,7.480069934,0.7645611564600783
Expand Down Expand Up @@ -399,7 +399,7 @@
397,38.392,-88.5,57.86180863,8.146670896,0.8047184093570208
398,44.244,-90.231,58.69672689,7.387475541,0.7590342752558699
399,43.469,-97.73,49.2252985,7.077334545,0.7393220482476153
400,38.105,-94.806,49.62168947,6.735856204,0.7187760205954808
400,38.105,-94.806,49.62168947,6.735856204,0.7187760205954807
401,41.24,-85.519,53.29636267,7.026106974,0.7366689275159279
402,39.257,-77.09,60.22997497,9.200428081,0.8685049256999342
403,45.223,-83.711,57.52598123,7.826185595,0.7853597674770538
Expand All @@ -416,7 +416,7 @@
414,41.059,-88.915,56.09943255,7.088687211,0.7407418719709922
415,38.728,-75.52,55.35219581,8.633813323,0.8338207659543093
416,39.353,-90.096,58.12244541,7.782775604,0.7828062956046264
417,45.818,-95.751,48.45444571,6.964379638,0.7324293042045387
417,45.818,-95.751,48.45444571,6.964379638,0.7324293042045384
418,41.765,-83.501,57.41290156,8.084847126,0.800942906196559
419,41.709,-90.317,58.05576703,6.956987333,0.7330106910756611
420,41.223,-88.31,59.46589028,7.512207926,0.7666369269279907
Expand Down Expand Up @@ -491,7 +491,7 @@
489,46.583,-87.917,52.02200649,6.6587893,0.7143862682010519
490,38.862,-80.212,64.90563199,10.12406768,0.9246932250882576
491,46.506,-90.645,67.55517351,9.152558169,0.8664023503170806
492,44.595,-84.463,60.91517064,7.760417109,0.7817570027709664
492,44.595,-84.463,60.91517064,7.760417109,0.7817570027709662
493,45.955,-85.624,49.64725022,7.121041155,0.7420023471036234
494,42.325,-79.325,60.74805435,9.191121493,0.8679992329984643
495,44.135,-83.625,56.50144774,7.908995333,0.7902429391098073
Expand Down
4 changes: 2 additions & 2 deletions examples/21_iron_examples/iron_mapping/plant_config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -59,8 +59,8 @@ finance_parameters:
- iron_mine
- mine_electricity_feedstock
- mine_crude_ore_feedstock
pig_iron:
commodity: pig_iron
sponge_iron:
commodity: sponge_iron
commodity_stream: iron_plant
technologies:
- processed_ore_feedstock
Expand Down
2 changes: 1 addition & 1 deletion examples/21_iron_examples/iron_mapping/run_iron.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@
# NOTE: you can swap './ex_28_out/cases.sql' with './ex_28_out/cases.csv' to read results from csv
fig, ax, lcoi_layer_gdf = plot_geospatial_point_heat_map(
case_results_fpath=case_results_filepath,
metric_to_plot="finance_subgroup_pig_iron.LCOP (USD/kg)",
metric_to_plot="finance_subgroup_sponge_iron.LCOS (USD/kg)",
map_preferences={
"figsize": (10, 8),
"colorbar_label": "Levelized Cost of\nIron [$/kg]",
Expand Down
6 changes: 3 additions & 3 deletions examples/21_iron_examples/iron_mapping/tech_config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -156,16 +156,16 @@ technologies:
model: HydrogenIronReductionPlantCostComponent
model_inputs:
shared_parameters:
pig_iron_production_rate_tonnes_per_hr: 161.8829908675799 # equivalent to 1418095 t/yr
sponge_iron_production_rate_tonnes_per_hr: 161.8829908675799 # equivalent to 1418095 t/yr
performance_parameters:
water_density: 1000 # kg/m3
cost_parameters:
skilled_labor_cost: 40.85 # 2022 USD/hr
unskilled_labor_cost: 30.0 # 2022 USD/hr
pig_iron_transport:
sponge_iron_transport:
performance_model:
model: GenericTransporterPerformanceModel
model_inputs:
performance_parameters:
commodity: pig_iron
commodity: sponge_iron
commodity_rate_units: kg/h
8 changes: 4 additions & 4 deletions examples/test/test_all_examples.py
Original file line number Diff line number Diff line change
Expand Up @@ -1966,7 +1966,7 @@ def test_iron_mapping_example(subtests, temp_copy_of_example):
# Plot LCOI results from cases.sql file, save sql data to csv
fig, ax, lcoi_layer_gdf = plot_geospatial_point_heat_map(
case_results_fpath=cases_csv_fpath,
metric_to_plot="finance_subgroup_pig_iron.LCOP (USD/kg)",
metric_to_plot="finance_subgroup_sponge_iron.LCOS (USD/kg)",
map_preferences={
"figsize": (10, 8),
"colorbar_label": "Levelized Cost of\nIron [$/kg]",
Expand Down Expand Up @@ -2237,9 +2237,9 @@ def test_iron_dri_eaf_example(subtests, temp_copy_of_example):
lcoi = h2i.model.get_val("finance_subgroup_iron_ore.LCOI", units="USD/t")[0]
assert pytest.approx(lcoi, rel=1e-4) == 135.3741358811098

with subtests.test("Value check on LCOP"):
lcop = h2i.model.get_val("finance_subgroup_pig_iron.LCOP", units="USD/t")[0]
assert pytest.approx(lcop, rel=1e-4) == 359.670379351
with subtests.test("Value check on LCOS"):
lcos = h2i.model.get_val("finance_subgroup_sponge_iron.LCOS", units="USD/t")[0]
assert pytest.approx(lcos, rel=1e-4) == 359.670379351

with subtests.test("Value check on LCOS"):
lcos = h2i.model.get_val("finance_subgroup_steel.LCOS", units="USD/t")[0]
Expand Down
Loading
Loading