18 #ifndef _FUELCELLSHOP__GAS_DIFFUSION_LAYER_H 
   19 #define _FUELCELLSHOP__GAS_DIFFUSION_LAYER_H 
   27 using namespace dealii;
 
   29 namespace FuelCellShop
 
  177                          iterator->second->declare_parameters(gdl_section_name, param);
 
  194              static boost::shared_ptr<FuelCellShop::Layer::GasDiffusionLayer<dim> > 
create_GasDiffusionLayer (
const std::string& gld_section_name, 
 
  195                                                                                                               ParameterHandler ¶m)
 
  198                  boost::shared_ptr<FuelCellShop::Layer::GasDiffusionLayer<dim> > pointer; 
 
  200                  std::string concrete_name;
 
  201                  param.enter_subsection(
"Fuel cell data");
 
  203                      param.enter_subsection(gld_section_name);
 
  205                          concrete_name = param.get(
"Gas diffusion layer type");
 
  208                      param.leave_subsection();
 
  210                  param.leave_subsection();
 
  216                      if (iterator->second)
 
  228                      FcstUtilities::log<<
"Concrete name in FuelCellShop::Layer::GasDiffusionLayer<dim>::create_GasDiffusionLayer does not exist"<<std::endl;
 
  232                  pointer->initialize(param);
 
  249                 Assert((name != 
"oxygen" || name != 
"nitrogen" || name != 
"water" || name != 
"electron"),
 
  250                        ExcNotImplemented());
 
  251                 diffusion_species_name = name;
 
  281             virtual void test_class() 
const;
 
  294                 const std::type_info& info = 
typeid(*this);
 
  296                 << 
" called in Class " 
  297                 << info.name() << std::endl;
 
  307                 const std::type_info& info = 
typeid(*this);
 
  309                 << 
" called in Class " 
  310                 << info.name() << std::endl;
 
  321                 const std::type_info& info = 
typeid(*this);
 
  323                 << 
" called in Class " 
  324                 << info.name() << std::endl;
 
  336                 const std::type_info& info = 
typeid(*this);
 
  338                 << 
" called in Class " 
  339                 << info.name() << std::endl;
 
  352                 const std::type_info& info = 
typeid(*this);
 
  353                 FcstUtilities::log << 
"!!!!!!!!!!!!!!! This class will die soon. Do not use. It is a terrible interface. !!!!!!!!!!!!!!!!!!!!!!!!!! " 
  354                 << info.name() << std::endl;
 
  367                 const std::type_info& info = 
typeid(*this);
 
  368                 FcstUtilities::log << 
"!!!!!!!!!!!!!!!!!!!! This class will die soon. Do not use. It is a terrible interface. !!!!!!!!!!!!!!!!!!!!!!!! " 
  369                 << info.name() << std::endl;
 
  377                 const std::type_info& info = 
typeid(*this);
 
  379                 << 
" called in Class " 
  380                 << info.name() << std::endl;
 
  388                 const std::type_info& info = 
typeid(*this);
 
  390                 << 
" called in Class " 
  391                 << info.name() << std::endl;
 
  399                 const std::type_info& info = 
typeid(*this);
 
  401                 << 
" called in Class " 
  402                 << info.name() << std::endl;
 
  409                 const std::type_info& info = 
typeid(*this);
 
  411                 << 
" called in Class " 
  412                 << info.name() << std::endl;
 
  422                 const std::type_info& info = 
typeid(*this);
 
  424                 << 
" called in Class " 
  425                 << info.name() << std::endl;
 
  432                 const std::type_info& info = 
typeid(*this);
 
  434                 << 
" called in Class " 
  435                 << info.name() << std::endl;
 
  442                 const std::type_info& info = 
typeid(*this);
 
  444                 << 
" called in Class " 
  445                 << info.name() << std::endl;
 
  453                 const std::type_info& info = 
typeid(*this);
 
  455                 << 
" called in Class " 
  456                 << info.name() << std::endl;
 
  465                 const std::type_info& info = 
