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

This class contains the implementation of the double trap kinetic model as described in the following paper: More...

#include <double_trap_kinetics.h>

Inheritance diagram for FuelCellShop::Kinetics::DoubleTrapKinetics:
Inheritance graph
[legend]
Collaboration diagram for FuelCellShop::Kinetics::DoubleTrapKinetics:
Collaboration graph
[legend]

Public Member Functions

virtual bool has_coverage (const VariableNames &type)
 
Constructor, destructor and initialization
 DoubleTrapKinetics (const bool)
 Replica Constructor. More...
 
 DoubleTrapKinetics ()
 Constructor. More...
 
 ~DoubleTrapKinetics ()
 Destructor. More...
 
virtual void declare_parameters (ParameterHandler &param) const
 Declare parameters for a parameter file. More...
 
virtual void initialize (ParameterHandler &param)
 Member function used to read in data and initialize the necessary data to compute the coefficients. More...
 
Computational methods
virtual void current_density (std::vector< double > &)
 Member function that computes the current [A/cm^2], at every quadrature point in the cell. More...
 
virtual void derivative_current (std::map< VariableNames, std::vector< double > > &)
 Function to return the derivative of the current density w.r.t solution variables. More...
 
Free energies, species coverage computation and accessor methods
void OH_coverage (std::vector< double > &temp) const
 Returns the value of the coverage of the OH intermediate. More...
 
void O_coverage (std::vector< double > &temp) const
 Returns the value of the coverage of the O intermediate. More...
 
void G_DA_rate (std::vector< double > &temp) const
 Returns the rate of the forward DA step. More...
 
void g_da_rate (std::vector< double > &temp) const
 Returns the rate of the backward DA step. More...
 
void G_RA_rate (std::vector< double > &temp) const
 Returns the rate of the forward RA step. More...
 
void g_ra_rate (std::vector< double > &temp) const
 Returns the rate of the backward RA step. More...
 
void G_RT_rate (std::vector< double > &temp) const
 Returns the rate of the forward RT step. More...
 
void g_rt_rate (std::vector< double > &temp) const
 Returns the rate of the backward RT step. More...
 
void G_RD_rate (std::vector< double > &temp) const
 Returns the rate of the forward RD step. More...
 
void g_rd_rate (std::vector< double > &temp) const
 Returns the rate of the backward RD step. More...
 
void compute_energies ()
 This function will be used to compute the activation energies of each of the reactions ( $ \Delta G^*_i $), accounting for the overpotential and, in the case of the dissociative and reductive adsorptions, the oxygen concentration. More...
 
Initialization
virtual void set_reaction_kinetics (const ReactionNames &name)
 Member function used to set the reaction name in the DoubleTrap kinetics object. More...
 
- Public Member Functions inherited from FuelCellShop::Kinetics::BaseKinetics
virtual ~BaseKinetics ()
 Destructor. More...
 
void set_electrolyte_potential (const SolutionVariable &phi)
 Set the electrolyte phase potential. More...
 
void set_solid_potential (const SolutionVariable &phi)
 Set the solid phase potential. More...
 
void set_temperature (const SolutionVariable &temperature)
 Set temperature. More...
 
void set_reactant_concentrations (const std::vector< SolutionVariable > &conc_vec)
 Set reactant concentrations at the catalyst/electrolyte interface. More...
 
void set_derivative_flags (const std::vector< VariableNames > &flags)
 Set the variables for which you would like to compute the derivaitives. More...
 
void set_catalyst (FuelCellShop::Material::CatalystBase *cat_in)
 Set a pointer to the catalyst that will be used. More...
 
void set_electrolyte (FuelCellShop::Material::PolymerElectrolyteBase *electrolyte_in)
 Member function used to set the electrolyte pointer to that used by the application. More...
 
virtual void set_reaction_kinetics (const ReactionNames name)
 Member function used to specify the reaction for which the kinetic parameters are needed, for example for a Platinum catalyst, we can specify that we need the kinetic parameters for either the oxygen reduction reaction (ORR) or the hydrogen oxidation reaction (HOR) More...
 
void set_p_t (const double &P_Tot)
 Set the total gas pressure [Pascals] in the cell. More...
 
ReactionNames get_reaction_name () const
 Returns the name of the reaction that this kinetics class is using. More...
 
FuelCellShop::Material::CatalystBaseget_cat () const
 Function to get pointer to catalyst class. More...
 
virtual void compute_coverages (const std::string &name_species, std::vector< double > &coverage) const
 Used to return the coverage of the intermediate species if they are computed. More...
 

