OpenFCST: The open-source Fuel Cell Simulation Toolbox
|
This class contains the implementation of the double trap kinetic model as described in the following paper: More...
#include <double_trap_kinetics.h>
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 ¶m) const |
Declare parameters for a parameter file. More... | |
virtual void | initialize (ParameterHandler ¶m) |
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 ( ), 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::CatalystBase * | get_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 ( ). More... | |
double | G_DA_0 |
Values of the equilibrium free activation energies for each reaction ( ). 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 ( and ). More... | |
double | G_OH |
std::vector< std::vector < double > > | intrinsic_rates |
Values of the intrinsic rates for each reaction ( ). 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.,
where is the variable exponential. More... | |
double | proton_concentration_ratio (unsigned int index) const |
If needed, compute the proton concentration ratio, i.e.,
where 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 ¶m) |
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 ¶m, 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 _mapFactory * | get_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< VariableNames > | derivative_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::CatalystBase * | catalyst |
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::PolymerElectrolyteBase * | electrolyte |
Pointer to the electrolyte object created in the application that is used to calculate the properties of the electrolyte in the catalyst layer. More... | |
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)
FuelCellShop::Kinetics::DoubleTrapKinetics::DoubleTrapKinetics | ( | const bool | ) |
Replica Constructor.
FuelCellShop::Kinetics::DoubleTrapKinetics::DoubleTrapKinetics | ( | ) |
Constructor.
It also initializes the default values for kinetics parameters from Wang's 2008 paper.
FuelCellShop::Kinetics::DoubleTrapKinetics::~DoubleTrapKinetics | ( | ) |
Destructor.
void FuelCellShop::Kinetics::DoubleTrapKinetics::compute_energies | ( | ) |
This function will be used to compute the activation energies of each of the reactions ( ), 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. . Before calling this method, various solution setting methods should be called accordingly.
|
inlineprotectedvirtual |
This member function is used to create an object of type gas diffusion layer.
Reimplemented from FuelCellShop::Kinetics::BaseKinetics.
|
virtual |
Member function that computes the current [A/cm^2
], at every quadrature point in the cell.
Reimplemented from FuelCellShop::Kinetics::BaseKinetics.
|
private |
Function to compute the derivative of the PtO coverage w.r.t to the solution.
|
private |
Function to compute the derivative of the PtOH coverage w.r.t to the solution.
|
virtual |
Declare parameters for a parameter file.
Reimplemented from FuelCellShop::Kinetics::BaseKinetics.
|
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.
|
private |
Function that will compute the derivative of the intrinsic rates wrt to the requested solution variable.
|
inline |
Returns the rate of the forward DA step.
compute_energies should be called before using this method.
References oxygen_concentration.
|
inline |
Returns the rate of the backward DA step.
compute_energies should be called before using this method.
|
inline |
Returns the rate of the forward RA step.
compute_energies should be called before using this method.
References oxygen_concentration, and proton_concentration.
|
inline |
Returns the rate of the backward RA step.
compute_energies should be called before using this method.
|
inline |
Returns the rate of the forward RD step.
compute_energies should be called before using this method.
References proton_concentration.
|
inline |
Returns the rate of the backward RD step.
compute_energies should be called before using this method.
|
inline |
Returns the rate of the forward RT step.
compute_energies should be called before using this method.
References proton_concentration.
|
inline |
Returns the rate of the backward RT step.
compute_energies should be called before using this method.
|
inlinevirtual |
Reimplemented from FuelCellShop::Kinetics::BaseKinetics.
References O_coverage, and OH_coverage.
|
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 |
Member function used to read in data and initialize the necessary data to compute the coefficients.
Reimplemented from FuelCellShop::Kinetics::BaseKinetics.
|
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.
|
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.
|
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.
|
inlineprivate |
Compute the oxygen concentration ratio, i.e.,
where is the variable exponential.
References oxygen_concentration.
|
inlineprivate |
If needed, compute the proton concentration ratio, i.e.,
where is the variable exponential.
References proton_concentration.
|
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.
|
private |
Stores the transfer coefficient.
|
private |
Stores the reference concentration of oxygen.
|
private |
Stores the reference concentration of protons.
|
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
|
private |
Values of the free activation energies for each reaction ( ).
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.
|
private |
Values of the equilibrium free activation energies for each reaction ( ).
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.
|
private |
Values of the free adsorption energies for each intermediate ( and ).
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..
|
private |
|
private |
|
private |
|
private |
|
private |
Values of the intrinsic rates for each reaction ( ).
Note that the backward energies are given a lower case "subscript".
|
private |
prefactor is the reference prefactor that sets the scale for the current produced.
Given as 1000A/cm^2 in DoubleTrap paper.
|
staticprotected |
Create prototype for the layer.
|
private |
|
private |
Stores the value of the coverage of the OH and O intermediates.