DUNE-ACFEM (2.5.1)

discretefunctionselector.hh
1 #ifndef __DUNE_ACFEM_DISCRETE_FUNCTION_SELECTOR_HH__
2 #define __DUNE_ACFEM_DISCRETE_FUNCTION_SELECTOR_HH__
3 
4 #include <dune/fem/gridpart/adaptiveleafgridpart.hh>
5 #include <dune/fem/space/lagrange.hh>
6 #include <dune/fem/space/discontinuousgalerkin.hh>
7 #include <dune/fem/function/adaptivefunction.hh>
8 #include <dune/fem/function/blockvectorfunction.hh>
9 
10 #include "solverselector.hh"
11 
12 namespace Dune {
13 
14  namespace ACFem {
15 
23  template<class DiscreteFunctionSpaceType, SolverFamily::Family family>
24  struct DiscreteFunctionSelector;
25 
26  template<class DiscreteFunctionSpaceType>
27  struct DiscreteFunctionSelector<DiscreteFunctionSpaceType, SolverFamily::ISTL>
28  {
29  typedef Dune::Fem::ISTLBlockVectorDiscreteFunction<DiscreteFunctionSpaceType> DiscreteFunctionType;
30  };
31 
32  template<class DiscreteFunctionSpaceType>
33  struct DiscreteFunctionSelector<DiscreteFunctionSpaceType, SolverFamily::FEM>
34  {
35  typedef Dune::Fem::AdaptiveDiscreteFunction<DiscreteFunctionSpaceType> DiscreteFunctionType;
36  };
37 
38  template<class DiscreteFunctionSpaceType>
39  struct DiscreteFunctionSelector<DiscreteFunctionSpaceType, SolverFamily::PETSC>
40  {
41  typedef Dune::Fem::PetscDiscreteFunction<DiscreteFunctionSpaceType> DiscreteFunctionType;
42  };
43 
55  template<class Grid, class FunctionSpace, unsigned PolOrder, SolverFamily::Family family = SolverFamily::family>
57  {
58  typedef Grid GridType;
59  typedef FunctionSpace FunctionSpaceType;
60 
62  enum { polynomialOrder = PolOrder };
63 
64  typedef Dune::Fem::AdaptiveLeafGridPart<GridType, Dune::InteriorBorder_Partition> GridPartType;
65  typedef Dune::Fem::LagrangeDiscreteFunctionSpace<FunctionSpaceType, GridPartType, PolOrder> DiscreteFunctionSpaceType;
66 
67  typedef typename DiscreteFunctionSelector<DiscreteFunctionSpaceType, family>::DiscreteFunctionType DiscreteFunctionType;
68  };
69 
81  template<class Grid, class FunctionSpace, unsigned PolOrder, SolverFamily::Family family = SolverFamily::family>
83  {
84  typedef Grid GridType;
85  typedef FunctionSpace FunctionSpaceType;
86 
87  enum { polynomialOrder = PolOrder };
88 
89  typedef Dune::Fem::AdaptiveLeafGridPart<GridType, Dune::InteriorBorder_Partition> GridPartType;
90  typedef Dune::Fem::DiscontinuousGalerkinSpace<FunctionSpaceType, GridPartType, PolOrder> DiscreteFunctionSpaceType;
91 
92  typedef typename DiscreteFunctionSelector<DiscreteFunctionSpaceType, family>::DiscreteFunctionType DiscreteFunctionType;
93  };
94 
106  template<class Grid, class FunctionSpace, unsigned PolOrder, SolverFamily::Family family = SolverFamily::family>
108  {
109  typedef Grid GridType;
110  typedef FunctionSpace FunctionSpaceType;
111 
112  enum { polynomialOrder = PolOrder };
113 
114  typedef Dune::Fem::AdaptiveLeafGridPart<GridType, Dune::InteriorBorder_Partition> GridPartType;
115  typedef Dune::Fem::LagrangeDiscontinuousGalerkinSpace<FunctionSpaceType, GridPartType, PolOrder> DiscreteFunctionSpaceType;
116 
117  typedef typename DiscreteFunctionSelector<DiscreteFunctionSpaceType, family>::DiscreteFunctionType DiscreteFunctionType;
118  };
119 
121 
122  } // ACFem::
123 
124 } // Dune::
125 
126 #endif // __DUNE_ACFEM_DISCRETE_FUNCTION_SELECTOR_HH__
Helper class which defines likey discrete function types.
Definition: discretefunctionselector.hh:83
Helper class which defines likey discrete function types.
Definition: discretefunctionselector.hh:108
Helper class which defines likey discrete function types.
Definition: discretefunctionselector.hh:57
FunctionSpace FunctionSpaceType
Type of underlying function space.
Definition: discretefunctionselector.hh:59
Grid GridType
Type of underlying grid.
Definition: discretefunctionselector.hh:58
Creative Commons License   |  Legal Statements / Impressum  |  Hosted by TU Dresden  |  generated with Hugo v0.80.0 (May 15, 22:30, 2024)