OpenFCST: The open-source Fuel Cell Simulation Toolbox
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Public Member Functions | Static Public Attributes | Protected Member Functions | Static Protected Attributes | Private Member Functions | Private Attributes | List of all members
FuelCellShop::MicroScale::IonomerAgglomerateSun Class Reference

Analytical solution to an ionomer-filled agglomerate problem in 1D. More...

#include <agglomerate_ionomer_sun.h>

Inheritance diagram for FuelCellShop::MicroScale::IonomerAgglomerateSun:
Inheritance graph
[legend]
Collaboration diagram for FuelCellShop::MicroScale::IonomerAgglomerateSun:
Collaboration graph
[legend]

Public Member Functions

virtual SolutionMap compute_current ()
 Main function of the class used to compute the current over the whole agglomerate at the local operating conditions. More...
 
virtual std::vector< double > compute_derivative_current ()
 Function to compute the derivative of the current density at the local operating conditions;. More...
 
virtual std::string get_name ()
 Return name of class instance, i.e. More...
 
virtual double aux_volume_fraction ()
 Returns extra contribution to volume of layer. More...
 
- Public Member Functions inherited from FuelCellShop::MicroScale::AgglomerateBase
virtual ~AgglomerateBase ()
 
virtual void print_properties ()
 Print out key agglomerate information (name, radius, film thickness, porosity). More...
 
virtual bool has_derivatives ()
 Returns true if the class instance can calculate current density derivatives. More...
 
virtual void make_thread_safe (ParameterHandler &param, unsigned int thread_index)
 
virtual void set_solution (const std::map< VariableNames, SolutionVariable > &, const VariableNames &, const int &)
 Function for setting the solution map(reactant concentration, phi_s, phi_m, etc.). More...
 
- Public Member Functions inherited from FuelCellShop::MicroScale::MicroScaleBase
virtual ~MicroScaleBase ()
 Destructor. More...
 

Static Public Attributes

static const std::string concrete_name
 

Protected Member Functions

virtual double get_film_thickness ()
 
virtual double get_radius ()
 
virtual void set_structure ()
 
virtual boost::shared_ptr
< FuelCellShop::MicroScale::MicroScaleBase
create_replica ()
 This member function is used to create an object of MicroScaleBase. More...
 
 IonomerAgglomerateSun ()
 Constructors. More...
 
 IonomerAgglomerateSun (std::string concrete_name)
 
virtual void declare_parameters (ParameterHandler &param) const
 
virtual void initialize (ParameterHandler &param)
 
- Protected Member Functions inherited from FuelCellShop::MicroScale::AgglomerateBase
void _initialize_film_porosity ()
 
 AgglomerateBase ()
 
- Protected Member Functions inherited from FuelCellShop::MicroScale::MicroScaleBase
void set_layer (FuelCellShop::Layer::MultiScaleCL< deal_II_dimension > *_layer)
 
 MicroScaleBase ()
 
- Protected Member Functions inherited from FuelCellShop::MicroScale::SphericalAgglomerateGeometry
 SphericalAgglomerateGeometry ()
 
virtual double compute_thickness_agg (FuelCellShop::Layer::MultiScaleCL< deal_II_dimension > *layer)
 Member function to compute the thickness of the agglomerate thin film based on the radius and structure. More...
 
virtual double compute_epsilon_agg (FuelCellShop::Layer::MultiScaleCL< deal_II_dimension > *layer)
 Compute the volume fraction of nafion inside the agglomerate given the catalyst layer ionomer volume fraction , $ \epsilon_N $; size of the agglomerate, $ r_{agg} $; and, porosity inside the agglomerate, $ \epsilon_{agg} $, the necessary ionomer thin film thickness is computed such that the correct volume fractions are obtained. More...
 
virtual double compute_epsilon_N (const double delta_agg, const double thickness_agg) const
 Function used to compute the amount of electrolyte in the catalyst layer. More...
 
virtual double compute_depsilonN_dthickness (const double thickness_agg) const
 Function to compute

\[ \frac{\partial \epsilon_N^{cat}}{\partial thickness_{agg}} \]

