Iron electrowinning models

Contents

Iron electrowinning models#

H2I contains iron electrowinning models to simulate the reduction of iron oxide to pure iron and removal of impurities. The main input feedstock is iron ore, while the output commodity is “sponge iron”, i.e. iron that is typically brittle (“spongey”) and contains less carbon than most steel alloys. This sponge iron can then be used in an electric arc furnace (EAF) to produce steel.

There are currently three iron electrowinning processes modeled in H2I: - Aqueous Hydroxide Electrolysis (AHE) - Molten Salt Electrolysis (MSE) - Molten Oxide Electrolysis (MOE)

In reality, the exact composition and structure of the resulting sponge iron will differ depending on the process and the conditions. Currently, H2I models do not make these distinctions, as the technology is new and we are still building out the capability. Instead, the models in their current form are based on two recent studies of electrowinning technology as a whole.

The first study is by Humbert et al., who focus specifically on iron and the three technologies above. These authors gather information on the specific energy required for electrolysis and associated pretreatments needed, which is applied in the HumbertEwinPerformanceComponent performance model. In their supporting information, they also model the full operational expenditures for each process, which is applied in the HumbertStinnEwinCostComponent cost model.

The second study is by Stinn & Allanore, who present a generalized capital cost model for electrowinning of many different metals. These authors use both cost data and physical parameters from existing studies to fit the model to be applicable to any metal, including iron. This model is applied in the HumbertStinnEwinCostComponent cost model.

To use this model, specify "HumbertEwinPerformanceComponent" as the performance model and "HumbertStinnEwinCostComponent" as the cost model. The performance model will use Humbert et al.’s energy consumption data to consume electricity as a feedstock and feed this information to the cost model. The cost model will calculate capex costs based on the Stinn correlations and opex costs based on the Humbert SI.

Performance Model#

class h2integrate.converters.iron.humbert_ewin_perf.HumbertEwinConfig(*, electrolysis_type, ore_fe_wt_pct, capacity_mw)#

Bases: BaseConfig

Configuration class for the Humbert iron electrowinning performance model.

Parameters:
  • electrolysis_type (str) – The type of electrowinning being performed. Options: “ahe”: Aqueous Hydroxide Electrolysis (AHE) “mse”: Molten Salt Electrolysis (MSE) “moe”: Molten Oxide Electrolysis (MOE)

  • ore_fe_wt_pct (float) – The iron content of the ore coming in, expressed as a percentage.

  • capacity_mw (float) – The MW electrical capacity of the electrowinning plant.

electrolysis_type: str#
ore_fe_wt_pct: float#
capacity_mw: float#
class h2integrate.converters.iron.humbert_ewin_perf.HumbertEwinPerformanceComponent(**kwargs)#

Bases: PerformanceModelBaseClass

OpenMDAO component for the Humbert iron electrowinning performance model.

OpenMDAO Inputs
electricity_in#

Electric power input available in kW for each timestep.

Type:

array

iron_ore_in#

Iron ore mass flow available in kg/h for each timestep.

Type:

array

ore_fe_concentration#

The iron content of the ore coming in, given as a percentage.

Type:

float

spec_energy_cons_fe#

The specific electrical energy consumption required to win pure iron (Fe) from iron ore. These are currently calculated as averages between the high and low stated values in Table 10 of Humbert et al., but this is exposed as an OpenMDAO variable to probe the effect of specific energy consumption on iron cost.

Type:

float

capacity#

The electrical capacity of the electrowinning plant in MW.

Type:

float

NaOH_in#

Mass flow of NaOH available in kg/h for each timestep.

Type:

array

CaCl2_in#

Mass flow of CaCl2 available in kg/h for each timestep.

Type:

array

NaOH_ratio#

Ratio of NaOH consumption to annual iron production in kg/kg.

Type:

float

CaCl2_ratio#

Ratio of CaCl2 consumption to annual iron production in kg/kg.

Type:

float

OpenMDAO Outputs
electricity_consumed#

Electric power consumption in kW for each timestep.

Type:

array

limiting_input#

An array of integers indicating which input is the limiting factor for iron production at each timestep: 0 = iron ore, 1 = electricity, 2 = capacity

Type:

array

sponge_iron_out#

Sponge iron production in kg/h for each timestep.

Type:

array

total_sponge_iron_produced#

Total annual sponge iron production in kg/y.

Type:

float

output_capacity#

Maximum possible annual sponge iron production in kg/y.

Type:

float

NaOH_consumed#

Mass flow of NaOH consumed in kg/h for each timestep.

Type:

array

CaCl2_consumed#

Mass flow of CaCl2 consumed in kg/h for each timestep.

Type:

array

initialize()#

Perform any one-time initialization run at instantiation.

setup()#

Declare inputs and outputs.

Available attributes:

name pathname comm options

compute(inputs, outputs)#

Computation for the OM component.

For a template class this is not implement and raises an error.

Cost Model#

class h2integrate.converters.iron.humbert_stinn_ewin_cost.HumbertStinnEwinCostConfig(cost_year=2018, labor_rate_cost=55.9, anode_cost_per_tonne=1660.716, annual_labor_hours_per_position=2000, *, electrolysis_type)#

Bases: CostModelBaseConfig

Configuration class for the Humbert iron electrowinning cost model.

Default values for the labor_rate_cost, anode_cost_per_tonne, and annual_labor_hours_per_position came from the SI spreadsheet of the Humbert Opex model and were adjusted to 2018 dollars using CPI.

Parameters:
  • electrolysis_type (str) – The type of electrowinning being performed. Options: “ahe”: Aqueous Hydroxide Electrolysis (AHE) “mse”: Molten Salt Electrolysis (MSE) “moe”: Molten Oxide Electrolysis (MOE)

  • cost_year (int) – The dollar year of costs output by the model. Defaults to 2018, the dollar year in which data was given in the Stinn paper

  • labor_rate_cost (float, optional) – labor cost in USD/person-hour. Defaults to 55.90, the number used in the Humbert OpEx model and adjusted to 2018 USD using CPI.

  • anode_cost_per_tonne (float, optional) – anode cost in USD/tonne. Defaults to 1660.716, the number used in the Humbert OpEx model and adjusted to 2018 USD using CPI.

  • annual_labor_hours_per_position (float | int, optional) – The labor hours per position per year. Defaults to 2000, the number used in the Humbert OpEx model.

electrolysis_type: str#
cost_year: int#
labor_rate_cost: float#
anode_cost_per_tonne: float#
annual_labor_hours_per_position: int | float#
class h2integrate.converters.iron.humbert_stinn_ewin_cost.HumbertStinnEwinCostComponent(**kwargs)#

Bases: CostModelBaseClass

OpenMDAO component for the Humbert/Stinn iron electrowinning cost model.

Default values for many inputs are set for 3 technology classes:

  • Aqueous Hydroxide Electrolysis (AHE)

  • Molten Salt Electrolysis (MSE)

  • Molten Oxide Electrolysis (MOE)

All of these values come from the SI spreadsheet for the Humbert paper that can be downloaded at doi.org/10.1007/s40831-024-00878-3 except for the default anode replacement interval. These are exposed to OpenMDAO for potential future optimization/sensitivity analysis.

We calculate both CapEx and OpEx in this component. CapEx is calculated using the Stinn & Allanore model. OpEx is calculated using the Humbert et al. model.

OpenMDAO Inputs
output_capacity#

Maximum annual iron production capacity in kg/year.

Type:

float

iron_ore_in#

Iron ore mass flow available in kg/h for each timestep.

Type:

array

electricity_in#

Electric power input available in kW for each timestep.

Type:

array

specific_energy_electrolysis#

The specific electrical energy consumption required to win pure iron (Fe) from iron ore - JUST the electrolysis step.

Type:

float

electrolysis_temp#

Electrolysis temperature (°C).

Type:

float

electron_moles#

Moles of electrons per mole of iron product.

Type:

float

current_density#

Current density (A/m²).

Type:

float

electrode_area#

Electrode area per cell (m²).

Type:

float

current_efficiency#

Current efficiency (dimensionless).

Type:

float

cell_voltage#

Cell operating voltage (V).

Type:

float

rectifier_lines#

Number of rectifier lines.

Type:

float

positions#

Labor rate (position-years/tonne).

Type:

float

NaOH_ratio#

Ratio of NaOH consumed to Fe produced.

Type:

float

CaCl2_ratio#

Ratio of CaCl2 consumed to Fe produced.

Type:

float

limestone_ratio#

Ratio of limestone consumed to Fe produced.

Type:

float

anode_ratio#

Ratio of anode mass to annual iron production.

Type:

float

anode_replacement_interval#

Replacement interval of anodes (years).

Type:

float

OpenMDAO Outputs
CapEx#

Total capital cost of the electrowinning plant (USD).

Type:

float

OpEx#

Yearly operating expenses in USD/year which do NOT depend on plant output.

Type:

float

VarOpEx#

Yearly operating expenses in USD/year which DO depend on plant output.

Type:

float

processing_capex#

Portion of the capex that is apportioned to preprocessing of ore.

Type:

float

electrolysis_capex#

Portion of the capex that is apportioned to electrolysis.

Type:

float

rectifier_capex#

Portion of the capex that is apportioned to rectifiers.

Type:

float

labor_opex#

Portion of the opex that is apportioned to labor.

Type:

float

NaOH_opex#

Portion of the opex that is apportioned to NaOH.

Type:

float

CaCl2_opex#

Portion of the opex that is apportioned to CaCl2.

Type:

float

limestone_opex#

Portion of the opex that is apportioned to limestone.

Type:

float

anode_opex#

Portion of the opex that is apportioned to anodes.

Type:

float

ore_opex#

Portion of the opex that is apportioned to ore.

Type:

float

elec_opex#

Portion of the opex that is apportioned to electricity.

Type:

float

initialize()#

Perform any one-time initialization run at instantiation.

setup()#

Declare inputs and outputs.

Available attributes:

name pathname comm options

compute(inputs, outputs, discrete_inputs, discrete_outputs)#

Computation for the OM component.

For a template class this is not implement and raises an error.