OpenFCST: The open-source Fuel Cell Simulation Toolbox
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
app_laplace.h
Go to the documentation of this file.
1 //---------------------------------------------------------------------------
2 // $Id: app_laplace.h 1417 2013-08-30 16:27:42Z secanell $
3 //
4 // Copyright (C) 2012 by Marc Secanell
5 //
6 // This file is subject to QPL and may not be distributed
7 // without copyright and license information. Please refer
8 // to the file deal.II/doc/license.html for the text and
9 // further information on this license.
10 //
11 //---------------------------------------------------------------------------
12 
13 #ifndef _FUELCELL__APP_LAPLACE__H
14 #define _FUELCELL__APP_LAPLACE__H
15 
16 // Include deal.II classes
17 #include "base/parameter_handler.h"
18 #include "base/function_lib.h"
19 #include "base/function.h"
20 #include "base/quadrature_lib.h"
21 
22 #include "lac/block_vector.h"
23 #include "lac/solver_cg.h"
24 #include "lac/solver_gmres.h"
25 #include "lac/precondition.h"
26 #include "lac/precondition_block.h"
27 #include "lac/block_matrix_array.h"
28 #include "lac/filtered_matrix.h"
29 #include "lac/sparse_ilu.h"
30 #include "lac/sparse_direct.h"
31 
32 #include "grid/grid_generator.h"
33 #include "grid/tria_accessor.h"
34 #include "grid/tria_iterator.h"
35 #include "grid/tria_boundary_lib.h"
36 #include "linear_solvers.h"
37 #include "fe/fe_values.h"
38 
39 #include "numerics/vector_tools.h"
40 #include "numerics/matrix_tools.h"
41 #include "numerics/error_estimator.h"
42 
43 #include "boost/shared_ptr.hpp"
44 
45 // Include appframe classes
46 #include "appframe/base.h"
50 
51 // Include FuelCell classes
52 #include "system_management.h"
54 #include "solver_utils.h"
55 #include "operating_conditions.h"
56 #include "dummy_GDL.h"
57 #include "SGL_24_BA.h"
58 #include "PureGas.h"
59 #include "BinaryDiffusion.h"
60 #include "geometries.h"
61 #include "homogeneous_CL.h"
62 #include "platinum.h"
63 #include "tafel_kinetics.h"
64 #include "fcst_constants.h"
65 #include "ideal_gas.h"
68 
69 //Include STL
70 #include "fstream"
71 #include "iostream"
72 #include "sstream"
73 
74 // Use namespace of deal.II
75 using namespace dealii;
76 
77 namespace FuelCell
78 {
85  namespace InitialSolution
86  {
92  template <int dim>
93  //class InitialSolution
95  :
96  public Function<dim>
97  {
98  public:
106  ~AppLaplaceIC ();
110  double value (const Point<dim> &p, unsigned int) const;
115  void vector_value (const Point<dim> &p,
116  Vector<double> &v) const;
117 
118  private:
123 
124  };
125  } //end namespace InitialSolution
126 
127 
128 namespace Application
129 {
130  //---------------------------------------------------------------------------
131  //---------------------------------------------------------------------------
132  //---------------------------------------------------------------------------
138  template <int dim>
140  :
142  {
143  public:
144 
151  AppLaplace (boost::shared_ptr<AppFrame::ApplicationData> data =
152  boost::shared_ptr<AppFrame::ApplicationData> ());
153 
157  ~AppLaplace();
164  virtual void declare_parameters(ParameterHandler& param);
165 
172  virtual void set_parameters(const std::vector<std::string>& name_dvar,
173  const std::vector<double>& value_dvar,
174  ParameterHandler& param);
175 
180  void _initialize(ParameterHandler& param);
181 
185  virtual void initialize(ParameterHandler& param);
186 
200  void init_solution(AppFrame::FEVector& src);
213  virtual void cell_matrix(MatrixVector& cell_matrices,
214  const typename DoFApplication<dim>::CellInfo& cell);
224  virtual void cell_residual(AppFrame::FEVector& cell_vector,
225  const typename DoFApplication<dim>::CellInfo& cell);
226 
230  /*virtual void cell_dresidual_dlambda(std::vector<AppFrame::FEVector >& cell_vector,
231  const typename DoFApplication<dim>::CellInfo& cell,
232  std::vector<std::vector<double> >& src)
233  {};
234  */
241  virtual void dirichlet_bc(std::map<unsigned int, double>& boundary_values) const;
242 
246  virtual void solve(AppFrame::FEVector& start,
247  const AppFrame::FEVectors& rhs);
248 
252  virtual double estimate(const AppFrame::FEVectors& sol);
253 
260  /*virtual void check_responses()
261  {};
262  */
266  virtual void cell_responses (std::vector<double>& resp,
267  const typename DoFApplication<dim>::CellInfo& info,
268  const AppFrame::FEVector& sol)
269  {};
274  virtual void global_responses (std::vector<double>& resp,
275  const AppFrame::FEVector& sol)
276  {};
277 
283  /*virtual void cell_dresponses_dl(std::vector<std::vector<double> >& cell_df_dl,
284  const typename DoFApplication<dim>::CellInfo& info,
285  const AppFrame::FEVector& sol)
286  {};
287  */
293  /*virtual void global_dresponses_dl(std::vector<std::vector<double> >& df_dl,
294  const AppFrame::FEVector& sol)
295  {};
296  */
302  /*virtual void cell_dresponses_du(std::vector<AppFrame::FEVector >& cell_df_du,
303  const typename DoFApplication<dim>::CellInfo& info,
304  std::vector<std::vector<double> >& src)
305  {};
306 */
312  /* virtual void global_dresponses_du(std::vector<AppFrame::FEVector >& df_du,
313  const AppFrame::FEVector& src)
314  {};
315 */
320  virtual double evaluate (const AppFrame::FEVectors& src);
321 
326  /*virtual void data_out(const std::string &basename,
327  const AppFrame::FEVectors &src);
328  */
329 
330  private:
336  boost::shared_ptr< FuelCellShop::Geometry::GridBase<dim> > grid;
339  // Create the object that you need to store material and geometry properties
341  boost::shared_ptr<FuelCellShop::Layer::GasDiffusionLayer<dim> > CGDL;
348  };
349 }
350 }
351 
352 #endif //_FUELCELL__APP_TEST_H