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

Class used to store data and provide information regarding the electrolyte. More...

#include <nafion.h>

Inheritance diagram for FuelCellShop::Material::Nafion:
Inheritance graph
[legend]
Collaboration diagram for FuelCellShop::Material::Nafion:
Collaboration graph
[legend]

Public Member Functions

Constructors, destructor, and parameter initalization
 Nafion (const bool)
 PROTOTYE Constructor.
 
 Nafion (std::string name="Nafion")
 Constructor The constructor initialize parameters using the default values.
 
 ~Nafion ()
 Destructor.
 
virtual void declare_parameters (ParameterHandler &param) const
 Declare parameters.
 
virtual void set_parameters (const std::vector< std::string > &name_dvar, const std::vector< double > &value_dvar, ParameterHandler &param)
 Member function used to change the values in the parameter file for a given list of parameters.
 
virtual void initialize (ParameterHandler &param)
 Member function used to read in data and initialize the necessary data from the parameter file to compute the coefficients.
 
Transport properties and derivatives accessor methods
virtual void sorption_isotherm (std::vector< double > &) const
 Compute the equilibrium water content, \( \lambda_{eq} \), inside the Nafion for vapor-equilibriated case, at every quadrature point in the cell.
 
virtual void sorption_isotherm_derivative (std::map< VariableNames, std::vector< double > > &) const
 Compute the derivatives for water sorption source terms, \( \frac{\partial \lambda_{eq}}{\partial u} \), at every quadrature point in the cell.
 
virtual void proton_conductivity (double &) const
 Compute the proton conductivity, \( \sigma_{H^+} \) [S/cm], inside the nafion for a case of constant \( \lambda \) and \( T \).
 
virtual void proton_conductivity (std::vector< double > &) const
 Compute the proton conductivity, \( \sigma_{H^+} \) [S/cm], inside the nafion, at every quadrature point in the cell.
 
virtual void proton_conductivity_derivative (std::map< VariableNames, std::vector< double > > &) const
 Compute the derivatives of proton conductivity at every quadrature point in the cell.
 
virtual void water_diffusivity (double &) const
 Compute the water diffusivity, \( D_{\lambda} \) [cm^2/s], inside the nafion for a case of constant \( \lambda \) and \( T \).
 
virtual void water_diffusivity (std::vector< double > &) const
 Compute the water diffusivity, \( D_{\lambda} \) [cm^2/s], inside the nafion at every quadrature point in the cell.
 
virtual void water_diffusivity_derivative (std::map< VariableNames, std::vector< double > > &) const
 Compute the derivatives of water diffusivity at every quadrature point in the cell.
 
virtual void electroosmotic_drag (std::vector< double > &) const
 Compute the electro-osmotic drag coefficient inside the nafion at every quadrature point in the cell.
 
virtual void electroosmotic_drag_derivative (std::map< VariableNames, std::vector< double > > &) const
 Compute the derivatives of electro-osmotic drag coefficient, at every quadrature point in the cell.
 
virtual void oxygen_diffusivity (double &) const
 Compute the oxygen diffusivity, [cm^2/s], inside the nafion for a constant \( T \).
 
virtual void oxygen_diffusivity (std::vector< double > &) const
 Compute the oxygen diffusivity, [cm^2/s], inside the nafion at every quadrature point in the cell.
 
virtual void oxygen_diffusivity_derivative (std::map< VariableNames, std::vector< double > > &) const
 Compute the derivatives of oxygen diffusivity, at every quadrature point in the cell.
 
virtual void proton_diffusivity (double &) const
 Compute the proton diffusivity, [cm^2/s], inside the nafion for constant case.
 
- Public Member Functions inherited from FuelCellShop::Material::PolymerElectrolyteBase
double get_density () const
 Get the density [gm/cm^3] of the dry polymer electrolyte material.
 
double get_H_O2 () const
 Get Henry's constant [Pa-cm^3/mol] for oxygen dissolution in the polymer electrolyte.
 
double get_H_H2 () const
 Get Henry's constant [Pa-cm^3/mol] for hydrogen dissolution in the polymer electrolyte.
 
double get_EW () const
 Get Equivalent Weight (grams of dry polymer electrolyte per moles of \( SO_3^- \)) of the polymer electrolyte material.
 
