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 | Private Attributes | 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. More...
 
 Nafion (std::string name="Nafion")
 Constructor The constructor initialize parameters using the default values. More...
 
 ~Nafion ()
 Destructor. More...
 
virtual void declare_parameters (ParameterHandler &param) const
 Declare parameters. More...
 
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. More...
 
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. More...
 
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. More...
 
virtual void proton_conductivity (double &, const double, const double) const
 Compute the proton conductivity, $ \sigma_{H^+} $ [S/cm], inside the nafion, at every quadrature point in the cell. More...
 
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 $. More...
 
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. More...
 
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. More...
 
virtual void water_diffusivity (double &, const double, const double) const
 Compute the water diffusivity, $ D_{\lambda} $ [cm^2/s], inside the nafion at every quadrature point in the cell. More...
 
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 $. More...
 
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. More...
 
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. More...
 
virtual void electroosmotic_drag (std::vector< double > &) const
 Compute the electro-osmotic drag coefficient inside the nafion at every quadrature point in the cell. More...
 
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. More...
 
virtual void thermoosmotic_coeff (std::vector< double > &) const
 Compute the thermo-osmotic diffusion coefficient, [gm/ (cm-s-K )], inside the nafion at every quadrature point in the cell. More...
 
virtual void thermoosmotic_coeff_derivative (std::map< VariableNames, std::vector< double > > &) const
 Compute the derivatives of thermo-osmotic diffusion coefficient, at every quadrature point in the cell. More...
 
virtual void oxygen_diffusivity (double &, const double) const
 Compute the oxygen diffusivity, [cm^2/s], inside the nafion for a given $ T $. More...
 
virtual void oxygen_diffusivity (double &) const
 Compute the oxygen diffusivity, [cm^2/s], inside the nafion for a constant $ T $. More...
 
virtual void hydrogen_diffusivity (double &) const
 Compute the hydrogen diffusivity, [cm^2/s], inside the nafion for a constant $ T $. More...
 
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. More...
 
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. More...
 
virtual void proton_diffusivity (double &) const
 Compute the proton diffusivity, [cm^2/s], inside the nafion for constant case. More...
 
virtual void sorption_enthalpy (std::vector< double > &) const
 Compute the enthalpy of sorption [J/mol] of water in Nafion, at all quadrature points in the cell. More...
 
virtual void sorption_enthalpy_derivative (std::map< VariableNames, std::vector< double > > &) const
 Compute the derivatives of enthalpy of sorption of water, at every quadrature point in the cell. More...
 
Accessor methods for molar enthalpy of sorbed water and its derivatives
virtual double get_Hlambda (const double &) const
 Compute the molar enthalpy, $ \bar{H}_{\lambda} ~$ [J/mol] of sorbed water in the Nafion as a function of $ T $. More...
 
virtual double get_dHlambda_dT (const double &) const
 Compute $ \frac{\partial \bar{H}_{\lambda}}{\partial T} $ of sorbed water in the Nafion as a function of $ T $. More...
 
virtual double get_d2Hlambda_dT2 (const double &) const
 Compute $ \frac{\partial^2 \bar{H}_{\lambda}}{\partial T^2} $ of sorbed water in the Nafion as a function of $ T $. More...
 
- Public Member Functions inherited from FuelCellShop::Material::PolymerElectrolyteBase
double get_density () const
 Get the density [gm/cm^3] of the dry polymer electrolyte material. More...
 
double get_H_O2 () const
 Get Henry's constant [Pa-cm^3/mol] for oxygen dissolution in the polymer electrolyte. More...
 
double get_H_H2 () const
 Get Henry's constant [Pa-cm^3/mol] for hydrogen dissolution in the polymer electrolyte. More...
 
double get_EW () const
 Get Equivalent Weight (grams of dry polymer electrolyte per moles of $ SO_3^- $) of the polymer electrolyte material. More...
 
double get_permittivity () const
 Get permittivity of the polymer electrolyte material. More...
 
void set_p_t (const double &p_t)
 Specify the total pressure in Pascals. More...
 
void set_T (const double &Temp)
 Specify the temperature [Kelvin] in the polymer electrolyte for isothermal case. More...
 
void set_lambda (const double &L)
 Specify the water content in the polymer electrolyte for constant lambda case. More...
 
void set_membrane_water_content (const FuelCellShop::SolutionVariable &l_in)
 Set the solution variable, membrane water content $ \lambda $. More...
 
void set_temperature (const FuelCellShop::SolutionVariable &T_in)
 Set the solution variable, temperature $ T $ [Kelvin]. More...
 
void set_water_molar_fraction (const FuelCellShop::SolutionVariable &x_in)
 Set the solution variable, water vapor molar fraction $ x_{H_2O} $. More...
 
- Public Member Functions inherited from FuelCellShop::Material::BaseMaterial
void set_derivative_flags (const std::vector< VariableNames > &flags)
 Set the names of FCST solution variables with respect to which you would like to compute the derivatives of material properties. More...
 