typeid(*this);
 
  467                 << 
" called in Class " 
  468                 << info.name() << std::endl;
 
  475                 const std::type_info& info = 
typeid(*this);
 
  477                 << 
" called in Class " 
  478                 << info.name() << std::endl;
 
  485                 const std::type_info& info = 
typeid(*this);
 
  487                 << 
" called in Class " 
  488                 << info.name() << std::endl;
 
  497                 const std::type_info& info = 
typeid(*this);
 
  499                 << 
" called in Class " 
  500                 << info.name() << std::endl;
 
  509                 const std::type_info& info = 
typeid(*this);
 
  511                 << 
" called in Class " 
  512                 << info.name() << std::endl;
 
  521                 const std::type_info& info = 
typeid(*this);
 
  523                 << 
" called in Class " 
  524                 << info.name() << std::endl;
 
  533                 const std::type_info& info = 
typeid(*this);
 
  535                 << 
" called in Class " 
  536                 << info.name() << std::endl;
 
  541                 const std::type_info& info = 
typeid(*this);
 
  543                 << 
" called in Class " 
  544                 << info.name() << std::endl;
 
  549                 const std::type_info& info = 
typeid(*this);
 
  551                 << 
" called in Class " 
  552                 << info.name() << std::endl;
 
  557                 const std::type_info& info = 
typeid(*this);
 
  559                 << 
" called in Class " 
  560                 << info.name() << std::endl;
 
  568                 const std::type_info& info = 
typeid(*this);
 
  570                 << 
" called in Class " 
  571                 << info.name() << std::endl; 
 
  576                 const std::type_info& info = 
typeid(*this);
 
  578                 << 
" called in Class " 
  579                 << info.name() << std::endl; 
 
  584                 const std::type_info& info = 
typeid(*this);
 
  586                 << 
" called in Class " 
  587                 << info.name() << std::endl; 
 
  594                 const std::type_info& info = 
typeid(*this);
 
  596                 << 
" called in Class " 
  597                 << info.name() << std::endl;
 
  606                 const std::type_info& info = 
typeid(*this);
 
  608                 << 
" called in Class " 
  609                 << info.name() << std::endl;
 
  618                 const std::type_info& info = 
typeid(*this);
 
  620                 << 
" called in Class " 
  621                 << info.name() << std::endl;
 
  630                 const std::type_info& info = 
typeid(*this);
 
  632                 << 
" called in Class " 
  633                 << info.name() << std::endl;
 
  642                 const std::type_info& info = 
typeid(*this);
 
  644                 << 
" called in Class " 
  645                 << info.name() << std::endl;
 
  654                 const std::type_info& info = 
typeid(*this);
 
  656                 << 
" called in Class " 
  657                 << info.name() << std::endl;
 
  662                 const std::type_info& info = 
typeid(*this);
 
  664                 << 
" called in Class " 
  665                 << info.name() << std::endl;
 
  675             typedef std::map< std::string, GasDiffusionLayer<dim>* > 
_mapFactory;      
 
  721                 this->declare_parameters(this->name, param);
 
  728             virtual void declare_parameters (
const std::string& name, 
 
  729                                              ParameterHandler ¶m) 
const;           
 
  737             void initialize (ParameterHandler ¶m);
 
  747             virtual boost::shared_ptr<FuelCellShop::Layer::GasDiffusionLayer<dim> > 
create_replica (
const std::string &name)
 
  749                 const std::type_info& info = 
typeid(*this);
 
  751                 << 
" called in Class " 
  752                 << info.name() << std::endl;
 
  802 #endif // _FUELCELLSHOP__GAS_DIFFUSION_LAYER_H 