Static Public Attributes

Instance Delivery (Public variables)
static const std::string concrete_name
 Concrete name used for objects of this class. More...
 

Instance Delivery

static DoubleTrapKinetics const * PROTOTYPE
 Create prototype for the layer. More...
 
virtual boost::shared_ptr
< FuelCellShop::Kinetics::BaseKinetics
create_replica ()
 This member function is used to create an object of type gas diffusion layer. More...
 

Kinetics parameters and internal computational methods

std::vector< std::vector
< double > > 
free_energies
 Values of the free activation energies for each reaction ( $ \Delta G^*_i $). More...
 
double G_DA_0
 Values of the equilibrium free activation energies for each reaction ( $ \Delta G^{*0}_i $). More...
 
double G_RA_0
 
double G_RT_0
 
double G_RD_0
 
double G_O
 Values of the free adsorption energies for each intermediate ( $ \Delta G^{*0}_{OH} $ and $ \Delta G^{*0}_{O} $). More...
 
double G_OH
 
std::vector< std::vector
< double > > 
intrinsic_rates
 Values of the intrinsic rates for each reaction ( $ g_i $). More...
 
std::vector< double > theta_OH
 Stores the value of the coverage of the OH and O intermediates. More...
 
std::vector< double > theta_O
 
double prefactor
 prefactor is the reference prefactor that sets the scale for the current produced. More...
 
double c_ref_oxygen
 Stores the reference concentration of oxygen. More...
 
double c_ref_protons
 Stores the reference concentration of protons. More...
 
double alpha
 Stores the transfer coefficient. More...
 
double negative_concentration_correction (unsigned int index) const
 If any of the oxygen concentrations are negative, make the ORR reaction negative. More...
 
double oxygen_concentration_ratio (unsigned int index) const
 Compute the oxygen concentration ratio, i.e.,

\[ \frac{c_{O_2}}{c^{ref}_{O_2}}^{n} \]

where $ n $ is the variable exponential. More...

 
double proton_concentration_ratio (unsigned int index) const
 If needed, compute the proton concentration ratio, i.e.,

\[ \frac{c_{H^{+}}}{c^{ref}_{H^+}}^{n} \]

where $ n $ is the variable exponential. More...

 
virtual void init_kin_param ()
 Method used to initialize reference concentration of oxygen for the reaction, and number of quadrature points in the cell. More...
 
void d_OH_coverage_du (std::map< VariableNames, std::vector< double > > &) const
 Function to compute the derivative of the PtOH coverage w.r.t to the solution. More...
 
void d_O_coverage_du (std::map< VariableNames, std::vector< double > > &) const
 Function to compute the derivative of the PtO coverage w.r.t to the solution. More...
 
void drate_du (std::vector< std::vector< double > > &, const VariableNames &) const
 Function that will compute the derivative of the intrinsic rates wrt to the requested solution variable. More...
 

Additional Inherited Members

- Static Public Member Functions inherited from FuelCellShop::Kinetics::BaseKinetics
static void declare_Kinetics_parameters (ParameterHandler &param)
 Function used to declare all the data necessary in the parameter files for all BaseKinetics children. More...
 
static boost::shared_ptr
< FuelCellShop::Kinetics::BaseKinetics
create_Kinetics (ParameterHandler &param, std::string kinetics_name)
 Function called in create_CatalystLayer and used to select the appropriate BaseKinetics type that will be used in the layer. More...
 
- Protected Types inherited from FuelCellShop::Kinetics::BaseKinetics
typedef std::map< std::string,
BaseKinetics * > 
_mapFactory
 This object is used to store all objects of type BaseKinetics. More...
 
- Protected Member Functions inherited from FuelCellShop::Kinetics::BaseKinetics
 BaseKinetics ()
 Constructor. More...
 
- Static Protected Member Functions inherited from FuelCellShop::Kinetics::BaseKinetics
static _mapFactoryget_mapFactory ()
 
- Protected Attributes inherited from FuelCellShop::Kinetics::BaseKinetics
double R
 Universal gas constant. More...
 
double F
 Universal Farday's constant. More...
 
double K
 Boltzmann constant. More...
 
double p_total
 Total gas pressure [Pascals] in the cell for isobaric case. More...
 
std::map< VariableNames,
SolutionVariable
reactants_map
 Map of SolutionVariables storing a pointer to the solution vector storing the concentration of each one of the reactants implemented. More...
 