const std::string & name_material () const
 Return the name of the layer. More...
 
virtual void print_material_properties () const
 This function prints out the material properties. More...
 

Static Public Attributes

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

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. More...
 

Private Attributes

std::map< std::string, double > springer_coeffs
 Map for proton conductivity's coefficients; used with "Springer" method. More...
 

Friends

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

Instance Delivery

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

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. More...
 
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. More...
 
- 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. More...
 
- Protected Member Functions inherited from FuelCellShop::Material::PolymerElectrolyteBase
 PolymerElectrolyteBase (std::string name)
 Constructor. More...
 
 PolymerElectrolyteBase ()
 Constructor. More...
 
virtual ~PolymerElectrolyteBase ()
 Destructor. More...
 
- Protected Member Functions inherited from FuelCellShop::Material::BaseMaterial
 BaseMaterial ()
 Constructor. More...
 
 BaseMaterial (const std::string &name)
 Constructor. More...
 
virtual ~BaseMaterial ()
 Destructor. More...
 
- Static Protected Member Functions inherited from FuelCellShop::Material::PolymerElectrolyteBase
static _mapFactoryget_mapFactory ()
 
- Protected Attributes inherited from FuelCellShop::Material::PolymerElectrolyteBase
FuelCellShop::Material::WaterVaporwater_mat
 Pointer to FuelCellShop::Material::WaterVapor object, dynamically allocated when the class is constructed. More...
 
double EW
 Equivalent weight. More...
 
double rho_M
 Dry polymer electrolyte density [gm/cm^3]. More...
 
double H_O2
 Henry's Constant [Pa-cm^3/mol] for dissolution of oxygen. More...
 
double H_H2
 Henry's Constant [Pa-cm^3/mol] for dissolution of hydroge. More...
 
double permittivity
 Permittivity of the material. More...
 
double T
 Temperature [Kelvins] for isothermal case. More...
 
double lambda
 Membrane water content, $ \lambda $ for constant lambda case. More...
 
double p_total
 Total pressure (in Pascals). More...
 
double sigma_p
 Proton conductivity value [S/cm], given in the parameter file; used with "Constant" method. More...
 
double diffusion_w
 Diffusion of water in polymer electrolyte (if constant option is used), [cm2/s]. More...
 
double given_n_drag
 Given electroosmotic drag value in the parameter file. More...
 
double given_thermoosmotic_coeff
 Given thermo-osmotic diffusion coefficient [gm/(cm-s-K )] in the parameter file. More...
 
double given_enthalpy_sorption
 Given enthalpy of sorption of water [J/mol] in the parameter file. More...
 
double D_O2
 Diffusion coefficient of oxygen [cm^2/s], given in the parameter file. More...
 
double D_H2
 Effective diffusion coefficient of hydrogen [cm^2/s], given in the parameter file. More...
 
double D_Protons
 Diffusion coefficient of protons [cm^2/s], given in the parameter file. More...
 
std::string method_conductivity
 Method/Semi-empirical relation to compute protonic conductivity. More...
 
std::string method_sorption
 Method to compute equilibrium water content value from sorption isotherm. More...
 
std::string method_diffusivity
 Method/semi-empirical relation to compute water diffusivity. More...
 
std::string method_electroosmotic_drag
 Method/semi-empirical relation to compute Electro-osmotic drag. More...
 
std::string method_thermoosmosis
 Method/semi-empirical relation to compute thermo-osmotic diffusion coefficient. More...
 
std::string method_enthalpy_sorption
 Method/semi-empirical relation to compute enthalpy of sorption of water. More...
 
FuelCellShop::SolutionVariable lambda_var
 Solution variable, membrane water content $ \lambda $. More...
 
FuelCellShop::SolutionVariable T_var
 Solution variable, temperature $ T $. More...
 
FuelCellShop::SolutionVariable xwater_var
 Solution variable, water vapor molar fraction $ x_{H_2O} $. More...
 
- Protected Attributes inherited from FuelCellShop::Material::BaseMaterial
const std::string name
 Name of the layer. More...
 
