Source code for RCAIDE.Library.Components.Powertrain.Converters.Proton_Exchange_Membrane_Fuel_Cell
# RCAIDE/Library/Compoments/Powertrain/Sources/Fuel_Cell/Proton_Exchange_Membrane_Fuel_Cell.py
#
#
# Created: Dec 2024, M. Guidotti and M. Clarke
# ----------------------------------------------------------------------------------------------------------------------
# IMPORT
# ----------------------------------------------------------------------------------------------------------------------
# RCAIDE imports
from RCAIDE.Framework.Core import Data
from .Generic_Fuel_Cell_Stack import Generic_Fuel_Cell_Stack
from RCAIDE.Library.Methods.Powertrain.Converters.Fuel_Cells.Proton_Exchange_Membrane.compute_fuel_cell_performance import *
from RCAIDE.Library.Methods.Powertrain.Converters.Fuel_Cells.Proton_Exchange_Membrane.append_fuel_cell_conditions import *
# ----------------------------------------------------------------------------------------------------------------------
# Proton_Exchange_Membrane_Fuel_Cell
# ----------------------------------------------------------------------------------------------------------------------
[docs]
class Proton_Exchange_Membrane_Fuel_Cell(Generic_Fuel_Cell_Stack):
"""
Proton Exchange Membrane Fuel Cell class
"""
def __defaults__(self):
"""This sets the default values.
Assumptions:
None
Parameters:
----------
type: string
The type of PEM model to use, "LT" for low temperature, or "HT" for high temperature
R: float
Universal gas constant (J / (mol*K))
F: float
Faraday constant (C / mol)
E_C: float
Activation energy of ORR (J)
H2_molar_mass: float
Molar mass of H2 (kg/mol)
O2_molar_mass: float
Molar mass of O2 (kg/mol)
t_m: Length
The membrane thickness of the PEM cell
a_c: float
The catalyst specific area in cm^2 / mg Pt
L_c: float
The catalyst platinum loading in mg Pt / cm^2
A: Area
The membrane area
compressor_expander_module: compressor_expander_module
The compressor expander module of the air supply system
maximum_deg: float
The maximum voltage drop due to degradation of the fuel cell at EOL
rated_current_density: float
The rated current density for pressure drop calculations (typically the current density at max power)
Can be calculated using the evaluate_max_PD method
Defaults to None
rated_power_density: float
The rated power density of the fuel cell
Defaults to None
rated_p_drop_fc: Pressure
The pressure drop at rated current density of the fuel cell cathode
Defaults to 0.240 bar
rated_p_drop_hum: Pressure
The pressure drop at rated current density of one side of the membrane humidifier
Defaults to 0.025 bar
gamma_para: float
The parasitic power draw divided by the gross cell power
Does not include compressor/ram-air heat exchanger coolant power
Defaults to 0.03
alpha: float
The charge transfer coefficient
Used for both models, is between 0-1, but usually around 0.5
Defaults to 0.375 (matches reports and experimental data)
gamma: float
The activation loss pressure dependency coefficient
Generally 1 for HT-PEM
Defaults to 0.45 for LT-PEM
lambda_eff: float
Fitting parameter used to calculate the conductivity of Nafion membranes
Only used if type is "LT"
Values from 9-24 are reasonable
Defaults to 9.15 for fully humidifed air
c1: float
Membrane conductivity of HT PBI membrane at 100 C (ms/cm)
Only used if type is "HT"
defaults to 0.0435 for standard PBI membrane
c2: float
Membrane conductivity of HT PBI membrane at 200 C (ms/cm)
Only used if type is "HT"
defaults to 0.0636 for standard PBI membrane
i0ref: float
Reference current density for activation losses for HT PEM model (A / cm^2 Pt)
Note that it is given per unit catalyst surface area, not per membrane area
defaults to 4e-8
i0ref_P_ref: float
Pressure at which i0ref was determined
defaults to 1 bar
ioref_T_ref: float
Temperature at which i0ref was determined
defaults to 369.05 K
i_lim_multiplier: float
The value which the limiting current is multiplied by for advanced PEM systems
area_specific_mass: float
The mass per active membrane area of the fuel cell (kg/m2)
References
[1] Chilver-Stainer, James, et al. "Power output optimisation via arranging gas flow channels
for low-temperature polymer electrolyte membrane fuel cell (PEMFC) for
hydrogen-powered vehicles." Energies 16.9 (2023): 3722.
"""
self.tag = 'pem_fuel_cell'
self.fuel_cell.Universal_gas_constant = 8.31 # Universal gas constant (J / (mol*K))
self.fuel_cell.Faraday_constant = 96485 # Faraday constant (C / mol)
self.fuel_cell.E_C = 66000 # Activation energy of ORR (J)
self.fuel_cell.H2_molar_mass = 2.0E-3 # Molar mass of H2 (kg/mol)
self.fuel_cell.O2_molar_mass = 32E-3 # Molar mass of O2 (kg/mol)
self.fuel_cell.O2_mass_frac = 0.233
self.fuel_cell.type = "LT"
self.fuel_cell.specific_heat_capacity = 903 # J/kg·K # Chilver-Stainer, James, et al
self.fuel_cell.t_m = 0.0024 #* Units.cm
self.fuel_cell.interface_area = 50 #* Units.cm^2 # area of the fuel cell interface
self.fuel_cell.a_c = 98
self.fuel_cell.L_c = 0.1
self.fuel_cell.compressor_expander_module = Data()
self.fuel_cell.compressor_expander_module.compressor_efficiency = 0.71
self.fuel_cell.compressor_expander_module.expander_efficiency = 0.73
self.fuel_cell.compressor_expander_module.motor_efficiency = 0.801025
self.fuel_cell.compressor_expander_module.generator_efficiency = 1
self.fuel_cell.compressor_expander_module.specific_weight = None
self.fuel_cell.compressor_expander_module.weight = 0
self.fuel_cell.maximum_deg = 0
self.fuel_cell.rated_current_density = 0.1 # A/cm^2
self.fuel_cell.rated_p_drop_fc = 0.240
self.fuel_cell.rated_p_drop_hum = 0.025
self.fuel_cell.rated_H2_pressure = 1
self.fuel_cell.rated_air_pressure = 1
self.fuel_cell.gamma_para = 0.03
self.fuel_cell.alpha = 0.375
self.fuel_cell.gamma = 0.45
self.fuel_cell.lambda_eff = 24
self.fuel_cell.c1 = 0.0435
self.fuel_cell.c2 = 0.0636
self.fuel_cell.stack_temperature = 353.15 # Kelvin
self.fuel_cell.air_excess_ratio = 2
self.fuel_cell.oxygen_relative_humidity = 1
self.fuel_cell.i0ref = 9E-6
self.fuel_cell.i0ref_P_ref = 1
self.fuel_cell.i0ref_T_ref = 353
self.fuel_cell.current_density_limit_multiplier = 1
self.fuel_cell.area_specific_mass = 2.5
return
[docs]
def energy_calc(self,state,bus,coolant_lines, t_idx, delta_t):
"""Computes the state of the fuel cell battery cell.
"""
if not (self.fuel_cell.type == "LT") or (self.fuel_cell.type == "HT"):
raise ValueError('PEM type not supported, currently supported types are "LT" and "HT"')
stored_results_flag, stored_battery_tag = compute_fuel_cell_performance(self,state,bus,coolant_lines, t_idx,delta_t)
return stored_results_flag, stored_battery_tag
[docs]
def append_operating_conditions(self,segment,bus):
append_fuel_cell_conditions(self,segment,bus)
return
[docs]
def append_fuel_cell_segment_conditions(self,bus, conditions, segment):
append_fuel_cell_segment_conditions(self,bus, conditions, segment)
return
[docs]
def reuse_stored_data(self,state,bus,stored_results_flag, stored_fuel_cell_tag):
reuse_stored_fuel_cell_data(self,state,bus,stored_results_flag, stored_fuel_cell_tag)
return