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