From 8a3b94a430c91def08c7b75d676b07bf373a9cb4 Mon Sep 17 00:00:00 2001 From: Dakota Ramos Date: Wed, 4 Dec 2024 11:14:52 -0700 Subject: [PATCH 1/2] LCA hotfix: corrected iron ore mining and pelletizing emissions intensity values and units --- .../greet/2023/greet_2023_processed.yaml | 6 ++- .../technologies/resource/greet_data.py | 44 ++++++++++--------- 2 files changed, 27 insertions(+), 23 deletions(-) diff --git a/hopp/simulation/resource_files/greet/2023/greet_2023_processed.yaml b/hopp/simulation/resource_files/greet/2023/greet_2023_processed.yaml index e75b138b4..1c2574d12 100644 --- a/hopp/simulation/resource_files/greet/2023/greet_2023_processed.yaml +++ b/hopp/simulation/resource_files/greet/2023/greet_2023_processed.yaml @@ -1,5 +1,7 @@ -DRI_iron_ore_mining_EI: 0.22901198723003552 -DRI_iron_ore_pelletizing_EI: 0.23105675045934587 +DRI_iron_ore_mining_EI_per_MT_ore: 125.60298098051585 +DRI_iron_ore_mining_EI_per_MT_steel: 229.01198723003554 +DRI_iron_ore_pelletizing_EI_per_MT_ore: 126.7244434860691 +DRI_iron_ore_pelletizing_EI_per_MT_steel: 231.0567504593459 NG_combust_EI: 56.531234265084805 NG_supply_EI: 12.683622297844511 NH3_H2_consume: 0.197284 diff --git a/hopp/simulation/technologies/resource/greet_data.py b/hopp/simulation/technologies/resource/greet_data.py index 7350c058c..bfcf9b2a2 100644 --- a/hopp/simulation/technologies/resource/greet_data.py +++ b/hopp/simulation/technologies/resource/greet_data.py @@ -189,18 +189,6 @@ def preprocess_greet(self): soec_ely_stack_capex_EI = (greet2['Electrolyzers']['C257'].value * g_to_kg) # SOEC electrolyzer stack CAPEX emissions (kg CO2e/kg H2) soec_ely_stack_and_BoP_capex_EI = (greet2['Electrolyzers']['F257'].value * g_to_kg) # SOEC electrolyzer stack + Balance of Plant CAPEX emissions (kg CO2e/kg H2) # Steel - DRI_iron_ore_mining_EI = ((greet2['Steel']['AE92'].value + # GHG Emissions Intensity of Iron ore mining for use in DRI-EAF Steel production (kg CO2e/kg iron ore) - (greet2['Steel']['AE82'].value * VOC_to_CO2e) + - (greet2['Steel']['AE83'].value * CO_to_CO2e) + - (greet2['Steel']['AE90'].value * CH4_gwp_to_CO2e) + - (greet2['Steel']['AE91'].value * N2O_gwp_to_CO2e) - ) * (g_to_kg / ton_to_kg)) - DRI_iron_ore_pelletizing_EI = ((greet2['Steel']['AG92'].value + # GHG Emissions Intensity of Iron ore pelletizing for use in DRI-EAF Steel production (kg CO2e/kg iron ore) - (greet2['Steel']['AG82'].value * VOC_to_CO2e) + - (greet2['Steel']['AG83'].value * CO_to_CO2e) + - (greet2['Steel']['AG90'].value * CH4_gwp_to_CO2e) + - (greet2['Steel']['AG91'].value * N2O_gwp_to_CO2e) - ) * (g_to_kg / ton_to_kg)) steel_H2O_consume = ((greet2['Steel']['AE80'].value + # Total H2O consumption for DRI-EAF Steel production w/ 83% H2 and 0% scrap, accounts for water used in iron ore mining, pelletizing, DRI, and EAF (metric tonne H2O/metric tonne steel production) greet2['Steel']['AG80'].value + # NOTE: Does not include water consumption for H2 production via electrolysis greet2['Steel']['AK80'].value + @@ -214,10 +202,25 @@ def preprocess_greet(self): greet2['Steel']['AM63'].value ) * (mmbtu_to_GJ / ton_to_MT)) steel_lime_consume = (greet2['Steel']['AM68'].value) # Lime consumption for DRI-EAF Steel production (metric tonne lime/metric tonne steel production) - steel_iron_ore_consume = (greet2['Steel']['AM69'].value) # Iron ore consumption for DRI-EAF Steel production (metric tonne iron ore/metric tonne steel production) + steel_iron_ore_consume = (greet2['Steel']['AM69'].value) # Iron ore consumption for DRI-EAF Steel production (metric tonne iron ore or pellet/metric tonne steel production) steel_electricity_consume = ((greet2['Steel']['AK65'].value + # Total Electrical Energy consumption for DRI-EAF Steel production accounting for DRI with 83% H2 and EAF + LRF (MWh/metric tonne steel production) greet2['Steel']['AM65'].value ) * (mmbtu_to_MWh/ton_to_MT)) + #Iron + DRI_iron_ore_mining_EI_per_MT_steel = ((greet2['Steel']['AE92'].value + # GHG Emissions Intensity of Iron ore mining for use in DRI-EAF Steel production (kg CO2e/metric tonne steel production) + (greet2['Steel']['AE82'].value * VOC_to_CO2e) + + (greet2['Steel']['AE83'].value * CO_to_CO2e) + + (greet2['Steel']['AE90'].value * CH4_gwp_to_CO2e) + + (greet2['Steel']['AE91'].value * N2O_gwp_to_CO2e) + ) * (g_to_kg / ton_to_MT)) + DRI_iron_ore_pelletizing_EI_per_MT_steel = ((greet2['Steel']['AG92'].value + # GHG Emissions Intensity of Iron ore pelletizing for use in DRI-EAF Steel production (kg CO2e/metric tonne steel production) + (greet2['Steel']['AG82'].value * VOC_to_CO2e) + + (greet2['Steel']['AG83'].value * CO_to_CO2e) + + (greet2['Steel']['AG90'].value * CH4_gwp_to_CO2e) + + (greet2['Steel']['AG91'].value * N2O_gwp_to_CO2e) + ) * (g_to_kg / ton_to_MT)) + DRI_iron_ore_mining_EI_per_MT_ore = (DRI_iron_ore_mining_EI_per_MT_steel / steel_iron_ore_consume) # GHG Emissions Intensity of Iron ore mining for use in DRI-EAF Steel production (kg CO2e/metric tonne iron ore) + DRI_iron_ore_pelletizing_EI_per_MT_ore = (DRI_iron_ore_pelletizing_EI_per_MT_steel / steel_iron_ore_consume) # GHG Emissions Intensity of Iron ore pelletizing for use in DRI-EAF Steel production (kg CO2e/metric tonne iron ore) greet2.close() #------------------------------------------------------------------------------ @@ -271,8 +274,10 @@ def preprocess_greet(self): # Lime 'lime_supply_EI':lime_supply_EI, # Iron ore - 'DRI_iron_ore_mining_EI':DRI_iron_ore_mining_EI, - 'DRI_iron_ore_pelletizing_EI':DRI_iron_ore_pelletizing_EI, + 'DRI_iron_ore_mining_EI_per_MT_steel':DRI_iron_ore_mining_EI_per_MT_steel, + 'DRI_iron_ore_pelletizing_EI_per_MT_steel':DRI_iron_ore_pelletizing_EI_per_MT_steel, + 'DRI_iron_ore_mining_EI_per_MT_ore':DRI_iron_ore_mining_EI_per_MT_ore, + 'DRI_iron_ore_pelletizing_EI_per_MT_ore':DRI_iron_ore_pelletizing_EI_per_MT_ore, # Renewable infrastructure embedded EI and h2 production via water electrolysis 'wind_capex_EI':wind_capex_EI, 'solar_pv_capex_EI':solar_pv_capex_EI, @@ -336,10 +341,7 @@ def format_data(self): self.data = yaml.load(yaml_file, Loader=yaml.SafeLoader) yaml_file.close() -#Adhoc testing +# Code to manually run this file independently to preprocess the GREET data and produce a processed yaml # if __name__ == '__main__': -# test = GREETData() -# print(test.data) - -#NOTE: Runtime ~ 1m to fully parse greet -#NOTE: Runtime <2s with greet preprocessed (load yaml to dict) \ No newline at end of file +# test = GREETData(preprocess_greet=True) +# print(test.data) \ No newline at end of file From f0f55c2d13293f6695030805b308c3208ef10f1c Mon Sep 17 00:00:00 2001 From: Dakota Ramos Date: Thu, 5 Dec 2024 15:20:24 -0700 Subject: [PATCH 2/2] Updated fastkml version dependency in pyproject.toml to correct CI errors --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 5afc8079c..76156a499 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -15,7 +15,7 @@ dependencies = [ "NREL-PySAM==4.2.0", "Pillow", "Pyomo>=6.1.2", - "fastkml", + "fastkml<1", "floris>=4.0", "future", "global_land_mask",