OpenFCST: The open-source Fuel Cell Simulation Toolbox
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
conventional_CL.h
Go to the documentation of this file.
1 //---------------------------------------------------------------------------
2 //
3 // FCST: Fuel Cell Simulation Toolbox
4 //
5 // Copyright (C) 2006-13 by Energy Systems Design Laboratory, University of Alberta
6 //
7 // This software is distributed under the MIT License.
8 // For more information, see the README file in /doc/LICENSE
9 //
10 // - Class: conventional_cl.h
11 // - Description: Class characterizing the conventional catalyst layer and methods for computing effective properties. It also provides interface to various material classes used in catalyst layer.
12 // - Developers: Peter Dobson (2011) and Madhur Bhaiya (2013)
13 // - Id: $Id: conventional_CL.h 2605 2014-08-15 03:36:44Z secanell $
14 //
15 //---------------------------------------------------------------------------
16 
17 #ifndef _FUELCELLSHOP__CONVENTIONAL_CL__H
18 #define _FUELCELLSHOP__CONVENTIONAL_CL__H
19 
20 // Include deal.II classes
21 #include<base/parameter_handler.h>
22 #include<base/point.h>
23 #include <base/function.h>
24 #include <lac/vector.h>
25 #include <fe/fe_values.h>
26 
27 // Include FCST classes
28 #include "catalyst_layer.h"
30 #include "catalyst_support_base.h"
31 #include "catalyst_base.h"
32 #include "base_kinetics.h"
33 #include "platinum.h"
34 #include "nafion.h"
35 #include "carbon.h"
36 #include "geometries.h"
37 #include "fcst_utilities.h"
38 #include "boost/shared_ptr.hpp"
39 #include <base/types.h>
40 
41 //Include STL
42 #include <cmath>
43 #include <iostream>
44 #include <algorithm>
45 
46 using namespace dealii;
47 
48 namespace FuelCellShop
49 {
50  namespace Layer
51  {
60  template <int dim>
62  public CatalystLayer<dim>
63  {
64  public:
65 
81  static const std::string concrete_name;
82 
84 
85 
92 
96  ~ConventionalCL();
97 
99 
101 
102 
106  virtual void print_layer_properties() const;
107 
109  virtual void get_volume_fractions(std::map<std::string, double>& volume_fractions)
110  {
111  //Assert( mat_id != numbers::invalid_material_id, ExcMessage("Graded Catalyst Layers needs its material id.") );
112 
113  compute_volume_fraction();
114  volume_fractions["Solid"] = epsilon_S.at(this->local_material_id());
115  volume_fractions["Void"] = epsilon_V.at(this->local_material_id());
116  volume_fractions["Ionomer"] = epsilon_N.at(this->local_material_id());
117 
118  }
119 
128  virtual inline void get_loadings(std::map<std::string, double> & info)
129  {
130  //Assert( mat_id != numbers::invalid_material_id, ExcMessage("Graded/Homogeneous Catalyst Layers needs its material id.") );
131  info["V_Pt"] = V_Pt.at(this->local_material_id());
132  info["loading_N"] = loading_N.at(this->local_material_id());
133  info["IC_ratio"] = IC_ratio.at(this->local_material_id());
134  info["prc_Pt"] = prc_Pt.at(this->local_material_id());
135  };
136 
138  inline double get_V_Pt(const unsigned int mat_id = numbers::invalid_material_id) const
139  {
140  Assert( mat_id != numbers::invalid_material_id, ExcMessage("Graded/Homogeneous Catalyst Layers needs its material id.") );
141  // this is blah-blah return, change later
142  return V_Pt.at(this->local_material_id());
143  }
144 
150  virtual double get_active_area_Pt() const
151  {
152  //Assert( mat_id != numbers::invalid_material_id, ExcMessage("Graded Catalyst Layers needs its material id.") );
153  // this is blah-blah return, change later
154  return Av.at(this->local_material_id());
155  }
156 
158 
160 
166  virtual void effective_gas_diffusivity(const double&,
167  const double&,
168  double&) const;
169 
178  virtual void effective_gas_diffusivity(std::vector< Tensor<2,dim> >&) const;
188  virtual void derivative_effective_gas_diffusivity(std::map< VariableNames, std::vector< Tensor<2,dim> > >&) const;
189 
199  virtual void effective_gas_diffusivity(Table< 2, Tensor< 2, dim > >&) const;
200 
204  virtual void effective_electron_conductivity(double&) const;
205 
210  virtual void effective_electron_conductivity(Tensor<2,dim>&) const;
211 
217  virtual void derivative_effective_electron_conductivity(std::vector<double>&) const;
218 
222  virtual void effective_proton_conductivity(double&) const;
223  virtual void effective_proton_conductivity(std::vector<double>&) const;
229  virtual void derivative_effective_proton_conductivity(std::map< VariableNames, std::vector<double> >&) const;
230 
234  virtual void effective_water_diffusivity(double&) const;
235  virtual void effective_water_diffusivity(std::vector<double>&) const;
241  virtual void derivative_effective_water_diffusivity(std::map< VariableNames, std::vector<double> >&) const;
242 
246  virtual void effective_thermal_conductivity(double&) const;
250  virtual void effective_thermal_conductivity(std::vector< Tensor<2,dim> >&) const;
255  virtual void derivative_effective_thermal_conductivity(std::vector< Tensor<2,dim> >&) const;
256 
261  virtual void effective_thermoosmotic_diffusivity(std::vector<double>&) const;
267  virtual void derivative_effective_thermoosmotic_diffusivity(std::map< VariableNames, std::vector<double> >&) const;
268 
272  virtual void liquid_permeablity(std::vector< Tensor<2,dim> >&) const;
278  virtual void derivative_liquid_permeablity(std::map< VariableNames, std::vector< Tensor<2,dim> > >&) const;
279 
283  virtual void pcapillary(std::vector<double>&) const;
287  virtual void dpcapillary_dsat(std::vector<double> &) const;
293  virtual void derivative_dpcapillary_dsat(std::map< VariableNames, std::vector<double> > &) const;
294 
299  virtual void interfacial_surface_area(std::vector<double>&) const;
305  virtual void derivative_interfacial_surface_area(std::map< VariableNames, std::vector<double> >&) const;
306 
308 
309  protected:
311 
312 
315  ConventionalCL(std::string name);
316 
359  void declare_parameters (const std::string& cl_section_name,
360  ParameterHandler &param) const;
361 
366  void initialize (ParameterHandler &param);
368 
371  void compute_volume_fraction();
372 
417  void compute_Av();
422  void derivative_effective_proton_conductivity_wrt_electrolyte_loading(double&) const;
423 
429  void derivative_volume_fractions(double &Depsilon_S,
430  double &Depsilon_V,
431  double &Depsilon_N) const;
432 
436  void get_method_transport_property_pores(std::string& method) const
437  {
438  method = method_eff_property_pores;
439  };
440 
444  void get_method_transport_property_electrolyte(std::string& method) const
445  {
446  method = method_eff_property_electrolyte;
447  };
448 
452  void get_method_transport_property_solid(std::string& method) const
453  {
454  method = method_eff_property_solid;
455  };
456 
463  inline double depsilon_S_cat_dprc_Pt(const double& V_Pt,
464  const double& prc_Pt) const
465  {
466  return -(V_Pt*1e-3)/(rho_c*pow(prc_Pt,2.0));
467  }
468 
475  inline double depsilon_S_cat_dVPt(const double& prc_Pt) const
476  {
477  return (1/rho_Pt + (1-prc_Pt)/(prc_Pt*rho_c))*(1e-3);
478  }
479 
486  inline double depsilon_V_cat_depsilon_S_cat() const
487  {
488  return -1;
489  }
490 
497  inline double depsilon_V_cat_depsilon_N_cat() const
498  {
499  return -1;
500  }
501 
502  //-- Composition
504  std::map< unsigned int, double> epsilon_N;
506  std::map< unsigned int, double> epsilon_V;
508  std::map< unsigned int, double> epsilon_S;
510  std::map< unsigned int, double> epsilon_W;
511 
512  //-- Catalyst properties
514  double rho_Pt;
516  double rho_c;
518  std::map< unsigned int, double> prc_Pt;
520  std::map< unsigned int, double> V_Pt;
522  std::map< unsigned int, double> M_Pt;
524  std::map< unsigned int, double> Av;
526  std::string method_Av;
528  std::string method_porosity;
530  std::map< unsigned int, double> L_CL;
531 
532  //-- Electrolyte properties
534  double rho_N;
539  std::map< unsigned int, double> loading_N;
544  std::map< unsigned int, double> IC_ratio;
545 
547  std::map< unsigned int, double> prc_N;
548 
549  // Network characteristics
553  double porosity_th;
555  double porosity_mu;
558 
562  double solid_th;
564  double solid_mu;
571 
572 
574  std::string method_eff_thermal;
576  std::map< unsigned int, double> k_T;
577 
581  std::map< unsigned int, double> s_irr;
583  std::map< unsigned int, double> abs_permeability;
584 
587  };
588  }
589 }
590 
591 #endif
std::string method_eff_property_pores
Method used to compute effective properties – Type of network.
Definition: conventional_CL.h:551
void get_method_transport_property_pores(std::string &method) const
Get the effective transport method in the pores.
Definition: conventional_CL.h:436
std::map< unsigned int, double > k_T
Thermal Conductivity of the layer.
Definition: conventional_CL.h:576
std::string method_eff_property_solid
Method used to compute effective properties – Type of network.
Definition: conventional_CL.h:560
std::map< unsigned int, double > V_Pt
Platinum loading at the catalyst layer per unit volume.
Definition: conventional_CL.h:520
std::map< unsigned int, double > IC_ratio
Ionomer to carbon ratio.
Definition: conventional_CL.h:544
double depsilon_S_cat_dVPt(const double &prc_Pt) const
Inline function to compute .
Definition: conventional_CL.h:475
virtual double get_active_area_Pt() const
Get the active area of platinum per unit volume of CL.
Definition: conventional_CL.h:150
std::map< unsigned int, double > epsilon_N
Volume fraction of Nafion in the cathode catalyst layer.
Definition: conventional_CL.h:504
double porosity_gamma
Definition: conventional_CL.h:557
std::map< unsigned int, double > epsilon_S
Solid volume fraction in the catalyst layer.
Definition: conventional_CL.h:508
VariableNames
The enumeration containing the names of some of the available FCST solution variables and their deriv...
Definition: system_management.h:62
std::string method_porosity
Method to compute porosity.
Definition: conventional_CL.h:528
double get_V_Pt(const unsigned int mat_id=numbers::invalid_material_id) const
Return the platinum loading per cm3 catalyst layer.
Definition: conventional_CL.h:138
std::map< unsigned int, double > prc_N
Percentage (mass fraction) of electrolyte in the catalyst layer.
Definition: conventional_CL.h:547
std::map< unsigned int, double > prc_Pt
Percentage of platinum per carbon on the catalyst layer.
Definition: conventional_CL.h:518
double rho_c
Density of support material.
Definition: conventional_CL.h:516
std::map< unsigned int, double > epsilon_W
Volume fraction of water in the cathode catalyst layer.
Definition: conventional_CL.h:510
double solid_mu
Solid phase network constant.
Definition: conventional_CL.h:564
virtual void get_volume_fractions(std::map< std::string, double > &volume_fractions)
Get the volume fractions in the catalyst layer.
Definition: conventional_CL.h:109
std::string method_eff_thermal
Method used to compute effective thermal conductivity in the catalyst layer.
Definition: conventional_CL.h:574
double porosity_th
Porous network threshold.
Definition: conventional_CL.h:553
std::map< unsigned int, double > epsilon_V
Void volume fraction (Porosity) of the catalyst layer.
Definition: conventional_CL.h:506
double depsilon_V_cat_depsilon_S_cat() const
Inline function to compute .
Definition: conventional_CL.h:486
This class characterizes a catalyst layer and uses this information to compute effective transport pr...
Definition: conventional_CL.h:61
std::string method_capillary_function
Method used to compute capillary pressure as a function of saturation.
Definition: conventional_CL.h:586
std::map< unsigned int, double > s_irr
Irreducible liquid water saturation value in the MPL.
Definition: conventional_CL.h:581
double depsilon_S_cat_dprc_Pt(const double &V_Pt, const double &prc_Pt) const
Inline function to compute .
Definition: conventional_CL.h:463
std::map< unsigned int, double > Av
Active area of catalyst per unit volume of catalyst layer.
Definition: conventional_CL.h:524
double solid_th
Solid phase network threshold.
Definition: conventional_CL.h:562
double depsilon_V_cat_depsilon_N_cat() const
Inline function to compute .
Definition: conventional_CL.h:497
double rho_Pt
Density of platinum.
Definition: conventional_CL.h:514
virtual void get_loadings(std::map< std::string, double > &info)
Return loadings.
Definition: conventional_CL.h:128
std::map< unsigned int, double > L_CL
Layer thickness or thicknesses.
Definition: conventional_CL.h:530
double porosity_mu
Porous network constant.
Definition: conventional_CL.h:555
std::map< unsigned int, double > loading_N
Electrolyte loading.
Definition: conventional_CL.h:539
static const std::string concrete_name
FcstUtilities Concrete name used for objects of this class.
Definition: conventional_CL.h:81
std::string method_Av
Method to compute active area.
Definition: conventional_CL.h:526
double rho_N
Density of electrolyte.
Definition: conventional_CL.h:534
double electrolyte_mu
Electrolyte network constant.
Definition: conventional_CL.h:570
std::map< unsigned int, double > abs_permeability
Absolute permeability [cm^2] of the layer.
Definition: conventional_CL.h:583
std::string method_eff_property_electrolyte
Method used to compute effective properties – Type of network.
Definition: conventional_CL.h:566
double electrolyte_th
Electrolyte network threshold.
Definition: conventional_CL.h:568
std::string method_rel_liquid_permeability
Method used to compute the relative liquid permeability.
Definition: conventional_CL.h:579
void get_method_transport_property_solid(std::string &method) const
Get the effective transport method in the solid phase.
Definition: conventional_CL.h:452
Virtual class used to provide the interface for all CatalystLayer children.
Definition: catalyst_layer.h:130
void get_method_transport_property_electrolyte(std::string &method) const
Get the effective transport method in the electrolyte.
Definition: conventional_CL.h:444
std::map< unsigned int, double > M_Pt
Platinum loading at the catalyst layer per unit area.
Definition: conventional_CL.h:522