h2integrate.simulation.technologies.hydrogen.electrolysis.PEM_H2_LT_electrolyzer_Clusters#

Python model of H2 PEM low-temp electrolyzer.

Quick Hydrogen Physics:

1 kg H2 <-> 11.1 N-m3 <-> 33.3 kWh (LHV) <-> 39.4 kWh (HHV)

High mass energy density (1 kg H2= 3,77 l gasoline) Low volumetric density (1 Nm³ H2= 0,34 l gasoline

Hydrogen production from water electrolysis (~5 kWh/Nm³ H2)

Power:1 MW electrolyser <-> 200 Nm³/h H2 <-> ±18 kg/h H2 Energy:+/-55 kWh of electricity --> 1 kg H2 <-> 11.1 Nm³ <-> ±10 liters demineralized water

Power production from a hydrogen PEM fuel cell from hydrogen (+/-50% efficiency): Energy: 1 kg H2 --> 16 kWh

Functions

calc_current(P_T, p1, p2, p3, p4, p5, p6)

Classes

PEM_H2_Clusters(cluster_size_mw, plant_life)

Create an instance of a low-temperature PEM Electrolyzer System.

h2integrate.simulation.technologies.hydrogen.electrolysis.PEM_H2_LT_electrolyzer_Clusters.calc_current(P_T, p1, p2, p3, p4, p5, p6)#
class h2integrate.simulation.technologies.hydrogen.electrolysis.PEM_H2_LT_electrolyzer_Clusters.PEM_H2_Clusters(cluster_size_mw, plant_life, eol_eff_percent_loss=10, uptime_hours_until_eol=80000, include_degradation_penalty=True, turndown_ratio=0.1, dt=3600, curve_coeff=None, water_usage_gal_pr_kg=2.638522427440633)#

Create an instance of a low-temperature PEM Electrolyzer System. Each stack in the electrolyzer system in this model is rated at 1 MW_DC.

Stack characteristics are aligned with HFTO PEM 2022 Status technical targets
Parameters:
  • P_input_external_kW (np_array) -- 1-D array of time-series external power supply

  • voltage_type (string) -- Nature of voltage supplied to electrolyzer from the external power supply ['variable' or 'constant]

  • power_supply_rating_MW (float) -- Rated power of external power supply

run(input_external_power_kw)#
find_eol_voltage_curve(eol_eff_percent_loss)#
find_equivalent_input_power_4_deg(power_in_kW, V_init, V_deg)#
full_degradation(voltage_signal)#
calc_stack_replacement_info(deg_signal)#

Stack life optimistic estimate based on rated efficiency

make_yearly_performance_dict(power_in_kW, V_deg, V_cell, I_op, grid_connected)#
reset_uptime_degradation_rate(uptime_hours_until_eol)#
calc_uptime_degradation(voltage_signal)#
calc_onoff_degradation()#
approx_fatigue_degradation(voltage_signal, dt_fatigue_calc_hrs=168)#
grid_connected_func(h2_kg_hr_system_required)#

Calculate power and current required to meet a constant hydrogen demand

find_eol_voltage_val(eol_rated_eff_drop_percent)#
system_efficiency(P_sys, I)#
make_BOL_efficiency_curve()#
rated_h2_prod()#
external_power_supply(input_external_power_kw)#

External power source (grid or REG) which will need to be stepped down and converted to DC power for the electrolyzer.

Please note, for a wind farm as the electrolyzer's power source, the model assumes variable power supplied to the stack at fixed voltage (fixed voltage, variable power and current)

TODO: extend model to accept variable voltage, current, and power This will replicate direct DC-coupled PV system operating at MPP

iv_curve()#

This is a new function that creates the I-V curve to calculate current based on input power and electrolyzer temperature

current range is 0: max_cell_current+10 -> PEM have current density approx = 2 A/cm^2

temperature range is 40 degCrated_temp+5 -> temperatures for PEM are usually

within 60-80degC

calls cell_design() which calculates the cell voltage

system_design(input_power_kw, cluster_size_mw)#

Calculate whether the cluster is on or off based on input power

TODO: add 0.1 (default turndown ratio) as input

cell_design(Stack_T, Stack_Current)#

Basically: calc_cell_voltage

calc_reversible_cell_voltage(Stack_T)#
inputs::

Stack_T [C]: operating temperature

returns::

E_cell [V/cell]: reversible overpotential

Reference:

calc_V_act(Stack_T, I_stack, cell_active_area)#
inputs::

stack_T [C]: operating temperature I_stack [A]: stack current cell_active_area [cm^2]: electrode area

returns::

V_act [V/cell]: anode and cathode activation overpotential

Reference:

calc_V_ohmic(Stack_T, I_stack, cell_active_area, delta_cm)#
dynamic_operation()#

Model the electrolyzer's realistic response/operation under variable RE

TODO: add this capability to the model

faradaic_efficiency(stack_current)#

` Text background from: [https://www.researchgate.net/publication/344260178_Faraday%27s_ Efficiency_Modeling_of_a_Proton_Exchange_Membrane_Electrolyzer_ Based_on_Experimental_Data]

In electrolyzers, Faraday's efficiency is a relevant parameter to assess the amount of hydrogen generated according to the input energy and energy efficiency. Faraday's efficiency expresses the faradaic losses due to the gas crossover current. The thickness of the membrane and operating conditions (i.e., temperature, gas pressure) may affect the Faraday's efficiency.

Equation for n_F obtained from: https://www.sciencedirect.com/science/article/pii/S0360319917347237#bib27

Parameters:
  • f_1 (float) -- Coefficient - value at operating temperature of 80degC (mA2/cm4)

  • f_2 (float) -- Coefficient - value at operating temp of 80 degC (unitless)

  • current_input_external_Amps (np_array) -- 1-D array of current supplied to electrolyzer stack from external power source

Returns:

float n_F -- Faradaic efficiency (unitless)

h2_production_rate(stack_current, n_stacks_op)#

H2 production rate calculated using Faraday's Law of Electrolysis (https://www.sciencedirect.com/science/article/pii/S0360319917347237#bib27)

Parameters:

np_array -- 1-D array of current supplied to electrolyzer stack from external power source

water_supply(h2_kg_hr)#

Calculate water supply rate based system efficiency and H2 production rate TODO: Add water-to-hydrogen ratio as input, currently hard-coded to 10

run_grid_connected_workaround(power_input_signal, current_signal)#