double get_permittivity () const
 Get permittivity of the polymer electrolyte material.
 
void set_p_t (const double &p_t)
 Specify the total pressure in Pascals.
 
void set_T (const double &Temp)
 Specify the temperature [Kelvin] in the polymer electrolyte for isothermal case.
 
void set_lambda (const double &L)
 Specify the water content in the polymer electrolyte for constant lambda case.
 
void set_membrane_water_content (const FuelCellShop::SolutionVariable &l_in)
 Set the solution variable, membrane water content \( \lambda \).
 
void set_temperature (const FuelCellShop::SolutionVariable &T_in)
 Set the solution variable, temperature \( T \) [Kelvin].
 
void set_water_molar_fraction (const FuelCellShop::SolutionVariable &x_in)
 Set the solution variable, water vapor molar fraction \( x_{H_2O} \).
 
- Public Member Functions inherited from FuelCellShop::Material::BaseMaterial
void set_derivative_flags (const std::vector< VariableNames > &flags)
 Set the variables for which you would like to compute the derivatives.
 
const std::string & name_material ()
 Return the name of the layer.
 
virtual void print_material_properties () const
 This function prints out the material properties.
 

Static Public Attributes

static const std::string concrete_name
 Name of the class.
 

Private Member Functions

void modify_parameters (const unsigned int &index, const std::string &method)
 Method to modify parameters, without declaring and initializing the parameter file.
 

Friends

Friend class for Unit Testing
class ::NafionTest
 Friend class for testing purposes.
 

Instance Delivery

static Nafion const * PROTOTYPE
 Create prototype for the layer.
 
virtual boost::shared_ptr
< FuelCellShop::Material::PolymerElectrolyteBase
create_replica ()
 This member function is used to create an object of type Nafion material.
 

Additional Inherited Members

- Static Public Member Functions inherited from FuelCellShop::Material::PolymerElectrolyteBase
static void declare_PolymerElectrolyte_parameters (ParameterHandler &param)
 Function used to declare all the data necessary in the parameter files for all PolymerElectrolyteBase children.
 
static void set_PolymerElectrolyte_parameters (const std::vector< std::string > &name_dvar, const std::vector< double > &value_dvar, ParameterHandler &param)
 
static boost::shared_ptr
< FuelCellShop::Material::PolymerElectrolyteBase
create_PolymerElectrolyte (ParameterHandler &param, std::string polymer_electrolyte_name)
 Function called in create_CatalystLayer and used to select the appropriate PolymerElectrolyteBase children that will be used in the layer.
 
- Protected Types inherited from FuelCellShop::Material::PolymerElectrolyteBase
typedef std::map< std::string,
FuelCellShop::Material::PolymerElectrolyteBase * > 
_mapFactory
 This object is used to store all objects of type PolymerElectrolyteBase.
 
- Protected Member Functions inherited from FuelCellShop::Material::PolymerElectrolyteBase
 PolymerElectrolyteBase (std::string name)
 Constructor.
 
 PolymerElectrolyteBase ()
 Constructor.
 
virtual ~PolymerElectrolyteBase ()
 Destructor.
 
- Static Protected Member Functions inherited from FuelCellShop::Material::PolymerElectrolyteBase
static _mapFactoryget_mapFactory ()
 
- Protected Attributes inherited from FuelCellShop::Material::PolymerElectrolyteBase
double EW
 Equivalent weight.
 
double rho_M
 Dry polymer electrolyte density [gm/cm^3].
 
double H_O2
 Henry's Constant [Pa-cm^3/mol] for dissolution of oxygen.
 
double H_H2
 Henry's Constant [Pa-cm^3/mol] for dissolution of hydroge.
 
double permittivity
 Permittivity of the material.
 
double T
 Temperature [Kelvins] for isothermal case.
 
double lambda
 Membrane water content, \( \lambda \) for constant lambda case.
 
double p_total
 Total pressure (in Pascals).
 
double sigma_p
 Proton conductivity value [S/cm], given in the parameter file; used with "Constant" method.
 
double diffusion_w
 Diffusion of water in polymer electrolyte (if constant option is used), [cm2/s].
 
double given_n_drag
 Given electroosmotic drag value in the parameter file.
 
