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::IonomerAgglomerateAnalytical Class Reference

Class that gives the analytical solution to an ionomer-filled agglomerate problem in 1D. More...

#include <agglomerate_ionomer_analytical.h>

Inheritance diagram for FuelCellShop::MicroScale::IonomerAgglomerateAnalytical:
Inheritance graph
[legend]
Collaboration diagram for FuelCellShop::MicroScale::IonomerAgglomerateAnalytical:
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...
 
 IonomerAgglomerateAnalytical ()
 Constructors. More...
 
 IonomerAgglomerateAnalytical (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
IonomerAgglomerateAnalytical
const * 
PROTOTYPE
 

Private Member Functions

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...
 
void check_kinetics ()
 

Private Attributes

bool checked_kinetics
 

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

Class that gives the analytical solution to an ionomer-filled agglomerate problem in 1D.

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

Theory

The volumetric current density is

\[ \nabla \cdot \vec{i} = \frac{1}{1-\epsilon_V} 4F \bar{V}_{agg} \frac{P_{O_2}}{H_{O_2,N}}\left[\frac{1}{E_r k_c} + \frac{\delta_{agg}r_{agg}^2}{3\left(r_{agg}+\delta_{agg}\right)D_{O_2,N}}\right]^{-1} \]

The effectiveness factor is obtained from the analytical solution of the oxygen transport equation on the agglomerate domain,

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

where $ \phi_L $ is Thieles modulus, which characterizes the reaction-transport process for a given geometry. For a sphere, the characteristic length is $ \frac{r_{agg}}{3} $, so Thiele's modulus becomes

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

The term $ \left(1-\varepsilon_V\right)\bar{V}_{agg} $ is an active area scaling factor. Typically, the active area for an electrode is given as the area per volume of catalyst layer. Since in the agglomerate model the platinum is only found in the core of the agglomerate, the active area has to be adjusted accordingly. Dividing by $ \left(1-\varepsilon_V\right) $, where $ \epsilon_V $ is the porosity of the electrode, gives the active area of Pt ( $ cm^2_{Pt} $) per volume of agglomerate ( $ cm^3_{agg} $). Then, dividing by $ \bar{V}_{agg} $ gives the active area of Pt ( $ cm^2_{Pt} $) per volume of agglomerate core ( $ cm^3_{agg, core} $). The variable ${V}_{agg}$ is defined as

\[ \bar{V}_{agg} = \frac{V_{agg}}{V_{tot}} = \frac{\frac{4\pi r_{agg}^3}{3}}{\frac{4\pi \left(r_{agg}+\delta_{agg}\right)^3}{3}} = \dfrac{r_{agg}^3}{\left(r_{agg}+\delta_{agg}\right)^3} \]

is a scaling factor determined as the ratio of the volume of the agglomerate core to the volume of the entire agglomerate.

Author
P. Dobson, P. Wardlaw and M. Secanell 2009-13

Constructor & Destructor Documentation

FuelCellShop::MicroScale::IonomerAgglomerateAnalytical::IonomerAgglomerateAnalytical ( )
protected

Constructors.

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

Member Function Documentation

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

Returns extra contribution to volume of layer.

Implements FuelCellShop::MicroScale::MicroScaleBase.

void FuelCellShop::MicroScale::IonomerAgglomerateAnalytical::check_kinetics ( )
private
virtual SolutionMap FuelCellShop::MicroScale::IonomerAgglomerateAnalytical::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::IonomerAgglomerateAnalytical::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::IonomerAgglomerateAnalytical::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::IonomerAgglomerateAnalytical::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::IonomerAgglomerateAnalytical::create_replica ( )
inlineprotectedvirtual

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

Implements FuelCellShop::MicroScale::MicroScaleBase.

virtual void FuelCellShop::MicroScale::IonomerAgglomerateAnalytical::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::IonomerAgglomerateAnalytical::get_film_thickness ( )
inlineprotectedvirtual
virtual std::string FuelCellShop::MicroScale::IonomerAgglomerateAnalytical::get_name ( )
inlinevirtual

Return name of class instance, i.e.

concrete name.

Implements FuelCellShop::MicroScale::MicroScaleBase.

References concrete_name.

virtual double FuelCellShop::MicroScale::IonomerAgglomerateAnalytical::get_radius ( )
inlineprotectedvirtual
virtual void FuelCellShop::MicroScale::IonomerAgglomerateAnalytical::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::IonomerAgglomerateAnalytical::set_structure ( )
protectedvirtual

Member Data Documentation

bool FuelCellShop::MicroScale::IonomerAgglomerateAnalytical::checked_kinetics
private
const std::string FuelCellShop::MicroScale::IonomerAgglomerateAnalytical::concrete_name
static
IonomerAgglomerateAnalytical const* FuelCellShop::MicroScale::IonomerAgglomerateAnalytical::PROTOTYPE
staticprotected

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