OpenFCST: The open-source Fuel Cell Simulation Toolbox
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
app_pemfc_twophase_saturation.h
Go to the documentation of this file.
1 //---------------------------------------------------------------------------
2 //
3 // FCST: Fuel Cell Simulation Toolbox
4 //
5 // Copyright (C) 2013 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: app_pemfc_nonisothermal.h 21-05-2013
11 // - Description: Class designed to solve a twophase saturation PEMFC model.
12 // - Developers: Jie Zhou
13 // - $$
14 //
15 //---------------------------------------------------------------------------
16 
17 #ifndef _FUELCELL__APP_PEMFC_TWOPHASE_SATURATION__H
18 #define _FUELCELL__APP_PEMFC_TWOPHASE_SATURATION__H
19 
20 //-- OpenFCST
23 
26 #include <layers/catalyst_layer.h>
27 #include <layers/membrane_layer.h>
28 #include <materials/PureGas.h>
29 
38 
45 
46 namespace FuelCell
47 {
48  namespace InitialSolution
49  {
55  template <int dim>
57  :
58  public Function<dim>
59  {
60  public:
65  boost::shared_ptr< FuelCellShop::Geometry::GridBase<dim> > grid,
66  FuelCell::SystemManagement* system_mgmt);
71 
76  void vector_value (const Point<dim> &p,
77  Vector<double> &v) const;
78 
79  private:
82 
84  boost::shared_ptr< FuelCellShop::Geometry::GridBase<dim> > grid;
85 
87  };
88  } //end namespace InitialSolution
89 
90 
91  namespace Application
92  {
93  //---------------------------------------------------------------------------
94  //---------------------------------------------------------------------------
95  //---------------------------------------------------------------------------
113  template <int dim>
115  :
117  {
118  public:
119 
121 
122 
129  AppPemfcTPSaturation (boost::shared_ptr<FuelCell::ApplicationCore::ApplicationData> data =
130  boost::shared_ptr<FuelCell::ApplicationCore::ApplicationData> ());
131 
142  virtual void declare_parameters(ParameterHandler& param);
143 
150  virtual void set_parameters(const std::vector<std::string>& name_dvar,
151  const std::vector<double>& value_dvar,
152  ParameterHandler& param) {};
153 
158  void _initialize(ParameterHandler& param);
159 
163  virtual void initialize(ParameterHandler& param);
164 
168  virtual void initialize_solution (FEVector& initial_guess,
169  std::shared_ptr<Function<dim> > initial_function = std::shared_ptr<Function<dim> >());
171 
173 
174 
180  virtual void cell_matrix(FuelCell::ApplicationCore::MatrixVector& cell_matrices,
181  const typename DoFApplication<dim>::CellInfo& cell);
191  virtual void cell_residual(FuelCell::ApplicationCore::FEVector& cell_vector,
192  const typename DoFApplication<dim>::CellInfo& cell);
193 
197  virtual void bdry_matrix(FuelCell::ApplicationCore::MatrixVector& bdry_matrices,
198  const typename DoFApplication<dim>::FaceInfo& bdry_info);
199 
203  virtual void bdry_residual(FuelCell::ApplicationCore::FEVector& bdry_vector,
204  const typename DoFApplication<dim>::FaceInfo& bdry_info);
206 
213  virtual void dirichlet_bc(std::map<unsigned int, double>& boundary_values) const;
214 
221  virtual void check_responses();
222 
226  virtual void cell_responses (std::vector<double>& resp,
227  const typename DoFApplication<dim>::CellInfo& info,
233  virtual void global_responses (std::vector<double>& resp,
235 
241  virtual void cell_dresponses_dl(std::vector<std::vector<double> >& /*cell_df_dl*/,
242  const typename DoFApplication<dim>::CellInfo& /*info*/,
243  const FuelCell::ApplicationCore::FEVector& /*sol*/) {};
244 
250  virtual void global_dresponses_dl(std::vector<std::vector<double> >& df_dl,
257  virtual void cell_dresponses_du(std::vector<FuelCell::ApplicationCore::FEVector >& /*cell_df_du*/,
258  const typename DoFApplication<dim>::CellInfo& /*info*/,
259  std::vector<std::vector<double> >& /*src*/) {};
260 
266  virtual void global_dresponses_du(std::vector<FuelCell::ApplicationCore::FEVector >& df_du,
268 
269 
274  virtual double evaluate (const FuelCell::ApplicationCore::FEVectors& src);
275 
280  virtual void data_out(const std::string& filename,
282 
283  protected:
284 
286 
287 
291 
293 
294 
299 
304 
309 
315 
317 
318  boost::shared_ptr< FuelCellShop::Layer::GasDiffusionLayer<dim> > AGDL;
319  boost::shared_ptr< FuelCellShop::Layer::GasDiffusionLayer<dim> > CGDL;
320  boost::shared_ptr< FuelCellShop::Layer::MicroPorousLayer<dim> > AMPL;
321  boost::shared_ptr< FuelCellShop::Layer::MicroPorousLayer<dim> > CMPL;
322  boost::shared_ptr< FuelCellShop::Layer::CatalystLayer<dim> > ACL;
323  boost::shared_ptr< FuelCellShop::Layer::CatalystLayer<dim> > CCL;
324  boost::shared_ptr< FuelCellShop::Layer::MembraneLayer<dim> > ML;
325 
326 
328 
329 
333 
338 
343 
348 
353 
358 
363 
365 
367 
369 
370 
372 
374 
376 
378 
380 
382 
384 
386 
388 
391 
393  std::vector<std::string> design_var;
394 
396  std::vector<double> design_var_value;
397 
398  private:
399 
400  double l_channel;
401 
402  double l_land;
403 
407  double time_k;
408  };
409  }
410 }
411 
412 #endif //_FUELCELL__AppPemfcNIThermal_H
virtual void initialize(ParameterHandler &param)
Call the other initialize routines from the inherited classes.
FuelCellShop::Material::Hydrogen hydrogen
The anode contains hydrogen, so we need to create an object hydrogen in order to compute viscosity...
Definition: app_pemfc_twophase_saturation.h:313
boost::shared_ptr< FuelCellShop::Geometry::GridBase< dim > > grid
Geometry class object.
Definition: app_pemfc_twophase_saturation.h:84
boost::shared_ptr< FuelCellShop::Layer::MicroPorousLayer< dim > > AMPL
Anode MPL Layer.
Definition: app_pemfc_twophase_saturation.h:320
void _initialize(ParameterHandler &param)
Set up how many equations are needed and read in parameters for the parameter handler in order to ini...
boost::shared_ptr< FuelCellShop::Layer::CatalystLayer< dim > > ACL
Anode Catalyst Layer.
Definition: app_pemfc_twophase_saturation.h:322
Class used to store, read from file and define the operating conditions for a fuel cell...
Definition: operating_conditions.h:118
FuelCellShop::Equation::ProtonTransportEquation< dim > proton_transport
ProtonTransportEquation object.
Definition: app_pemfc_twophase_saturation.h:342
FuelCellShop::Equation::FicksTransportEquation< dim > ficks_water_hydrogen
Definition: app_pemfc_twophase_saturation.h:368
AppPemfcTPSaturation(boost::shared_ptr< FuelCell::ApplicationCore::ApplicationData > data=boost::shared_ptr< FuelCell::ApplicationCore::ApplicationData >())
Constructor.
This class is used to solve the physical pheonoma on a complete membrane electrode assembly...
Definition: app_pemfc_twophase_saturation.h:114
This class assembles source terms corresponding to sorption/desorption of water inside the catalyst l...
Definition: sorption_source_terms.h:101
FuelCell::OperatingConditions OC
Operating conditions.
Definition: app_pemfc_twophase_saturation.h:289
boost::shared_ptr< FuelCellShop::Layer::MembraneLayer< dim > > ML
Membrane Layer.
Definition: app_pemfc_twophase_saturation.h:324
virtual void global_dresponses_du(std::vector< FuelCell::ApplicationCore::FEVector > &df_du, const FuelCell::ApplicationCore::FEVector &src)
This class is used to evaluate the sensitivities of all responses that do not require looping over ce...
virtual void cell_residual(FuelCell::ApplicationCore::FEVector &cell_vector, const typename DoFApplication< dim >::CellInfo &cell)
Integration of the rhs of the equations.
This class is used when solving the problem using Newton&#39;s method to provide an initial solution...
Definition: app_pemfc_twophase_saturation.h:56
AppPemfcTPSaturationIC(FuelCell::OperatingConditions *OC, boost::shared_ptr< FuelCellShop::Geometry::GridBase< dim > > grid, FuelCell::SystemManagement *system_mgmt)
Constructor.
This class deals with Proton Transport Equation.
Definition: proton_transport_equation.h:132
FuelCellShop::Equation::SorptionSourceTerms< dim > sorption_source_terms
SorptionSourceTerms object.
Definition: app_pemfc_twophase_saturation.h:362
Class used to calculate the current density at the anode catalyst layer.
Definition: response_current_density.h:180
FuelCellShop::Material::WaterVapor water
The cathode/anode contains water vapour, so we need to create an object water in order to compute vis...
Definition: app_pemfc_twophase_saturation.h:298
virtual void bdry_matrix(FuelCell::ApplicationCore::MatrixVector &bdry_matrices, const typename DoFApplication< dim >::FaceInfo &bdry_info)
Assemble local boundary matrix.
Class used to calculate the heat generated due to HOR inside the anode catalyst layer.
Definition: response_reaction_heat.h:284
std::vector< std::string > design_var
Stores the design variable names so that the name can be appended to the .vtk file name...
Definition: app_pemfc_twophase_saturation.h:393
FuelCellShop::Equation::ThermalTransportEquation< dim > thermal_transport
ThermalTransportEquation object.
Definition: app_pemfc_twophase_saturation.h:332
virtual void check_responses()
This class is called by responses to make sure that all responses requested are implemented in either...
Class used to calculate the protonic ohmic heat generated in the proton conducting layers...
Definition: response_ohmic_heat.h:258
FuelCellShop::PostProcessing::ORRReactionHeatResponse< dim > catReactionHeat
Definition: app_pemfc_twophase_saturation.h:385
boost::shared_ptr< FuelCellShop::Layer::MicroPorousLayer< dim > > CMPL
Cathode MPL Layer.
Definition: app_pemfc_twophase_saturation.h:321
This class deals with Electron Transport Equation.
Definition: electron_transport_equation.h:128
This class deals with Thermal Transport Equation.
Definition: thermal_transport_equation.h:187
This class deals with Membrane Water Content Transport Equation.
Definition: lambda_transport_equation.h:128
FuelCellShop::Material::Nitrogen nitrogen
The cathode contains nitrogen as solvent, so we need to create an object nitrogen in order to compute...
Definition: app_pemfc_twophase_saturation.h:308
virtual void declare_parameters(ParameterHandler &param)
Declare all parameters that are needed for:
virtual void cell_matrix(FuelCell::ApplicationCore::MatrixVector &cell_matrices, const typename DoFApplication< dim >::CellInfo &cell)
Integration of local bilinear form.
Class used to calculate the amount of water sorbed inside the catalyst layer.
Definition: response_water_sorption.h:106
virtual double evaluate(const FuelCell::ApplicationCore::FEVectors &src)
Post-processing.
This class is created for the objects handed to the mesh loops.
Definition: mesh_loop_info_objects.h:544
This class describes properties of pure oxygen.
Definition: PureGas.h:974
virtual void dirichlet_bc(std::map< unsigned int, double > &boundary_values) const
Member function used to set dirichlet boundary conditions.
FuelCell::OperatingConditions * OC
Operating conditions class object.
Definition: app_pemfc_twophase_saturation.h:81
FuelCellShop::PostProcessing::ElectronOhmicHeatResponse< dim > electronOhmicHeat
Definition: app_pemfc_twophase_saturation.h:381
FuelCellShop::Material::Oxygen oxygen
The cathode contains oxygen, so we need to create an object oxygen in order to compute viscosity...
Definition: app_pemfc_twophase_saturation.h:303
std::vector< MatrixBlock< FullMatrix< double > > > MatrixVector
The matrix vector used in the mesh loops.
Definition: matrix_block.h:102
virtual void data_out(const std::string &filename, const FuelCell::ApplicationCore::FEVectors &src)
Reimplementation of the routine in the base class BaseApplication in namespace AppFrame so that the r...
FuelCellShop::PostProcessing::HORCurrentDensityResponse< dim > HORCurrent
Definition: app_pemfc_twophase_saturation.h:377
This class describes properties of pure nitrogen.
Definition: PureGas.h:1027
Class used to calculate the heat generated due to ORR inside the cathode catalyst layer...
Definition: response_reaction_heat.h:103
std::map< unsigned int, double > boundary_values
Variable to store boundary values, so they only need to be computed once per mesh refinement...
Definition: block_matrix_application.h:321
double time_k
Time constant for sorption isotherm [1/s].
Definition: app_pemfc_twophase_saturation.h:407
This class deals with Liquid Water Saturation Transport Equation.
Definition: saturation_transport_equation.h:120
virtual void global_responses(std::vector< double > &resp, const FuelCell::ApplicationCore::FEVector &sol)
This class is used to evaluate all responses that do not require looping over cells.
FuelCellShop::PostProcessing::HORReactionHeatResponse< dim > anReactionHeat
Definition: app_pemfc_twophase_saturation.h:387
std::vector< double > design_var_value
Stores the values of the design variables so that the number can be appended to the ...
Definition: app_pemfc_twophase_saturation.h:396
This class assembles the reaction source terms for all other transport equations, if there&#39;s any...
Definition: reaction_source_terms.h:37
virtual void cell_dresponses_dl(std::vector< std::vector< double > > &, const typename DoFApplication< dim >::CellInfo &, const FuelCell::ApplicationCore::FEVector &)
This class is used to evaluate the derivative of all the functionals that require looping over cells ...
Definition: app_pemfc_twophase_saturation.h:241
double l_land
Width of the landing.
Definition: app_pemfc_twophase_saturation.h:402
virtual void global_dresponses_dl(std::vector< std::vector< double > > &df_dl, const FuelCell::ApplicationCore::FEVector &sol)
This class is used to evaluate the sensitivities of all responses that do not require looping over ce...
FuelCellShop::PostProcessing::WaterSorptionResponse< dim > waterSorption
Definition: app_pemfc_twophase_saturation.h:389
IMPORTANT: Add all new solution variables and equations here !
Definition: system_management.h:300
FuelCellShop::Equation::ElectronTransportEquation< dim > electron_transport
ElectronTransportEquation object.
Definition: app_pemfc_twophase_saturation.h:352
FuelCellShop::Equation::ReactionSourceTerms< dim > reaction_source_terms
ReactionSourceTerms object.
Definition: app_pemfc_twophase_saturation.h:357
FuelCellShop::PostProcessing::ORRCurrentDensityResponse< dim > ORRCurrent
Definition: app_pemfc_twophase_saturation.h:375
FuelCellShop::Equation::LambdaTransportEquation< dim > lambda_transport
LambdaTransportEquation object.
Definition: app_pemfc_twophase_saturation.h:347
FuelCell Geometry information class.
Definition: geometry.h:92
Class used to calculate the electronic ohmic heat generated in the electron conducting layers...
Definition: response_ohmic_heat.h:102
FuelCellShop::PostProcessing::SorptionHeatResponse< dim > sorptionHeat
Definition: app_pemfc_twophase_saturation.h:383
void vector_value(const Point< dim > &p, Vector< double > &v) const
This is the member function that computes the value of the initial solution for a given point...
boost::shared_ptr< FuelCellShop::Layer::CatalystLayer< dim > > CCL
Cathode Catalyst Layer.
Definition: app_pemfc_twophase_saturation.h:323
Class used to calculate the heat generated due to sorption of water inside the catalyst layer...
Definition: response_sorption_heat.h:102
FuelCell::SystemManagement * system
Definition: app_pemfc_twophase_saturation.h:86
FuelCellShop::Equation::FicksTransportEquation< dim > ficks_water_nitrogen
Definition: app_pemfc_twophase_saturation.h:366
FuelCellShop::Equation::FicksTransportEquation< dim > ficks_oxygen_nitrogen
Definition: app_pemfc_twophase_saturation.h:364
BlockVector< double > FEVector
The vector class used by applications.
Definition: application_data.h:46
virtual void bdry_residual(FuelCell::ApplicationCore::FEVector &bdry_vector, const typename DoFApplication< dim >::FaceInfo &bdry_info)
Assemble local boundary residual.
boost::shared_ptr< FuelCellShop::Layer::GasDiffusionLayer< dim > > CGDL
Cathhode GDL Layer.
Definition: app_pemfc_twophase_saturation.h:319
The data type used in function calls of Application.
Definition: fe_vectors.h:59
virtual void cell_dresponses_du(std::vector< FuelCell::ApplicationCore::FEVector > &, const typename DoFApplication< dim >::CellInfo &, std::vector< std::vector< double > > &)
This class is used to evaluate the derivative of all the functionals that require looping over cells ...
Definition: app_pemfc_twophase_saturation.h:257
Application handling matrices and assembling the linear system to solve the sensitivity equations...
Definition: optimization_block_matrix_application.h:49
This class deals with Fick&#39;s Transport Equation.
Definition: ficks_transport_equation.h:132
This class describes properties of pure hydrogen.
Definition: PureGas.h:1081
FuelCellShop::PostProcessing::ProtonOhmicHeatResponse< dim > protonOhmicHeat
Definition: app_pemfc_twophase_saturation.h:379
double l_channel
Width of the channel.
Definition: app_pemfc_twophase_saturation.h:400
boost::shared_ptr< ApplicationData > data
Object for auxiliary data.
Definition: application_base.h:348
virtual void cell_responses(std::vector< double > &resp, const typename DoFApplication< dim >::CellInfo &info, const FuelCell::ApplicationCore::FEVector &sol)
Compute the value of all objective function and constraints.
virtual void set_parameters(const std::vector< std::string > &name_dvar, const std::vector< double > &value_dvar, ParameterHandler &param)
Function called by optimization loop in order to set the values in the ParameterHandler to the new de...
Definition: app_pemfc_twophase_saturation.h:150
FuelCellShop::Equation::SaturationTransportEquation< dim > saturation_transport
SaturationTransportEquation object.
Definition: app_pemfc_twophase_saturation.h:337
virtual void initialize_solution(FEVector &initial_guess, std::shared_ptr< Function< dim > > initial_function=std::shared_ptr< Function< dim > >())
Initialize nonlinear solution.
Class used to calculate the ORR current density and coverages (if provided in the kinetic model) by t...
Definition: response_current_density.h:59
boost::shared_ptr< FuelCellShop::Layer::GasDiffusionLayer< dim > > AGDL
Anode GDL Layer.
Definition: app_pemfc_twophase_saturation.h:318
This class describes properties of pure WaterVapor.
Definition: PureGas.h:1134