void declare_parameters(ParameterHandler ¶m) const 
Declare parameters for a parameter file. 
Definition: gas_diffusion_layer.h:719
virtual void pcapillary(std::vector< double > &) const 
Compute , at all quadrature points in the cell. 
Definition: gas_diffusion_layer.h:566
double porosity
Porosity of the GDL. 
Definition: gas_diffusion_layer.h:769
Virtual class used to provide the interface for all GasDiffusionLayer children. 
Definition: gas_diffusion_layer.h:105
virtual void derivative_interfacial_surface_area_PSD(std::map< VariableNames, std::vector< double > > &) const 
Compute the derivative of the liquid-gas interfacial surface area per unit volume, with respect to either the solution variables or design parameters, at all quadrature points in the CL. 
Definition: gas_diffusion_layer.h:652
virtual void effective_electron_conductivity(double &) const 
Compute the effective electron conductivity in the GDL. 
Definition: gas_diffusion_layer.h:375
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...
Definition: gas_diffusion_layer.h:247
virtual void interfacial_surface_area(std::vector< double > &) const 
Compute the liquid-gas interfacial surface area per unit volume, , at all quadrature points in the GD...
Definition: gas_diffusion_layer.h:616
virtual void saturated_liquid_permeablity_PSD(double &) const 
Definition: gas_diffusion_layer.h:555
virtual void liquid_permeablity(std::vector< Tensor< 2, dim > > &) const 
Compute the anisotropic GDL liquid permeability , at all quadrature points in the cell...
Definition: gas_diffusion_layer.h:507
virtual void effective_electron_conductivity(const double &, double &) const 
Compute the effective electron conductivity in the GDL. 
Definition: gas_diffusion_layer.h:386
VariableNames
The enumeration containing the names of some of the available FCST solution variables and their deriv...
Definition: system_management.h:63
virtual void effective_gas_diffusivity(const double &, const double &, double &) const 
Compute the effective property in the pores of the GDL. 
Definition: gas_diffusion_layer.h:292
virtual void effective_electron_conductivity(const double &, Tensor< 2, dim > &) const 
Compute the effective electron conductivity in the GDL. 
Definition: gas_diffusion_layer.h:407
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_an...
Definition: gas_diffusion_layer.h:350
virtual void effective_thermal_conductivity(double &) const 
Compute the effective thermal conductivity (isotropic) in the GDL. 
Definition: gas_diffusion_layer.h:430
virtual void derivative_liquid_permeablity(std::map< VariableNames, std::vector< Tensor< 2, dim > > > &) const 
Compute the derivative of the anisotropic liquid permeability in the GDL with respect to either the s...
Definition: gas_diffusion_layer.h:519
virtual void derivative_relative_liquid_permeablity_PSD(std::map< VariableNames, std::vector< Tensor< 2, dim > > > &) const 
Definition: gas_diffusion_layer.h:547
Tensor< 2, dim > electron_conductivity_tensor
Tensor storing the effective electronic conductivity of the layer. 
Definition: gas_diffusion_layer.h:792
static const std::string concrete_name
Concrete name used for objects of this class. 
Definition: gas_diffusion_layer.h:126
virtual void derivative_interfacial_surface_area(std::map< VariableNames, std::vector< double > > &) const 
Compute the derivative of the liquid-gas interfacial surface area per unit volume, with respect to either the solution variables or design parameters, at all quadrature points in the GDL. 
Definition: gas_diffusion_layer.h:628
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 soluti...
Definition: gas_diffusion_layer.h:495
virtual void derivative_saturation_from_capillary_equation_PSD(std::vector< double > &) const 
Definition: gas_diffusion_layer.h:582
virtual void relative_liquid_permeability_PSD(std::vector< Tensor< 2, dim > > &) const 
Compute the derivative of the anisotropic liquid permeability in the GDL with respect to either the s...
Definition: gas_diffusion_layer.h:531
static _mapFactory * get_mapFactory()
Definition: gas_diffusion_layer.h:684
virtual void saturation_from_capillary_equation(std::vector< double > &) const 
Definition: gas_diffusion_layer.h:574
virtual void derivative_dpcapillary_dsat(std::map< VariableNames, std::vector< double > > &) const 
Compute the derivative of  in the GDL, with respect to either the solution or design parameters...
Definition: gas_diffusion_layer.h:604
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 cl...
Definition: gas_diffusion_layer.h:273
std::map< std::string, GasDiffusionLayer< dim > * > _mapFactory
This object is used to store all objects of type GasDiffusionLayer. 
Definition: gas_diffusion_layer.h:675
FCSTLogStream log
Object used to output data to file and, if file attached recorded to a file as well. 
Tensor< 2, dim > tortuosity_tensor
Tortuosity tensor of the GDL. 
Definition: gas_diffusion_layer.h:774
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. 
Definition: gas_diffusion_layer.h:747
virtual void effective_electron_conductivity(Tensor< 2, dim > &) const 
Compute the effective electron conductivity in the GDL. 
Definition: gas_diffusion_layer.h:397
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 u...
Definition: gas_diffusion_layer.h:194
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 usin...
Definition: gas_diffusion_layer.h:365
virtual void derivative_effective_gas_diffusivity(std::map< VariableNames, std::vector< Tensor< 2, dim > > > &) const 
Return the derivative of effective diffusivity w.r.t solution variables/design parameters for nonisot...
Definition: gas_diffusion_layer.h:334
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 s...
Definition: gas_diffusion_layer.h:420
virtual void effective_thermal_conductivity(std::vector< Tensor< 2, dim > > &) const 
Compute the effective thermal conductivity (anisotropic) in the GDL, dependent on various solution va...
Definition: gas_diffusion_layer.h:451
virtual void derivative_relative_liquid_permeablity_PSD(std::vector< double > &) const 
Definition: gas_diffusion_layer.h:539
virtual void dpcapillary_dsat(std::vector< double > &) const 
Compute , at all quadrature points in the GDL. 
Definition: gas_diffusion_layer.h:592
static void declare_GasDiffusionLayer_parameters(const std::string &gdl_section_name, ParameterHandler ¶m)
Function used to declare all the data necessary in the parameter files for all GasDiffusionLayer chil...
Definition: gas_diffusion_layer.h:170
virtual void gas_permeablity(Tensor< 2, dim > &) const 
Compute the GDL gas permeability. 
Definition: gas_diffusion_layer.h:483
virtual void interfacial_surface_area_PSD(std::vector< double > &) const 
Compute the liquid-gas interfacial surface area per unit volume, , at all quadrature points in the CL...
Definition: gas_diffusion_layer.h:640
virtual void derivative_effective_thermal_conductivity(std::vector< Tensor< 2, dim > > &) const 
Compute the derivative of the effective thermal conductivity in the GDL with respect to either the so...
Definition: gas_diffusion_layer.h:463
Tensor< 2, dim > thermal_conductivity_tensor
Tensor storing the effective thermal conductivity of the layer. 
Definition: gas_diffusion_layer.h:780
std::string diffusion_species_name
If GDL properties are stored inside the class (e.g. 
Definition: gas_diffusion_layer.h:761
virtual void effective_gas_diffusivity(const double &, const double &, Tensor< 2, dim > &) const 
Compute the effective property in the pores of the GDL. 
Definition: gas_diffusion_layer.h:305
std::string PSD_type
PSD class type from input file. 
Definition: gas_diffusion_layer.h:764
virtual void gas_permeablity(double &) const 
Compute the GDL gas permeability. 
Definition: gas_diffusion_layer.h:473
Virtual class used to implement properties that are characteristic of a porous layer. 
Definition: porous_layer.h:75
virtual void derivative_interfacial_surface_area_PSD(std::vector< double > &) const 
Definition: gas_diffusion_layer.h:660
double electron_conductivity
Double storing the electric conductivity of the GDL is the layer is isotropic. 
Definition: gas_diffusion_layer.h:786
virtual void effective_thermal_conductivity(Tensor< 2, dim > &) const 
Compute the effective thermal conductivity (anisotropic) in the GDL. 
Definition: gas_diffusion_layer.h:440
virtual void effective_gas_diffusivity(std::vector< Tensor< 2, dim > > &) const 
Return the effective diffusivity [m^2/s] for nonisothermal with/without two-phase case in the GDL...
Definition: gas_diffusion_layer.h:319