This function should only be used to calculate the thin film thickness using Newton's method. More...

 
virtual double compute_depsilonN_depsilon_agg (FuelCellShop::Layer::MultiScaleCL< deal_II_dimension > *layer) const
 Function to compute

\[ \frac{\partial \epsilon_N^{cat}}{\partial \epsilon_{agg}} \]

This function should only be used to calculate the thin film thickness using Newton's method. More...

 
virtual double compute_n (FuelCellShop::Layer::MultiScaleCL< deal_II_dimension > *layer) const
 Member function to compute the number of agglomerates. More...
 
virtual double compute_dn_depsilon_agg (FuelCellShop::Layer::MultiScaleCL< deal_II_dimension > *layer) const
 Compute the derivative of n with respect to the porosity of the agglomerate. More...
 

Static Protected Attributes

static IonomerAgglomerateSun
const * 
PROTOTYPE
 

Private Member Functions

void check_kinetics ()
 
double compute_Er (const double k_c, const double D)
 Function to compute the effectiveness of the agglomerate core. More...
 
double compute_dEr (const double k_c, const double dk_c, const double D)
 Function to compute the derivative of the effectiveness of the agglomerate core. More...
 

Private Attributes

bool checked_kinetics
 
double epsilon_V
 Catalyst layer porosity. More...
 

Additional Inherited Members

- Static Public Member Functions inherited from FuelCellShop::MicroScale::MicroScaleBase
static void declare_MicroScale_parameters (ParameterHandler &param)
 Function used to declare all the data necessary in the parameter files for all MicroScale children. More...
 
static boost::shared_ptr
< FuelCellShop::MicroScale::MicroScaleBase
create_MicroStructure (ParameterHandler &param, FuelCellShop::Layer::MultiScaleCL< deal_II_dimension > *layer)
 Function used to select the appropriate MicroScale type as specified in the ParameterHandler under line. More...
 
- Protected Types inherited from FuelCellShop::MicroScale::AgglomerateBase
typedef
FuelCellShop::Layer::MultiScaleCL
< deal_II_dimension >
::Properties 
CLPropNames
 
typedef std::map< CLPropNames,
double > 
CL_Properties
 
- Protected Types inherited from FuelCellShop::MicroScale::MicroScaleBase
typedef std::map< std::string,
MicroScaleBase * > 
_mapFactory
 This object is used to store all objects of type MicroScaleBase. More...
 
- Protected Types inherited from FuelCellShop::MicroScale::SphericalAgglomerateGeometry
typedef
FuelCellShop::Layer::MultiScaleCL
< deal_II_dimension >
::Properties 
CLPropNames
 
typedef std::map< CLPropNames,
double > 
CL_Properties
 
- Static Protected Member Functions inherited from FuelCellShop::MicroScale::MicroScaleBase
static _mapFactoryget_mapFactory ()
 This member function is used to create an object of type MicroScaleBase. More...
 
- Protected Attributes inherited from FuelCellShop::MicroScale::AgglomerateBase
boost::shared_ptr
< FuelCellShop::Material::CatalystBase
catalyst
 Boost shared pointer to catalyst object. More...
 
boost::shared_ptr
< FuelCellShop::Material::PolymerElectrolyteBase
electrolyte
 Boost shared pointer to electrolyte object. More...
 
boost::shared_ptr
< FuelCellShop::Kinetics::BaseKinetics
kinetics
 Boost shared pointer to kinetics object. More...
 
std::map< VariableNames,
SolutionVariable
solutions
 Member data for storing solutions. More...
 
std::vector< VariableNamessol_names
 
VariableNames reactant
 
VariableNames tempReactantName
 
int sol_index
 
double permittivity_0
 Constants. More...
 
double F
 
double R
 
double P
 
double AV
 
double c_R
 
bool has_derivatives_
 
double c_H
 
double phi_M
 
double phi_S
 
double interface
 
double D_R_N
 
double H_R_N
 Henry's Constant for primary reactant in nafion, [Pa cm^3/mol]. More...
 
std::string fixed_agg_variable
 
- Protected Attributes inherited from FuelCellShop::MicroScale::MicroScaleBase
FuelCellShop::Layer::MultiScaleCL
< deal_II_dimension > * 
layer
 
