OpenFCST: The open-source Fuel Cell Simulation Toolbox
|
Virtual class used to provide the interface for all GasDiffusionLayer children. More...
#include <gas_diffusion_layer.h>
Public Member Functions | |
Initalization | |
virtual void | set_diffusion_species_name (std::string &name) |
Member function used by some applications such as dummyGDL in order to know which value to return. | |
Accessors and info | |
const std::type_info & | get_base_type () const |
This member function returns a type_info object with the name of the base layer type the inherited class belongs to, i.e. | |
virtual void | test_class () const |
Class test. | |
Effective property calculators | |
virtual void | effective_gas_diffusivity (const double &, double &) const |
Return the effective diffusivty in the GDL. | |
virtual void | effective_gas_diffusivity (const double &, Tensor< 2, dim > &) const |
Return the effective diffusivty in the GDL. | |
virtual void | effective_gas_diffusivity (Table< 2, double > &D_eff) const |
Return the effective diffusivty in the GDL for all the gases assigned to the layer using set_gases_and_compute. | |
virtual void | effective_gas_diffusivity (Table< 2, Tensor< 2, dim > > &D_eff) const |
Return a tensor with the effective diffusivty in the GDL for all the gases assigned to the layer using set_gases_and_compute. | |
virtual void | derivative_effective_gas_diffusivity (std::vector< Table< 2, Tensor< 2, dim > > > &) const |
Return the derivative of the effective gas diffusion in the GDL with respect to either the solution or design parameters for all the gases assigned to the layer using set_gases_and_compute. | |
virtual void | effective_electron_conductivity (double &) const |
Compute the effective electron conductivity in the GDL. | |
virtual void | effective_electron_conductivity (const double &, double &) const |
Compute the effective electron conductivity in the GDL. | |
virtual void | effective_electron_conductivity (Tensor< 2, dim > &) const |
Compute the effective electron conductivity in the GDL. | |
virtual void | effective_electron_conductivity (const double &, Tensor< 2, dim > &) const |
Compute the effective electron conductivity in the GDL. | |
virtual void | derivative_effective_electron_conductivity (std::vector< Tensor< 2, dim > > &) const |
Compute the derivative of the effective electron conductivity in the GDL with respect to either the solution or design parameters. | |
virtual void | gas_permeablity (double &) const |
Compute the GDL gas permeability. | |
virtual void | gas_permeablity (Tensor< 2, dim > &) const |
Compute the GDL gas permeability. | |
virtual void | derivative_gas_permeablity (std::vector< Tensor< 2, dim > > &) const |
Compute the derivative of the effective gas permeability in the GDL with respect to either the solution or design parameters. | |
virtual void | liquid_permeablity (double &) const |
Compute the GDL liquid permeability. | |
virtual void | liquid_permeablity (Tensor< 2, dim > &) const |
Compute the GDL liquid permeability. | |
virtual void | derivative_liquid_permeablity (std::vector< Tensor< 2, dim > > &) const |
Compute the derivative of the effective gas diffusion in the GDL with respect to either the solution or design parameters. | |
Public Member Functions inherited from FuelCellShop::Layer::PorousLayer< dim > | |
void | set_gases_and_compute (std::vector< FuelCellShop::Material::PureGas * > &gases_in, const double &pressure_in, const double &temperature_in) |
Member function used to store all the gases that are in the pore space in the gas diffusion layer as well as their temperature [Kelvin ] and total pressure [atm ]. | |
void | compute_gas_diffusion (FuelCellShop::Material::PureGas *solute_gas, FuelCellShop::Material::PureGas *solvent_gas) |
Member function used to compute bulk diffusion coefficients and derivatives w.r.t temperature for non-isothermal case and store inside the layer. | |
void | set_gases (std::vector< FuelCellShop::Material::PureGas * > &gases_in, const double &pressure_in) |
Member function used to store all the gases that are in the pore space in the porous layer. | |
void | set_temperature (const SolutionVariable &T_in) |
Member function used to set the temperature ]Kelvin ] at every quadrature point inside the cell. | |
FuelCellShop::Material::PureGas * | get_gas_pointer (int index) const |
Return the FuelCellShop::Material::PureGas pointer that is stored inside the class in the ith position. | |
std::vector < FuelCellShop::Material::PureGas * > | get_gases () const |
Returns the vector of FuelCellShop::Material::PureGas pointers stored in the porous layer. | |
void | get_gas_index (FuelCellShop::Material::PureGas *gas_type, int &index) const |
Return the gas index in the GDL class. | |
void | get_T_and_p (double &T, double &p) const |
Return the constant temperature [Kelvin ] and constant pressure [atm ] inside the layer. | |
void | get_p (double &p) const |
Return the constant pressure [atm ] inside the layer. | |
virtual void | print_layer_properties () const |
This member function is a virtual class that can be used to output to screen information from the layer. | |
virtual bool | test_layer () const |
This virtual class should be used for any derived class to be able to test the functionality of the class. | |
Public Member Functions inherited from FuelCellShop::Layer::BaseLayer< dim > | |
virtual void | set_derivative_flags (const std::vector< VariableNames > &flags) |
Set the variables for which you would like to compute the derivatives. | |
void | set_position (std::vector< Point< dim > > &p) |
Member function used by some applications such as dummyGDL in order to know which value to return. | |
virtual void | set_constant_solution (const double &value, const VariableNames &name) |
Set those solution variables which are constant in the particular application. | |
virtual void | set_solution (const std::vector< SolutionVariable > &) |
If the effective properties in the layer depend on the solution, the solution for a given cell should be passed to the class using this member function. | |
bool | belongs_to_material (const char material_id) |
Check if a given cell belongs to the catalyst layer. | |
const std::string & | name_material () |
Return the name of the layer. | |
virtual bool | test_layer () |
This virtual class should be used for any derived class to be able to test the functionality of the class. | |
unsigned int | get_material_id () |
Return the material id of the layer. | |
Static Public Member Functions | |
Instance Delivery (Public functions) | |
static void | declare_GasDiffusionLayer_parameters (const std::string &gld_section_name, ParameterHandler ¶m) |
Function used to declare all the data necessary in the parameter files for all GasDiffusionLayer children. | |
static void | set_GasDiffusionLayer_parameters (const std::vector< std::string > &name_dvar, const std::vector< double > &value_dvar, std::string gld_section_name, ParameterHandler ¶m) |
static boost::shared_ptr < FuelCellShop::Layer::GasDiffusionLayer < dim > > | create_GasDiffusionLayer (const std::string &gld_section_name, ParameterHandler ¶m) |
Function used to select the appropriate GasDiffusionLayer type as specified in the ParameterHandler under line. | |
Static Public Attributes | |
Instance Delivery (Public variables) | |
static const std::string | concrete_name |
Concrete name used for objects of this class. | |
Protected Types | |
Instance Delivery (Types) | |
typedef std::map< std::string, GasDiffusionLayer< dim > * > | _mapFactory |
This object is used to store all objects of type GasDiffusionLayer. | |
Protected Member Functions | |
Constructors, destructor, and initalization | |
GasDiffusionLayer () | |
Replica Constructors. | |
~GasDiffusionLayer () | |
Destructor. | |
GasDiffusionLayer (const std::string &name) | |
Constructor. | |
void | declare_parameters (ParameterHandler ¶m) const |
Declare parameters for a parameter file. | |
virtual void | declare_parameters (const std::string &name, ParameterHandler ¶m) const |
Declare parameters for a parameter file. | |
virtual void | set_parameters (const std::vector< std::string > &name_dvar, const std::vector< double > &value_dvar, const std::string &name, ParameterHandler ¶m) const |
Member function used to set new parameters values in the optimization loop. | |
void | initialize (ParameterHandler ¶m) |
Member function used to read in data and initialize the necessary data to compute the coefficients. | |
Instance Delivery (Private functions) | |
virtual boost::shared_ptr < FuelCellShop::Layer::GasDiffusionLayer < dim > > | create_replica (const std::string &name) |
This member function is used to create an object of type gas diffusion layer. | |
Protected Member Functions inherited from FuelCellShop::Layer::PorousLayer< dim > | |
PorousLayer (const std::string &name) | |
Constructor. | |
PorousLayer () | |
Constructor. | |
virtual | ~PorousLayer () |
Destructor. | |
void | set_parameters (const std::string &object_name, const std::vector< std::string > &name_dvar, const std::vector< double > &value_dvar, ParameterHandler ¶m) |
Member function used to change the values in the parameter file for a given list of parameters. | |
virtual void | set_parameters (const std::vector< std::string > &name_dvar, const std::vector< double > &value_dvar, ParameterHandler ¶m) |
Member function used to change the values in the parameter file for a given list of parameters. | |
virtual void | gas_diffusion_coefficients (Table< 2, double > &) const |
Return the molecular diffusivty all the gases assigned to the layer using set_gases_and_compute. | |
virtual void | derivative_gas_diffusion_coefficients (std::vector< Table< 2, double > > &) const |
Return the derivative of the molecular diffusion coefficient with respect to the derivative flags for all the gases assigned to the layer using set_gases_and_compute. | |
Protected Member Functions inherited from FuelCellShop::Layer::BaseLayer< dim > | |
BaseLayer () | |
Constructor. | |
BaseLayer (const std::string &name) | |
Constructor. | |
virtual | ~BaseLayer () |
Destructor. | |
Static Protected Member Functions | |
Instance Delivery (Private and static) | |
static _mapFactory * | get_mapFactory () |
Protected Attributes | |
Internal variables | |
std::string | diffusion_species_name |
If GDL properties are stored inside the class (e.g. | |
double | porosity |
Porosity of the GDL. | |
Tensor< 2, dim > | tortuosity_tensor |
Tortuosity tensor of the GDL. | |
double | electron_conductivity |
Double storing the electric conductivity of the GDL is the layer is isotropic. | |
Tensor< 2, dim > | electron_conductivity_tensor |
Tensor storing the effective electronic conductivity of the layer. | |
Protected Attributes inherited from FuelCellShop::Layer::PorousLayer< dim > | |
std::string | diffusion_species_name |
If GDL properties are stored inside the class (e.g DummyGDL) then, return the property stored under coefficient_name name. | |
std::vector < FuelCellShop::Material::PureGas * > | gases |
Gases inside the layer. | |
double | temperature |
Temperature [Kelvin ] used to compute gas diffusivity. | |
double | pressure |
Total pressure [atm ] used to compute gas diffusivity. | |
SolutionVariable | T_vector |
Temperature at every quadrature point inside the cell. | |
Table< 2, double > | D_ECtheory |
Tensor of diffusion coefficients – This are computed with setting up the gas so that they do not need to be recomputed all the time. | |
std::vector< Table< 2, double > > | dD_ECtheory_dx |
Vector of tensors for the derivative of the diffusion coefficients – This are computed with setting up the gas so that they do not need to be recomputed all the time. | |
std::vector< double > | D_bulk |
Vector of bulk diffusion coefficients at every quadrature point inside the cell. | |
std::vector< double > | dD_bulk_dT |
Vector of derivative of bulk diffusion coefficients w.r.t temperature, at every quadrature point inside the cell. | |
Protected Attributes inherited from FuelCellShop::Layer::BaseLayer< dim > | |
const std::string | name |
Name of the layer. | |
unsigned int | material_id |
Identification number. | |
std::vector< Point< dim > > | point |
Coordinates of the point where we would like to compute the effective properties. | |
std::vector< VariableNames > | derivative_flags |
Flags for derivatives: These flags are used to request derivatives. | |
std::map< VariableNames, double > | constant_solutions |
Map storing values of solution variables constant in a particular application. | |
Virtual class used to provide the interface for all GasDiffusionLayer children.
No object of type GasDiffusionLayer should ever be created, instead this layer is used to initialize pointers of type GasDiffusionLayer. The class has a database of children such that it will declare all necessary parameters for all children in the input file, read the input file, create the appripriate children and return a pointer to GasDiffusionLayer with the children selected.
All public functions are virtual but the static functions used to declare parameters and to initialize a pointer of GasDiffusionLayer, i.e. declare_all_GasDiffusionLayer_parameters, set_all_GasDiffusionLayer_parameters and create_GasDiffusionLayer.
In order to create a gas diffusion layer within an application, the following steps need to be taken.
First, in the application .h file, create a pointer to a GasDiffusionLayer object, i.e.
This pointer object will be available anywhere inside the application. Because we do not want to worry about deleting the pointer afterwards, we use a Boost pointer which has its own memory management algorithms. See the Boost website for more information
Once the pointer is available, we need to do three things in the application
The object is ready for use now.
Here is a code example from app_cathode.cc:
|
protected |
This object is used to store all objects of type GasDiffusionLayer.
|
protected |
Replica Constructors.
Constructor used only to create a prototype. Do not use in general since this will not include the name of the section in the parameter file you need.
|
protected |
Destructor.
|
protected |
Constructor.
|
inlinestatic |
Function used to select the appropriate GasDiffusionLayer type as specified in the ParameterHandler under line.
current options are [ DesignFibrousGDL | DummyGDL | SGL24BA ]
The class will read the appropriate section in the parameter file, i.e. the one with name
gld_section_name,create | an object of the desired type and return it. |
References FuelCellShop::Layer::GasDiffusionLayer< dim >::create_replica(), and FuelCellShop::Layer::GasDiffusionLayer< dim >::get_mapFactory().
|
inlineprotectedvirtual |
This member function is used to create an object of type gas diffusion layer.
Reimplemented in FuelCellShop::Layer::DesignFibrousGDL< dim >, FuelCellShop::Layer::DummyGDL< dim >, and FuelCellShop::Layer::SGL24BA< dim >.
Referenced by FuelCellShop::Layer::GasDiffusionLayer< dim >::create_GasDiffusionLayer().
|
inlinestatic |
Function used to declare all the data necessary in the parameter files for all GasDiffusionLayer children.
This member function should be used instead of declare_parameters() when we want to use a GasDiffusionLayer pointer that selects the type of GDL to run at runtime.
gld_section_name | Name of the section that will encapuslate all the information about the GDL |
param | ParameterHandler object used to store all information about the simulation. Used to read the parameter file. |
The parameter file would look as follows:
References FuelCellShop::Layer::GasDiffusionLayer< dim >::get_mapFactory().
|
inlineprotectedvirtual |
Declare parameters for a parameter file.
Reimplemented from FuelCellShop::Layer::PorousLayer< dim >.
Reimplemented in FuelCellShop::Layer::SGL24BA< dim >.
|
protectedvirtual |
Declare parameters for a parameter file.
Reimplemented from FuelCellShop::Layer::PorousLayer< dim >.
Reimplemented in FuelCellShop::Layer::DesignFibrousGDL< dim >, FuelCellShop::Layer::DummyGDL< dim >, and FuelCellShop::Layer::SGL24BA< dim >.
|
inlinevirtual |
Compute the derivative of the effective electron conductivity in the GDL with respect to either the solution or design parameters.
The parameters with respect to which the derivatives are computed are setup in FuelCellShop::Layer::set_derivative_flags()
|
inlinevirtual |
Return the derivative of the effective gas diffusion in the GDL with respect to either the solution or design parameters for all the gases assigned to the layer using set_gases_and_compute.
This routine uses FuelCellShop::Mixture::ChapmanEnskog to compute the binary diffusivity for each gas with respect to each other. If the layer contains three gases the vector returns D12, D13, D23. For 4 gases, it returns D12, D13, D14, D23, D24, D34 . The parameters with respect to which the derivatives are computed are setup in FuelCellShop::Layer::set_derivative_flags().
|
inlinevirtual |
Compute the derivative of the effective gas permeability in the GDL with respect to either the solution or design parameters.
The parameters with respect to which the derivatives are computed are setup in FuelCellShop::Layer::set_derivative_flags()
|
inlinevirtual |
Compute the derivative of the effective gas diffusion in the GDL with respect to either the solution or design parameters.
The parameters with respect to which the derivatives are computed are setup in FuelCellShop::Layer::set_derivative_flags()
|
inlinevirtual |
Compute the effective electron conductivity in the GDL.
Reimplemented in FuelCellShop::Layer::DesignFibrousGDL< dim >, and FuelCellShop::Layer::DummyGDL< dim >.
|
inlinevirtual |
Compute the effective electron conductivity in the GDL.
|
inlinevirtual |
Compute the effective electron conductivity in the GDL.
Reimplemented in FuelCellShop::Layer::DesignFibrousGDL< dim >, FuelCellShop::Layer::DummyGDL< dim >, and FuelCellShop::Layer::SGL24BA< dim >.
|
inlinevirtual |
Compute the effective electron conductivity in the GDL.
|
inlinevirtual |
Return the effective diffusivty in the GDL.
This routine takes the gas diffusivity from FuelCellShop::BinaryDiffusion and transforms it into an effective property taking into account the porosity and structure of the GDL
Reimplemented in FuelCellShop::Layer::DesignFibrousGDL< dim >.
|
inlinevirtual |
Return the effective diffusivty in the GDL.
This routine takes the gas diffusivity from FuelCellShop::BinaryDiffusion and transforms it into an effective property taking into account the porosity and structure of the GDL (Anisotropic case)
Reimplemented in FuelCellShop::Layer::DesignFibrousGDL< dim >.
|
virtual |
Return the effective diffusivty in the GDL for all the gases assigned to the layer using set_gases_and_compute.
This routine uses FuelCellShop::Mixture::ChapmanEnskog to compute the binary diffusivity for each gas with respect to each other. If the layer contains three gases the vector returns D12, D13, D23. For 4 gases, it returns D12, D13, D14, D23, D24, D34.
Reimplemented in FuelCellShop::Layer::DummyGDL< dim >.
|
virtual |
Return a tensor with the effective diffusivty in the GDL for all the gases assigned to the layer using set_gases_and_compute.
This routine uses FuelCellShop::Mixture::ChapmanEnskog to compute the binary diffusivity for each gas with respect to each other. If the layer contains three gases the vector returns D12, D13, D23. For 4 gases, it returns D12, D13, D14, D23, D24, D34 (Anisotropic case).
Reimplemented in FuelCellShop::Layer::DesignFibrousGDL< dim >, FuelCellShop::Layer::DummyGDL< dim >, and FuelCellShop::Layer::SGL24BA< dim >.
|
inlinevirtual |
Compute the GDL gas permeability.
|
inlinevirtual |
Compute the GDL gas permeability.
|
inlinevirtual |
This member function returns a type_info object with the name of the base layer type the inherited class belongs to, i.e.
Note that this is necessary if we want to find out not the name of the actual class which can be obtain using
but the name of the parent class.
Reimplemented from FuelCellShop::Layer::BaseLayer< dim >.
|
inlinestaticprotected |
Referenced by FuelCellShop::Layer::GasDiffusionLayer< dim >::create_GasDiffusionLayer(), FuelCellShop::Layer::GasDiffusionLayer< dim >::declare_GasDiffusionLayer_parameters(), and FuelCellShop::Layer::GasDiffusionLayer< dim >::set_GasDiffusionLayer_parameters().
|
protectedvirtual |
Member function used to read in data and initialize the necessary data to compute the coefficients.
Reimplemented from FuelCellShop::Layer::PorousLayer< dim >.
|
inlinevirtual |
Compute the GDL liquid permeability.
|
inlinevirtual |
Compute the GDL liquid permeability.
|
inlinevirtual |
Member function used by some applications such as dummyGDL in order to know which value to return.
For other classes this class is not used.
|
inlinestatic |
References FuelCellShop::Layer::GasDiffusionLayer< dim >::get_mapFactory().
|
inlineprotectedvirtual |
Member function used to set new parameters values in the optimization loop.
Reimplemented in FuelCellShop::Layer::DesignFibrousGDL< dim >.
|
virtual |
Class test.
|
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 store under
|
protected |
If GDL properties are stored inside the class (e.g.
DummyGDL) then, return the property stored under coefficient_name name
|
protected |
Double storing the electric conductivity of the GDL is the layer is isotropic.
Otherwise the value is set to zero.
|
protected |
Tensor storing the effective electronic conductivity of the layer.
This function if used if the layer is anisotropic.
|
protected |
Porosity of the GDL.
|
protected |
Tortuosity tensor of the GDL.