Source code for RCAIDE.Library.Components.Powertrain.Converters.Generic_Fuel_Cell_Stack
# RCAIDE/Library/Compoments/Powertrain/Sources/Fuel_Cells/Generic_Fuel_Cell.py
#
#
# Created: Jan 2025, M. Clarke
# ----------------------------------------------------------------------------------------------------------------------
# IMPORT
# ----------------------------------------------------------------------------------------------------------------------
# RCAIDE imports
import RCAIDE
from RCAIDE.Framework.Core import Units, Data
from RCAIDE.Library.Components import Component
from RCAIDE.Library.Attributes.Gases import Air
from RCAIDE.Library.Methods.Powertrain.Converters.Fuel_Cells.Larminie_Model.compute_fuel_cell_performance import *
from RCAIDE.Library.Methods.Powertrain.Converters.Fuel_Cells.Larminie_Model.append_fuel_cell_conditions import *
# ----------------------------------------------------------------------------------------------------------------------
# Generic_Fuel_Cell
# ----------------------------------------------------------------------------------------------------------------------
[docs]
class Generic_Fuel_Cell_Stack(Component):
"""This is a fuel cell component.
Assumptions:
None
Source:
None
"""
def __defaults__(self):
"""This sets the default values for the component to function.
Assumptions:
None
Source:
Some default values come from a Nissan 2011 fuel cell
Inputs:
None
Outputs:
None
Properties Used:
None
"""
self.tag = 'fuel_cell'
self.mass_properties.mass = 1.0
self.energy_density = 0.0
self.current_energy = 0.0
self.current_capacitor_charge = 0.0
self.capacity = 0.0
self.length = 0.0
self.width = 0.0
self.height = 0.0
self.volume_packaging_factor = 1.05
self.orientation_euler_angles = [0.,0.,0.] # vector of angles defining default orientation of rotor
self.fuel_cell = Data()
self.fuel_cell.propellant = RCAIDE.Library.Attributes.Propellants.Gaseous_Hydrogen()
self.fuel_cell.oxidizer = Air()
self.fuel_cell.efficiency = .65 # normal fuel cell operating efficiency at sea level
self.fuel_cell.specific_power = 2080 # specific power of fuel cell [W/kg]; default is Nissan 2011 level
self.fuel_cell.mass_density = 1203.208556 # take default as specs from Nissan 2011 fuel cell
self.fuel_cell.volume = 0.0
self.fuel_cell.max_power = 0.0
self.fuel_cell.length = 0.02
self.fuel_cell.width = 0.05
self.fuel_cell.height = 0.1
self.fuel_cell.rated_current_density = 1.0
self.fuel_cell.rated_power_density = 1.0
self.fuel_cell.interface_area = 875.*(Units.cm**2.) # area of the fuel cell interface
self.fuel_cell.r = (2.45E-4) *(1000*(Units.cm**2)) # area specific resistance [k-Ohm-cm^2]
self.fuel_cell.Eoc = .931 # effective activation energy (V)
self.fuel_cell.A1 = .03 # slope of the Tafel line (models activation losses) (V)
self.fuel_cell.m = 1.05E-4 # constant in mass-transfer overvoltage equation (V)
self.fuel_cell.n = 8E-3 # constant in mass-transfer overvoltage equation
self.fuel_cell.ideal_voltage = 1.48
self.fuel_cell.wall_thickness = .0022224 # thickness of cell wall in meters
self.fuel_cell.cell_density =1988. # cell density in kg/m^3
self.fuel_cell.porosity_coefficient =.6 # porosity coefficient
self.electrical_configuration = Data()
self.electrical_configuration.series = 1
self.electrical_configuration.parallel = 1
self.geometrtic_configuration = Data()
self.geometrtic_configuration.normal_count = 1
self.geometrtic_configuration.parallel_count = 1
self.geometrtic_configuration.normal_spacing = 0.02
self.geometrtic_configuration.stacking_rows = 3
self.geometrtic_configuration.parallel_spacing = 0.02
[docs]
def energy_calc(self,state,bus,coolant_lines, t_idx, delta_t):
"""Computes the state of the NMC battery cell.
Assumptions:
None
Source:
None
Args:
self : battery [unitless]
state : temperature [K]
bus : pressure [Pa]
discharge (boolean): discharge flag [unitless]
Returns:
None
"""
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