SolutionVariable phi_m
 Struct storing a pointer to the solution vector for the electrolyte potential. More...
 
SolutionVariable phi_s
 Struct stroing a pointer to the solution vector for the electronic/solid potential. More...
 
SolutionVariable T
 Struct stroing a pointer to the solution vector for the temperature. More...
 
bool kin_param_initialized
 Boolean variable to determine whether init_kin_param has been already called or not. More...
 
ReactionNames name_reaction_kinetics
 Enumeration with the reaction name for which the class returns kinetic parameters. More...
 
std::vector< VariableNamesderivative_flags
 Flags for derivatives: These flags are used to request derivatives which are computed using the derivative_current function. More...
 
unsigned int n_quad
 Number of quadrature points in the cell. More...
 
FuelCellShop::Material::CatalystBasecatalyst
 Pointer to the catalyst object that is created at the application level and passed to the kinetics class using the set_catalyst function. More...
 
FuelCellShop::Material::PolymerElectrolyteBaseelectrolyte
 Pointer to the electrolyte object created in the application that is used to calculate the properties of the electrolyte in the catalyst layer. More...
 

Detailed Description

This class contains the implementation of the double trap kinetic model as described in the following paper:

M. Moore, A. Putz and M. Secanell. Investigation of the ORR Using the Double-Trap Intrinsic Kinetic Model, Journal of the Electrochemical Society 160(6): F670-F681, 2013. doi: 10.1149/2.123306jes

A more detailed deriviation of the paper is given in:

J.X. Wang, F.A. Uribe, T. E. Springer, J. Zhangc, and R. R. Adzica. Intrinsic kinetic equation for oxygen reduction reaction in acidic media: the double tafel slope and fuel cell applications. Faraday Discuss., 140:347–362, 2008.

This model uses the activation energies of four basic, one electron transfer, reactions that comprise the ORR and the adsorption energies of two intermediates to find the current produced in the catalyst layer.

NOTE: To match Parthasarathy's data this value should be multiplied by 5.2 since this is the roughness factor of his electrode (M. Secanell, 2015)

Author
M. Moore, 2010-13
M. Bhaiya, 2013
M. Secanell, 2013
P. Wardlaw, 2014

Constructor & Destructor Documentation

FuelCellShop::Kinetics::DoubleTrapKinetics::DoubleTrapKinetics ( const bool  )

Replica Constructor.

Warning
For internal use only
FuelCellShop::Kinetics::DoubleTrapKinetics::DoubleTrapKinetics ( )

Constructor.

It also initializes the default values for kinetics parameters from Wang's 2008 paper.

FuelCellShop::Kinetics::DoubleTrapKinetics::~DoubleTrapKinetics ( )

Destructor.

Member Function Documentation

void FuelCellShop::Kinetics::DoubleTrapKinetics::compute_energies ( )

This function will be used to compute the activation energies of each of the reactions ( $ \Delta G^*_i $), accounting for the overpotential and, in the case of the dissociative and reductive adsorptions, the oxygen concentration.

The function will also compute the instrinsic rates i.e. $ g_i $. Before calling this method, various solution setting methods should be called accordingly.

virtual boost::shared_ptr<FuelCellShop::Kinetics::BaseKinetics > FuelCellShop::Kinetics::DoubleTrapKinetics::create_replica ( )
inlineprotectedvirtual

This member function is used to create an object of type gas diffusion layer.

Warning
This class MUST be redeclared in every child.

Reimplemented from FuelCellShop::Kinetics::BaseKinetics.

virtual void FuelCellShop::Kinetics::DoubleTrapKinetics::current_density ( std::vector< double > &  )
virtual

Member function that computes the current [A/cm^2], at every quadrature point in the cell.

Reimplemented from FuelCellShop::Kinetics::BaseKinetics.

void FuelCellShop::Kinetics::DoubleTrapKinetics::d_O_coverage_du ( std::map< VariableNames, std::vector< double > > &  ) const
private

Function to compute the derivative of the PtO coverage w.r.t to the solution.

void FuelCellShop::Kinetics::DoubleTrapKinetics::d_OH_coverage_du ( std::map< VariableNames, std::vector< double > > &  ) const
private

Function to compute the derivative of the PtOH coverage w.r.t to the solution.

virtual void FuelCellShop::Kinetics::DoubleTrapKinetics::declare_parameters ( ParameterHandler &  param) const
virtual

Declare parameters for a parameter file.

Reimplemented from FuelCellShop::Kinetics::BaseKinetics.

virtual void FuelCellShop::Kinetics::DoubleTrapKinetics::derivative_current ( std::map< VariableNames, std::vector< double > > &  )
virtual

Function to return the derivative of the current density w.r.t solution variables.

It returns a map of vectors containing derivative w.r.t solution variables / design variables set using set_derivative_flags method. Each vector can be accessed by using Key of the map, which correpsonds to the VariableNames (solution/design variable). This method takes input map by reference, hence the map is needed to be created at application/equation level with default arguments and passed inside this method.

Reimplemented from FuelCellShop::Kinetics::BaseKinetics.

void FuelCellShop::Kinetics::DoubleTrapKinetics::drate_du ( std::vector< std::vector< double > > &  ,
const VariableNames  
) const
private

Function that will compute the derivative of the intrinsic rates wrt to the requested solution variable.

void FuelCellShop::Kinetics::DoubleTrapKinetics::G_DA_rate ( std::vector< double > &  temp) const
inline

Returns the rate of the forward DA step.

compute_energies should be called before using this method.

References oxygen_concentration.

void FuelCellShop::Kinetics::DoubleTrapKinetics::g_da_rate ( std::vector< double > &  temp) const
inline

Returns the rate of the backward DA step.

compute_energies should be called before using this method.

void FuelCellShop::Kinetics::DoubleTrapKinetics::G_RA_rate ( std::vector< double > &  temp) const
inline

Returns the rate of the forward RA step.

compute_energies should be called before using this method.

References oxygen_concentration, and proton_concentration.

void FuelCellShop::Kinetics::DoubleTrapKinetics::g_ra_rate ( std::vector< double > &  temp) const
inline

Returns the rate of the backward RA step.

compute_energies should be called before using this method.

void FuelCellShop::Kinetics::DoubleTrapKinetics::G_RD_rate ( std::vector< double > &  temp) const
inline

Returns the rate of the forward RD step.

compute_energies should be called before using this method.

References proton_concentration.

void FuelCellShop::Kinetics::DoubleTrapKinetics::g_rd_rate ( std::vector< double > &  temp) const
inline

Returns the rate of the backward RD step.

compute_energies should be called before using this method.

void FuelCellShop::Kinetics::DoubleTrapKinetics::G_RT_rate ( std::vector< double > &  temp) const
inline

Returns the rate of the forward RT step.

compute_energies should be called before using this method.

References proton_concentration.

void FuelCellShop::Kinetics::DoubleTrapKinetics::g_rt_rate ( std::vector< double > &  temp) const
inline

Returns the rate of the backward RT step.

compute_energies should be called before using this method.

virtual bool FuelCellShop::Kinetics::DoubleTrapKinetics::has_coverage ( const VariableNames type)
inlinevirtual

Reimplemented from FuelCellShop::Kinetics::BaseKinetics.

References O_coverage, and OH_coverage.

virtual void FuelCellShop::Kinetics::DoubleTrapKinetics::init_kin_param ( )
inlineprivatevirtual

Method used to initialize reference concentration of oxygen for the reaction, and number of quadrature points in the cell.

Implements FuelCellShop::Kinetics::BaseKinetics.

References ORR, oxygen_concentration, and proton_concentration.

virtual void FuelCellShop::Kinetics::DoubleTrapKinetics::initialize ( ParameterHandler &  param)
virtual

Member function used to read in data and initialize the necessary data to compute the coefficients.

Reimplemented from FuelCellShop::Kinetics::BaseKinetics.

double FuelCellShop::Kinetics::DoubleTrapKinetics::negative_concentration_correction ( unsigned int  index) const
inlineprivate

If any of the oxygen concentrations are negative, make the ORR reaction negative.

Note: This is used to stabilize the code at low O2 concentrations

References oxygen_concentration.

void FuelCellShop::Kinetics::DoubleTrapKinetics::O_coverage ( std::vector< double > &  temp) const
inlinevirtual

Returns the value of the coverage of the O intermediate.

compute_energies should be called before using this method.

Reimplemented from FuelCellShop::Kinetics::BaseKinetics.

void FuelCellShop::Kinetics::DoubleTrapKinetics::OH_coverage ( std::vector< double > &  temp) const
inlinevirtual

Returns the value of the coverage of the OH intermediate.

compute_energies should be called before using this method.

Reimplemented from FuelCellShop::Kinetics::BaseKinetics.

double FuelCellShop::Kinetics::DoubleTrapKinetics::oxygen_concentration_ratio ( unsigned int  index) const
inlineprivate

