OpenFCST: The open-source Fuel Cell Simulation Toolbox
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
app_pemfc.h
Go to the documentation of this file.
1 //---------------------------------------------------------------------------
2 //
3 // FCST: Fuel Cell Simulation Toolbox
4 //
5 // Copyright (C) 2009-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.h
11 // - Description:
12 // - Developers: M. Secanell, P. Dobson, M. Bhaiya
13 // - $Id: app_pemfc.h 1459 2013-08-30 22:27:10Z secanell $
14 //
15 //---------------------------------------------------------------------------
16 
17 #ifndef _FUELCELL__APP_PEMFC__H
18 #define _FUELCELL__APP_PEMFC__H
19 
20 // Include deal.II classes
21 #include <base/parameter_handler.h>
22 #include <base/function_lib.h>
23 #include <base/function.h>
24 #include <base/quadrature_lib.h>
25 
26 #include <lac/block_vector.h>
27 #include <lac/solver_cg.h>
28 #include <lac/solver_gmres.h>
29 #include <lac/precondition.h>
30 #include <lac/precondition_block.h>
31 #include <lac/block_matrix_array.h>
32 #include <lac/filtered_matrix.h>
33 #include <lac/sparse_ilu.h>
34 #include <lac/sparse_direct.h>
35 
36 #include <grid/grid_generator.h>
37 #include <grid/tria_accessor.h>
38 #include <grid/tria_iterator.h>
39 #include <grid/tria_boundary_lib.h>
40 
41 #include <fe/fe_values.h>
42 
43 #include <numerics/vector_tools.h>
44 #include <numerics/matrix_tools.h>
45 #include <numerics/error_estimator.h>
46 #include <boost/shared_ptr.hpp>
47 
48 // Include appframe classes
49 #include <appframe/base.h>
53 #include <appframe/newton.h>
54 
56 #include "solver_utils.h"
57 #include "newton_w_line_search.h"
58 #include "newton_w_3pp.h"
59 #include "newton_w_3ppC.h"
60 #include "linear_solvers.h"
61 
62 #include "operating_conditions.h"
63 #include "design_MPL.h"
64 #include "PureGas.h"
65 #include "PureLiquid.h"
66 #include "design_fibrous_GDL.h"
67 #include "agglomerate_CL.h"
68 #include "homogeneous_CL.h"
69 #include "nafion_membrane.h"
70 #include "BinaryDiffusion.h"
71 #include "geometries.h"
72 #include "geometry.h"
73 #include "fcst_constants.h"
74 #include "tafel_kinetics.h"
75 #include "dual_path_kinetics.h"
76 //#include "appshop_cell.h"
77 //#include "appshop_residual.h"
78 
79 // Equation Classes
81 #include "reaction_source_terms.h"
85 #include "sorption_source_terms.h"
87 
88 //Include STL
89 #include <fstream>
90 #include <iostream>
91 #include <sstream>
92 #include <cmath>
93 #include <vector>
94 
97 namespace FuelCell
98 {
99 
100  namespace InitialSolution
101  {
107  template <int dim>
109  :
110  public Function<dim>
111  {
112  public:
120  ~AppPemfcIC ();
121 
126  void vector_value (const Point<dim> &p,
127  Vector<double> &v) const;
128 
129  private:
132 
134  boost::shared_ptr< FuelCellShop::Geometry::GridBase<dim> > grid;
135  };
136 
137  } //end namespace InitialSolution
138 
139 
140  namespace Application
141  {
142  //---------------------------------------------------------------------------
143  //---------------------------------------------------------------------------
144  //---------------------------------------------------------------------------
164  template <int dim>
165  class AppPemfc
166  :
168  {
169 
170  public:
171 
178  AppPemfc (boost::shared_ptr<AppFrame::ApplicationData> data = boost::shared_ptr<AppFrame::ApplicationData> ());
179 
183  ~AppPemfc ();
190  virtual void declare_parameters(ParameterHandler& param);
191 
198  virtual void set_parameters(const std::vector<std::string>& name_dvar,
199  const std::vector<double>& value_dvar,
200  ParameterHandler& param);
201 
206  void _initialize(ParameterHandler& param);
207 
221  void initialize_grid(ParameterHandler& param);
222 
226  virtual void initialize(ParameterHandler& param);
227 
247  virtual void cell_matrix(MatrixVector& cell_matrices,
248  const typename DoFApplication<dim>::CellInfo& cell);
258  virtual void cell_residual(AppFrame::FEVector& cell_vector,
259  const typename DoFApplication<dim>::CellInfo& cell);
260 
261 
268  virtual void dirichlet_bc(std::map<unsigned int, double>& boundary_values) const;
269 
273  virtual void solve(AppFrame::FEVector& start,
274  const AppFrame::FEVectors& rhs);
275 
279  virtual double estimate(const AppFrame::FEVectors& sol);
280 
287  virtual void check_responses();
288 
292  virtual void cell_responses (std::vector<double>& resp,
293  const typename DoFApplication<dim>::CellInfo& info,
294  const AppFrame::FEVector& sol);
299  virtual void global_responses (std::vector<double>& resp,
300  const AppFrame::FEVector& sol);
301 
307  virtual void cell_dresponses_dl(std::vector<std::vector<double> >& /*cell_df_dl*/,
308  const typename DoFApplication<dim>::CellInfo& /*info*/,
309  const AppFrame::FEVector& /*sol*/) {};
310 
316  virtual void global_dresponses_dl(std::vector<std::vector<double> >& df_dl,
317  const AppFrame::FEVector& sol);
323  virtual void cell_dresponses_du(std::vector<AppFrame::FEVector >& /*cell_df_du*/,
324  const typename DoFApplication<dim>::CellInfo& /*info*/,
325  std::vector<std::vector<double> >& /*src*/) {};
326 
332  virtual void global_dresponses_du(std::vector<AppFrame::FEVector >& df_du,
333  const AppFrame::FEVector& src);
334 
335 
340  virtual double evaluate (const AppFrame::FEVectors& src);
341 
346  virtual void data_out(const std::string &basename,
347  const AppFrame::FEVectors &src);
348 
356  bool &good_solution);
357 
363  bool parse_init_solution_phi_s(AppFrame::FEVector& src, double& V_cell);
364 
370  bool parse_init_solution_x_O2(AppFrame::FEVector& src, double& x_O2);
371 
377  bool parse_init_solution_x_wv(AppFrame::FEVector& dst, double& x_wv_a, double& x_wv_c);
378 
382  void data_out(std::string basename, const AppFrame::FEVectors vectors, std::vector< std::string > solution_names);
383 
384  // virtual void set_output_variables(std::vector<std::string> &responses);
385 
386 
387  protected:
388 
390 
391 
397 
404  std::vector<std::string> equation_names;
410  std::vector<std::string> component_names;
412 
414 
415 
418  boost::shared_ptr< FuelCellShop::Geometry::GridBase<dim> > grid;
420 
422 
423 
427  //FuelCellShop::Material::Nafion electrolyte;
428 
432  //FuelCellShop::Material::CarbonBlack catalyst_support;
433 
437  //FuelCellShop::Material::Platinum catalyst;
438 
443 
448 
453 
458 
460 
462 
463 
466  boost::shared_ptr<FuelCellShop::Layer::GasDiffusionLayer<dim> > AGDL;
467 
471  boost::shared_ptr<FuelCellShop::Layer::MicroPorousLayer<dim> > AMPL;
472 
476  boost::shared_ptr<FuelCellShop::Layer::CatalystLayer<dim> > ACL;
477 
481  boost::shared_ptr<FuelCellShop::Layer::MembraneLayer<dim> > ML;
482 
483 
487  boost::shared_ptr<FuelCellShop::Layer::CatalystLayer<dim> > CCL;
488 
492  boost::shared_ptr<FuelCellShop::Layer::MicroPorousLayer<dim> > CMPL;
493 
497  boost::shared_ptr<FuelCellShop::Layer::GasDiffusionLayer<dim> > CGDL;
498 
499 
501 
504 
505 
509 
514 
519 
523 
528 
534 
536  std::vector<std::string> design_var;
537 
539  std::vector<double> design_var_value;
540  private:
541 
542  double l_channel;
543 
544  double l_land;
545 
546  };
547 
548  }
549 
550 }
551 
552 #endif //_FUELCELL__APPPEMFC_H