std::vector< VariableNamesderivative_flags
 Flags for derivatives: These flags are used to request derivatives of material properties. More...
 

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.

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 = Hinatsu # Options are Hinatsu | 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
* subsection Springer coefficients --- This section is used to control the coefficients if Springer is used which are of the form: (A \lambda + B) exp [ C (1/303 - 1/T)
* set Proton conductivity's first coefficient = 0.005139
* set Proton conductivity's second coefficient = -0.00326
* set Proton conductivity's third coefficient = 1268.0
* end
* 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 Method to compute thermo-osmotic diffusion coefficient = Kim09 # Options are: Constant | Kim09 -- Method to compute thermo-osmotic diffusion coefficient - Depends on T
* set Thermo-osmotic diffusion coefficient [gm/(cm-s-K)] = -1.3e-7 # Thermo-osmotic diffusion coefficient inside the membrane [gm/(cm-s-K)].
* set Method to compute enthalpy of sorption of water = Constant # Options are: Constant -- Method to compute enthalpy of sorption of water - may depend on lambda and T
* set Enthalpy of sorption of water [J/mol] = 45000.0 # Heat released when one mole of water is sorbed inside the membrane.
* 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, and 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 Method to compute thermo-osmotic diffusion coefficient = Kim09 # Options are: Constant | Kim09 -- Method to compute thermo-osmotic diffusion coefficient - Depends on T
* set Thermo-osmotic diffusion coefficient [gm/(cm-s-K)] = -1.3e-7 # Thermo-osmotic diffusion coefficient inside the membrane [gm/(cm-s-K)].
* set Method to compute enthalpy of sorption of water = Constant # Options are: Constant -- Method to compute enthalpy of sorption of water - may depend on lambda and T
* set Enthalpy of sorption of water [J/mol] = 45000.0 # Heat released when one mole of water is sorbed inside the membrane.
* 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 double FuelCellShop::Material::Nafion::get_d2Hlambda_dT2 ( const double &  ) const
virtual

Compute $ \frac{\partial^2 \bar{H}_{\lambda}}{\partial T^2} $ of sorbed water in the Nafion as a function of $ T $.

It takes Temperature, $ T ~$ [Kelvin] as input by reference and returns the double value corresponding to the second derivative.

Reimplemented from FuelCellShop::Material::PolymerElectrolyteBase.

virtual double FuelCellShop::Material::Nafion::get_dHlambda_dT ( const double &  ) const
virtual

Compute $ \frac{\partial \bar{H}_{\lambda}}{\partial T} $ of sorbed water in the Nafion as a function of $ T $.

It takes Temperature, $ T ~$ [Kelvin] as input by reference and returns the double value corresponding to the derivative.

Reimplemented from FuelCellShop::Material::PolymerElectrolyteBase.

virtual double FuelCellShop::Material::Nafion::get_Hlambda ( const double &  ) const
virtual

Compute the molar enthalpy, $ \bar{H}_{\lambda} ~$ [J/mol] of sorbed water in the Nafion as a function of $ T $.

It takes Temperature, $ T ~$ [Kelvin] as input by reference and returns the double value corresponding to molar enthalpy.

Reimplemented from FuelCellShop::Material::PolymerElectrolyteBase.

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

Compute the hydrogen 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::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: thermo-osmotic coefficient methods
  • 5: sorption isotherm methods
  • 6: sorption enthalpy 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, FuelCellShop::Material::PolymerElectrolyteBase::method_enthalpy_sorption, FuelCellShop::Material::PolymerElectrolyteBase::method_sorption, and FuelCellShop::Material::PolymerElectrolyteBase::method_thermoosmosis.

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

Compute the oxygen diffusivity, [cm^2/s], inside the nafion for a given $ T $.

It can be called by either constant or variable solution setting methods to avoid duplicate equations. The first parameter is the output oxygen diffusivity and the second one is temperature, $ T $ [K], used as input parameter.

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 double  ,
const 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 $. It can be called by either constant or variable solution setting methods to avoid duplicate equations. The first parameter is the output bulk proton conductivity and the two following are input parameters such as temperature, $ T $ [K], and water content, $ \lambda $ [-].

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::sorption_enthalpy ( std::vector< double > &  ) const
virtual

Compute the enthalpy of sorption [J/mol] of water in Nafion, at all quadrature points 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 thermo-osmotic diffusion coefficients because it is required only when $ T$ is one of the solution variables in the application. set_temperature should be called before using this method.

Reimplemented from FuelCellShop::Material::PolymerElectrolyteBase.

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

Compute the derivatives of enthalpy of sorption of water, 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::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::thermoosmotic_coeff ( std::vector< double > &  ) const
virtual

Compute the thermo-osmotic diffusion coefficient, [gm/ (cm-s-K )], 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 thermo-osmotic diffusion coefficients because it is required only when $ T$ is one of the solution variables in the application. set_temperature should be called before using this method.

Reimplemented from FuelCellShop::Material::PolymerElectrolyteBase.

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

Compute the derivatives of thermo-osmotic diffusion 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_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::water_diffusivity ( double &  ,
const double  ,
const 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 $. It can be called by either constant or variable solution setting methods to avoid duplicate equations. The first parameter is the output water diffusivity and the two following are input parameters such as temperature, $ T $ [K], and water content, $ \lambda $ [-].

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.

std::map<std::string, double> FuelCellShop::Material::Nafion::springer_coeffs
private

Map for proton conductivity's coefficients; used with "Springer" method.

Conductivity is given by

$ \quad \sigma = \left( A \lambda + B \right) exp \left[ C \left( \frac{1}{303} - \frac{1}{T} \right) \right] \quad $ [S/cm]


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