Compute the oxygen concentration ratio, i.e.,

\[ \frac{c_{O_2}}{c^{ref}_{O_2}}^{n} \]

where $ n $ is the variable exponential.

References oxygen_concentration.

double FuelCellShop::Kinetics::DoubleTrapKinetics::proton_concentration_ratio ( unsigned int  index) const
inlineprivate

If needed, compute the proton concentration ratio, i.e.,

\[ \frac{c_{H^{+}}}{c^{ref}_{H^+}}^{n} \]

where $ n $ is the variable exponential.

References proton_concentration.

virtual void FuelCellShop::Kinetics::DoubleTrapKinetics::set_reaction_kinetics ( const ReactionNames name)
inlinevirtual

Member function used to set the reaction name in the DoubleTrap kinetics object.

It will return error if any string other than "ORR" is passed as an input argument.

References FcstUtilities::log, and ORR.

Member Data Documentation

double FuelCellShop::Kinetics::DoubleTrapKinetics::alpha
private

Stores the transfer coefficient.

double FuelCellShop::Kinetics::DoubleTrapKinetics::c_ref_oxygen
private

Stores the reference concentration of oxygen.

double FuelCellShop::Kinetics::DoubleTrapKinetics::c_ref_protons
private

Stores the reference concentration of protons.

const std::string FuelCellShop::Kinetics::DoubleTrapKinetics::concrete_name
static

Concrete name used for objects of this class.

This name is used when setting up the subsection where the data is stored in the input file.

The data will be stored under

* subsection concrete_name
*
* end
*
std::vector<std::vector<double> > FuelCellShop::Kinetics::DoubleTrapKinetics::free_energies
private

Values of the free activation energies for each reaction ( $ \Delta G^*_i $).

Because the free activation energies change with oxygen and overpotential we will need one for each quadrature point. The numbering system is as follows: 0 = G_DA, 1 = G_da 2 = G_RA, 3 = G_ra 4 = G_RT, 5 = G_rt 6 = G_RD, 7 = G_rd where the lower case subscript indicates a backward reaction.

double FuelCellShop::Kinetics::DoubleTrapKinetics::G_DA_0
private

Values of the equilibrium free activation energies for each reaction ( $ \Delta G^{*0}_i $).

Note that the backward energies are given a lower case "subscript". These are the values at zero overpotential and are defined in the constructor, with the values taken from the following article: Jia X. Wang, Junliang Zhang, and Radoslav R. Adzic. Double-trap kinetic equation for the oxygen reduction reaction on pt(111) in acidic media. The Journal of Physical Chemistry A, 111(49):12702–12710, 2007. PMID:18052309.

double FuelCellShop::Kinetics::DoubleTrapKinetics::G_O
private

Values of the free adsorption energies for each intermediate ( $ \Delta G^{*0}_{OH} $ and $ \Delta G^{*0}_{O} $).

These are the values at zero overpotential and are defined in the constructor, with the values taken from the following article: Jia X. Wang, Junliang Zhang, and Radoslav R. Adzic. Double-trap kinetic equation for the oxygen reduction reaction on pt(111) in acidic media. The Journal of Physical Chemistry A, 111(49):12702–12710, 2007. PMID:18052309..

double FuelCellShop::Kinetics::DoubleTrapKinetics::G_OH
private
double FuelCellShop::Kinetics::DoubleTrapKinetics::G_RA_0
private
double FuelCellShop::Kinetics::DoubleTrapKinetics::G_RD_0
private
double FuelCellShop::Kinetics::DoubleTrapKinetics::G_RT_0
private
std::vector<std::vector<double> > FuelCellShop::Kinetics::DoubleTrapKinetics::intrinsic_rates
private

Values of the intrinsic rates for each reaction ( $ g_i $).

Note that the backward energies are given a lower case "subscript".

double FuelCellShop::Kinetics::DoubleTrapKinetics::prefactor
private

prefactor is the reference prefactor that sets the scale for the current produced.

Given as 1000A/cm^2 in DoubleTrap paper.

DoubleTrapKinetics const* FuelCellShop::Kinetics::DoubleTrapKinetics::PROTOTYPE
staticprotected

Create prototype for the layer.

std::vector<double> FuelCellShop::Kinetics::DoubleTrapKinetics::theta_O
private
std::vector<double> FuelCellShop::Kinetics::DoubleTrapKinetics::theta_OH
private

Stores the value of the coverage of the OH and O intermediates.


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