- Protected Attributes inherited from FuelCellShop::MicroScale::SphericalAgglomerateGeometry
double pi
 
double r_agg
 
double delta_agg
 
double epsilon_agg
 
double n_agg
 

Detailed Description

Analytical solution to an ionomer-filled agglomerate problem in 1D.

This class implements the analytical ionomer-filled agglomerate first proposed by:

and later implemented in openFCST in order to provide the results obtained in:

The data files for this article can be found in fcts/data/articles/Secanell_EA07_MultiVariable_Optimization_PEMFC_Cathodes_Agglomerate_Model/. You can find three folders there one for analyzing a single case, one for an IV curve and one for running an optimization case as discussed in the article.

Theory

The volumetric current density is

\[ \nabla \cdot \vec{i} = 4F \frac{p_{tot}x_{O_2}}{H_{O_2,N}}\left(\frac{1}{E_r k_c (1-\epsilon^{cl}_V)} + \frac{(r_{agg} + \delta_{agg})\delta_{agg}}{a_{agg}r_{agg}D_{O_2, N}} \right)^{-1} \]

where

\[ k_c = \frac{A_v i^{ref}_0}{4F(1-\epsilon^{cl}_V)c^{ref}_{O_2}} \exp(-\frac{\alpha_c F}{RT}(\phi_s - \phi_m)) \]

and $ k_c $ is the reaction rate constant, $ s^{-1} $, $ i^{ref}_0 $ is the exchange current density, [ $ A \cdot cm^{-2} $ ], $ R $ is the gas constant, 8.315 $ J \cdot K^{-1} \cdot mol^{-1} $ ], $ T $ is the temperature, [K], $ \gamma $ is the coefficient in Tafel equation, [-], $ F $ is the Faraday constant, 96493 [ $ C \cdot mol $ ], $ \alpha_c $ is the transfer coefficient, [-], $ c^{ref}_{O_2} $ is the reference oxygen concentration, [ $ mol \cdot cm^{-3}$ ], the term $ 1-\epsilon^{cat}_V $ is used to transform the active area in the catalyst layer, $ A_v $ to an active area inside the agglomerate and the effectiveness factor is given by

\[ E_r = \frac{1}{\phi_L}\left( \frac{1}{\tanh(3\phi_L)} - \frac{1}{3\phi_L} \right) \]

where $ E_r $ is the effectiveness factor, [-] and the Thiele's modulus for a spherical agglomerate is given by

\[ \phi_L = \frac{r_{agg}}{3} \sqrt{\frac{k_c}{D^{eff}}} \]

where $D^{eff} $ is the effective oxygen diffusion coefficient inside the agglomerate, [ $ cm^2\cdot s^{-1} $], $ r_{agg} $ is the radius of the spherical agglomerate and $ D^{eff} $ is the effective oxygen diffusion coefficient inside the agglomerate.

In these equations, there are several parameters that need to be obtained: $ H_{O_2,N} $, $ a_{agg} $, $ D_{O_2,N} $, $ A_v $, $ i^{ref}_0 $, $ c^{ref}_{O_2} $ and $ D^{eff} $. Parameters $ H_{O_2,N} $, $ D_{O_2, N} $, $ i^{ref}_0 $ and $ c^{ref}_{O_2} $ are input parameters to the model and are obtained from transport and electrochemical data. In the code, they are specified by the type of kinetics and catalyst used. Regarding the type of kinetic model, ONLY TAFEL can be used in this case.

Parameters $ a_{agg} $, $ A_v $ and $ D^{eff} $ depend on the composition of the catalyst layer.

The parameter $ a_{agg} $ is defined as the ratio between the effective surface area usable to dissolve oxygen into the agglomerate and the catalyst layer volume. This value can be related to the catalyst layer structure by

\[ a_{agg} = n 4 \pi (r_{agg} + \delta_{agg})^2 \epsilon^{cl}_V \]