double D_O2
 Diffusion coefficient of oxygen [cm^2/s], given in the parameter file.
 
double D_Protons
 Diffusion coefficient of protons [cm^2/s], given in the parameter file.
 
std::string method_conductivity
 Method/Semi-empirical relation to compute protonic conductivity.
 
std::string method_sorption
 Method to compute equilibrium water content value from sorption isotherm.
 
std::string method_diffusivity
 Method/semi-empirical relation to compute water diffusivity.
 
std::string method_electroosmotic_drag
 Method/semi-empirical relation to compute Electro-osmotic drag.
 
FuelCellShop::SolutionVariable lambda_var
 Solution variable, membrane water content \( \lambda \).
 
FuelCellShop::SolutionVariable T_var
 Solution variable, temperature \( T \).
 
FuelCellShop::SolutionVariable xwater_var
 Solution variable, water vapor molar fraction \( x_{H_2O} \).
 

Detailed Description

Class used to store data and provide information regarding the electrolyte.

In this case the electrolyte that is setup is Nafion. In particular the data coded in this class is obtained from the literature from Nafion 1100, usually from NRE 211 properties.

Literature sources are:

(Madhur please fill this part – Add references to each section too.)

In the parameter file the following parameters can be specified within the subsections specified below:

subsection Fuel cell data
subsection Materials
subsection Nafion
set Method for sorption isotherm = Previous # Options are Previous | Liu09 -- Method to compute equilibrium lambda from sorption isotherm - Depends on Water molar fraction and Temperature
set Method to compute proton conductivity = NRE211 # Options are: Constant|Springer|NRE211|Iden11 -- Method used to compute proton conductivity inside the membrane - Depends on lambda and T
set Proton conductivity [S/cm] = 0.1 # Proton conductivity inside the membrane, S/cm
set Method to compute water diffusion = Springer # Options are: "Constant|Springer|Motupally" -- Method used to compute diffusion of water inside the membrane - Depends on lambda and T
set Water diffusion coefficient = 2e- # Water diffusion coefficient inside the membrane
set Electro-osmotic drag method = Springer # Options are: Constant|Springer -- Method to compute nd. Springer depends on water content
set Electro-osmotic drag coefficient = 1.0 # Number of water molecules dragged by one proton
set Oxygen diffusion coefficient [cm^2/s] = 9.726e-6 # From J. Peron et al., “Properties of Nafion NR-211 membranes for PEMFCs”
set Proton diffusion coefficient [cm^2/s] = 9.2e-5 # Peter Dobsons thesis page 42
set Henry's Law Constant for Oxygen [Pa cm^3/mol] = 3.1664e10
set Henry's Law Constant for Hydrogen [Pa cm^3/mol] = 6.69e10
end
end
end

Usage Details:

As with most routines you need to first declare_parameters, then set_parameters (only if using optimization/parameter estimation), then initialize. After this the class is ready for use.

See for example FuelCell::OperatingConditions class for more details.

Authors
M. Secanell and M. Bhaiya

Constructor & Destructor Documentation

FuelCellShop::Material::Nafion::Nafion ( const bool  )

PROTOTYE Constructor.

Warning
For internal use only.
FuelCellShop::Material::Nafion::Nafion ( std::string  name = "Nafion")

Constructor The constructor initialize parameters using the default values.

This is so that if I do not want to call declare_parameters and initialize, I can still use the routine with the hard coded values.

High Priority Todo:
Make this private and remove name.
FuelCellShop::Material::Nafion::~Nafion ( )

Destructor.

Member Function Documentation

virtual boost::shared_ptr<FuelCellShop::Material::PolymerElectrolyteBase > FuelCellShop::Material::Nafion::create_replica ( )
inlineprivatevirtual

This member function is used to create an object of type Nafion material.

Warning
This class MUST be redeclared in every child.

Reimplemented from FuelCellShop::Material::PolymerElectrolyteBase.

virtual void FuelCellShop::Material::Nafion::declare_parameters ( ParameterHandler &  param) const
virtual

Declare parameters.

High Priority Todo:
Make it protected

In the parameter file the following parameters can be specified within the subsections specified below:

subsection Fuel cell data
subsection Materials
subsection Nafion
set Method for sorption isotherm = Previous # Options are Previous | Liu09 -- Method to compute equilibrium lambda from sorption isotherm - Depends on Water molar fraction and Temperature
set Method to compute proton conductivity = NRE211 # Options are: Constant|Springer|NRE211|Iden11 -- Method used to compute proton conductivity inside the membrane - Depends on lambda and T
set Proton conductivity [S/cm] = 0.1 # Proton conductivity inside the membrane, S/cm
set Method to compute water diffusion = Springer # Options are: "Constant|Springer|Motupally" -- Method used to compute diffusion of water inside the membrane - Depends on lambda and T
set Water diffusion coefficient = 2e- # Water diffusion coefficient inside the membrane
set Electro-osmotic drag method = Springer # Options are: Constant|Springer -- Method to compute nd. Springer depends on water content
set Electro-osmotic drag coefficient = 1.0 # Number of water molecules dragged by one proton
set Oxygen diffusion coefficient [cm^2/s] = 9.726e-6 # From J. Peron et al., “Properties of Nafion NR-211 membranes for PEMFCs”
set Proton diffusion coefficient [cm^2/s] = 9.2e-5 # Peter Dobsons thesis page 42
set Henry's Law Constant for Oxygen [Pa cm^3/mol] = 3.1664e10
set Henry's Law Constant for Hydrogen [Pa cm^3/mol] = 6.69e10
end
end
end

Reimplemented from FuelCellShop::Material::PolymerElectrolyteBase.

virtual void FuelCellShop::Material::Nafion::electroosmotic_drag ( std::vector< double > &  ) const
virtual

Compute the electro-osmotic drag coefficient inside the nafion at every quadrature point in the cell.

It takes vector as an input argument and values are passed by reference. Note that the double return method is not implemented for electro-osmotic drag coefficients because it is required only when \( \lambda \) is one of the solution variables in the application. set_membrane_water_content should be called before using this method.

Reimplemented from FuelCellShop::Material::PolymerElectrolyteBase.

virtual void FuelCellShop::Material::Nafion::electroosmotic_drag_derivative ( std::map< VariableNames, std::vector< double > > &  ) const
virtual

Compute the derivatives of electro-osmotic drag coefficient, at every quadrature point in the cell.

The derivatives are computed based on the flags set by the set_derivative_flags method. It takes map as an input argument by reference, in which Key corresponds to the variable about which derivative is being computed, i.e., VariableNames and Value corresponds to the vector storing the derivative values. set_membrane_water_content should be called before using this method. Also, this method should only be called when atleast there is one derivative flag.

Reimplemented from FuelCellShop::Material::PolymerElectrolyteBase.

virtual void FuelCellShop::Material::Nafion::initialize ( ParameterHandler &  param)
virtual

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

Reimplemented from FuelCellShop::Material::PolymerElectrolyteBase.

void FuelCellShop::Material::Nafion::modify_parameters ( const unsigned int &  index,
const std::string &  method 
)
inlineprivate

Method to modify parameters, without declaring and initializing the parameter file.

It takes two arguments, first one (unsigned int) corresponds to a particular type of method and second one (std::string) corresponds to various implementations for that method type. index corresponds to following methods:

  • 1: protonic conductivity methods
  • 2: water diffusivity methods
  • 3: electro-osmotic drag methods
  • 4: sorption isotherm methods
    Note
    This function is used by the unit testing for this class. For method strings, look at declare_parameters() method.

References FuelCellShop::Material::PolymerElectrolyteBase::method_conductivity, FuelCellShop::Material::PolymerElectrolyteBase::method_diffusivity, FuelCellShop::Material::PolymerElectrolyteBase::method_electroosmotic_drag, and FuelCellShop::Material::PolymerElectrolyteBase::method_sorption.

virtual void FuelCellShop::Material::Nafion::oxygen_diffusivity ( double &  ) const
virtual

Compute the oxygen diffusivity, [cm^2/s], inside the nafion for a constant \( T \).

Before calling this method, set_T method should be used for setting the constant temperature value. It takes a double as an input argument and value is passed by reference.

Reimplemented from FuelCellShop::Material::PolymerElectrolyteBase.

virtual void FuelCellShop::Material::Nafion::oxygen_diffusivity ( std::vector< double > &  ) const
virtual

Compute the oxygen diffusivity, [cm^2/s], inside the nafion at every quadrature point in the cell.

It takes vector as an input argument and values are passed by reference. set_temperature should be called before using this method.

Reimplemented from FuelCellShop::Material::PolymerElectrolyteBase.

virtual void FuelCellShop::Material::Nafion::oxygen_diffusivity_derivative ( std::map< VariableNames, std::vector< double > > &  ) const
virtual

Compute the derivatives of oxygen diffusivity, at every quadrature point in the cell.

The derivatives are computed based on the flags set by the set_derivative_flags method. It takes map as an input argument by reference, in which Key corresponds to the variable about which derivative is being computed, i.e., VariableNames and Value corresponds to the vector storing the derivative values. set_temperature should be called before using this method. Also, this method should only be called when atleast there is one derivative flag.

Reimplemented from FuelCellShop::Material::PolymerElectrolyteBase.

virtual void FuelCellShop::Material::Nafion::proton_conductivity ( double &  ) const
virtual

Compute the proton conductivity, \( \sigma_{H^+} \) [S/cm], inside the nafion for a case of constant \( \lambda \) and \( T \).

Before calling this method, set_T method should be used for setting the constant temperature value. If the constant \( \lambda \) value is required to be different from the default value 12.0, then set_lambda method should be used. It takes a double as an input argument and value is passed by reference.

Remarks
This method is recommended only for multi-scale models. In case of macrohomogeneous models, constant values should always be set before the variable ones, otherwise it may give erroneous results.

Reimplemented from FuelCellShop::Material::PolymerElectrolyteBase.

virtual void FuelCellShop::Material::Nafion::proton_conductivity ( std::vector< double > &  ) const
virtual

Compute the proton conductivity, \( \sigma_{H^+} \) [S/cm], inside the nafion, at every quadrature point in the cell.

It is computed as a function of \( \lambda \) and \( T \), hence solution setting methods should be called accordingly for them, whether constant or variable. It is recommended to set the constant ones in the initialization of the application, unless you are solving for multi-scale model. It takes vector as an input argument and values are passed by reference.

Warning
Precaution must be used while using two different solution setting methods, i.e., either constant or variable for a single solution variable on the same electrolyte object. You cannot use constant solution setting methods for this object, if variable solution setting methods are already used for a single solution variable. In case of constant \( \lambda \) and \( T \), vector size should be set equal to the number of quadrature points, before passing to this function.

Reimplemented from FuelCellShop::Material::PolymerElectrolyteBase.

virtual void FuelCellShop::Material::Nafion::proton_conductivity_derivative ( std::map< VariableNames, std::vector< double > > &  ) const
virtual

Compute the derivatives of proton conductivity at every quadrature point in the cell.

The derivatives are computed based on the flags set by the set_derivative_flags method. It takes map as an input argument by reference, in which Key corresponds to the variable about which derivative is being computed, i.e., VariableNames and Value corresponds to the vector storing the derivative values. Note that this method should not be used when both \( \lambda \) and \( T \) are constant. Hence, atleast set_membrane_water_content or set_temperature should be called before using this method. Also, this method should only be called when atleast there is one derivative flag.

Reimplemented from FuelCellShop::Material::PolymerElectrolyteBase.

virtual void FuelCellShop::Material::Nafion::proton_diffusivity ( double &  ) const
virtual

Compute the proton diffusivity, [cm^2/s], inside the nafion for constant case.

It takes a double as an input argument and value is passed by reference. It basically returns a constant value specified using the parameter file.

Reimplemented from FuelCellShop::Material::PolymerElectrolyteBase.

virtual void FuelCellShop::Material::Nafion::set_parameters ( const std::vector< std::string > &  name_dvar,
const std::vector< double > &  value_dvar,
ParameterHandler &  param 
)
virtual

Member function used to change the values in the parameter file for a given list of parameters.

  • name_dvar should ideally contain the string as it would appear in the input parameter file.
  • value_dvar contains the value that the variable should be set at.
  • param is the ParameterHandler that contains all the information that has been read from file.

List of available std::string that can be changed, i.e. name_dvar are given below:

  • "sigma_p" : protonic conductivity [S/cm] of Nafion.
  • "diffusion_w" : water diffusion coefficient [cm^2/s] of Nafion.
  • "D_O2_N" : oxygen diffusion coefficient [cm^2/s] of Nafion.
  • "H_O2" : Henry's law constant for oxygen dissolution in Nafion [Pa-cm^3/mol].
  • "H_H2" : Henry's law constant for hydrogen dissolution in Nafion [Pa-cm^3/mol].
High Priority Todo:
Make it protected

Reimplemented from FuelCellShop::Material::PolymerElectrolyteBase.

virtual void FuelCellShop::Material::Nafion::sorption_isotherm ( std::vector< double > &  ) const
virtual

Compute the equilibrium water content, \( \lambda_{eq} \), inside the Nafion for vapor-equilibriated case, at every quadrature point in the cell.

It takes a vector as an input argument and values are passed by reference. It is required to call set_water_molar_fraction method atleast before computing sorption isotherm values.

Reimplemented from FuelCellShop::Material::PolymerElectrolyteBase.

virtual void FuelCellShop::Material::Nafion::sorption_isotherm_derivative ( std::map< VariableNames, std::vector< double > > &  ) const
virtual

Compute the derivatives for water sorption source terms, \( \frac{\partial \lambda_{eq}}{\partial u} \), at every quadrature point in the cell.

The derivatives are computed based on the flags set by the set_derivative_flags method. It takes map as an input argument by reference, in which Key corresponds to the variable about which derivative is being computed, i.e., VariableNames and Value corresponds to the vector storing the derivative values. It is required to call set_water_molar_fraction method atleast before computing sorption isotherm values. Also, this method should only be called when atleast there is one derivative flag.

Reimplemented from FuelCellShop::Material::PolymerElectrolyteBase.

virtual void FuelCellShop::Material::Nafion::water_diffusivity ( double &  ) const
virtual

Compute the water diffusivity, \( D_{\lambda} \) [cm^2/s], inside the nafion for a case of constant \( \lambda \) and \( T \).

Before calling this method, set_T method should be used for setting the constant temperature value. If the constant \( \lambda \) value is required to be different from the default value 12.0, then set_lambda method should be used. It takes a double as an input argument and value is passed by reference.

Remarks
This method is recommended only for multi-scale models. In case of macrohomogeneous models, it's not required in particular because \( D_{\lambda} \) is required only when \( \lambda \) is one of the solution variables in the application.

Reimplemented from FuelCellShop::Material::PolymerElectrolyteBase.

virtual void FuelCellShop::Material::Nafion::water_diffusivity ( std::vector< double > &  ) const
virtual

Compute the water diffusivity, \( D_{\lambda} \) [cm^2/s], inside the nafion at every quadrature point in the cell.

It is computed as a function of \( \lambda \) and \( T \), hence solution setting methods should be called accordingly for them, whether constant or variable. It is recommended to set the constant ones in the initialization of the application. Note that this method should not be used when both \( \lambda \) and \( T \) are constant. Hence, atleast set_membrane_water_content or set_temperature should be called before using this method. It takes vector as an input argument and values are passed by reference.

Reimplemented from FuelCellShop::Material::PolymerElectrolyteBase.

virtual void FuelCellShop::Material::Nafion::water_diffusivity_derivative ( std::map< VariableNames, std::vector< double > > &  ) const
virtual

Compute the derivatives of water diffusivity at every quadrature point in the cell.

The derivatives are computed based on the flags set by the set_derivative_flags method. It takes map as an input argument by reference, in which Key corresponds to the variable about which derivative is being computed, i.e., VariableNames and Value corresponds to the vector storing the derivative values. Note that this method should not be used when both \( \lambda \) and \( T \) are constant. Hence, atleast set_membrane_water_content or set_temperature should be called before using this method. Also, this method should only be called when atleast there is one derivative flag.

Reimplemented from FuelCellShop::Material::PolymerElectrolyteBase.

Friends And Related Function Documentation

friend class ::NafionTest
friend

Friend class for testing purposes.

Member Data Documentation

const std::string FuelCellShop::Material::Nafion::concrete_name
static

Name of the class.

This name is used to select the layer.

Nafion const* FuelCellShop::Material::Nafion::PROTOTYPE
staticprivate

Create prototype for the layer.


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