where $ \delta_{agg} $ is the thin electrolyte film surrounding the agglomerate, [ $ \mu m $], $ n $ is the number of agglomerates per unit volume, the term $ 4 \pi (r_{agg} + \delta_{agg})^2 $ is the surface of a single agglomerate and finally, $ \epsilon^{cl}_V $ is the catalyst layer porosity.

For more information see:

Author
M. Secanell 2004-13

Constructor & Destructor Documentation

FuelCellShop::MicroScale::IonomerAgglomerateSun::IonomerAgglomerateSun ( )
protected

Constructors.

FuelCellShop::MicroScale::IonomerAgglomerateSun::IonomerAgglomerateSun ( std::string  concrete_name)
protected

Member Function Documentation

virtual double FuelCellShop::MicroScale::IonomerAgglomerateSun::aux_volume_fraction ( )
inlinevirtual

Returns extra contribution to volume of layer.

Implements FuelCellShop::MicroScale::MicroScaleBase.

void FuelCellShop::MicroScale::IonomerAgglomerateSun::check_kinetics ( )
private
virtual SolutionMap FuelCellShop::MicroScale::IonomerAgglomerateSun::compute_current ( )
virtual

Main function of the class used to compute the current over the whole agglomerate at the local operating conditions.

Implements FuelCellShop::MicroScale::MicroScaleBase.

double FuelCellShop::MicroScale::IonomerAgglomerateSun::compute_dEr ( const double  k_c,
const double  dk_c,
const double  D 
)
private

Function to compute the derivative of the effectiveness of the agglomerate core.

virtual std::vector<double> FuelCellShop::MicroScale::IonomerAgglomerateSun::compute_derivative_current ( )
virtual

Function to compute the derivative of the current density at the local operating conditions;.

Reimplemented from FuelCellShop::MicroScale::AgglomerateBase.

double FuelCellShop::MicroScale::IonomerAgglomerateSun::compute_Er ( const double  k_c,
const double  D 
)
private

Function to compute the effectiveness of the agglomerate core.

virtual boost::shared_ptr<FuelCellShop::MicroScale::MicroScaleBase> FuelCellShop::MicroScale::IonomerAgglomerateSun::create_replica ( )
inlineprotectedvirtual

This member function is used to create an object of MicroScaleBase.

Warning
This class MUST be redeclared in every child.

Implements FuelCellShop::MicroScale::MicroScaleBase.

virtual void FuelCellShop::MicroScale::IonomerAgglomerateSun::declare_parameters ( ParameterHandler &  param) const
inlineprotectedvirtual

Reimplemented from FuelCellShop::MicroScale::AgglomerateBase.

References concrete_name, and FuelCellShop::MicroScale::AgglomerateBase::declare_parameters().

Here is the call graph for this function:

virtual double FuelCellShop::MicroScale::IonomerAgglomerateSun::get_film_thickness ( )
inlineprotectedvirtual
virtual std::string FuelCellShop::MicroScale::IonomerAgglomerateSun::get_name ( )
inlinevirtual

Return name of class instance, i.e.

concrete name.

Implements FuelCellShop::MicroScale::MicroScaleBase.

References concrete_name.

virtual double FuelCellShop::MicroScale::IonomerAgglomerateSun::get_radius ( )
inlineprotectedvirtual
virtual void FuelCellShop::MicroScale::IonomerAgglomerateSun::initialize ( ParameterHandler &  param)
inlineprotectedvirtual

Reimplemented from FuelCellShop::MicroScale::AgglomerateBase.

References concrete_name, and FuelCellShop::MicroScale::AgglomerateBase::initialize().

Here is the call graph for this function:

virtual void FuelCellShop::MicroScale::IonomerAgglomerateSun::set_structure ( )
protectedvirtual

Member Data Documentation

bool FuelCellShop::MicroScale::IonomerAgglomerateSun::checked_kinetics
private
const std::string FuelCellShop::MicroScale::IonomerAgglomerateSun::concrete_name
static
double FuelCellShop::MicroScale::IonomerAgglomerateSun::epsilon_V
private

Catalyst layer porosity.

IonomerAgglomerateSun const* FuelCellShop::MicroScale::IonomerAgglomerateSun::PROTOTYPE
staticprotected

The documentation for this class was generated from the following file: