dune-fem  2.8-git
space/hpdg/default.hh
Go to the documentation of this file.
1 #ifndef DUNE_FEM_HPDG_SPACE_DISCONTINUOUSGALERKIN_DEFAULT_HH
2 #define DUNE_FEM_HPDG_SPACE_DISCONTINUOUSGALERKIN_DEFAULT_HH
3 
4 #include <memory>
5 
6 #include <dune/grid/common/gridenums.hh>
7 
13 
14 #include "blockmapper.hh"
15 #include "space.hh"
16 
17 namespace Dune
18 {
19 
20  namespace Fem
21  {
22 
23  namespace hpDG
24  {
25 
26  // Internal forward declaration
27  // ----------------------------
28 
29  template< class BasisFunctionSets >
30  class DefaultDiscontinuousGalerkinSpace;
31 
32 
33 
34 #ifndef DOXYGEN
35 
36  // DefaultDiscontinuousGalerkinSpaceTraits
37  // ---------------------------------------
38 
39  template< class BasisFunctionSets >
40  struct DefaultDiscontinuousGalerkinSpaceTraits
41  {
42  using DiscreteFunctionSpaceType = hpDG::DefaultDiscontinuousGalerkinSpace< BasisFunctionSets >;
43 
44  using BasisFunctionSetsType = BasisFunctionSets;
45  using BasisFunctionSetType = typename BasisFunctionSetsType::BasisFunctionSetType;
46 
47  using FunctionSpaceType = typename BasisFunctionSetType::FunctionSpaceType;
48  using GridPartType = typename BasisFunctionSetsType::GridPartType;
49 
50  static const int codimension = BasisFunctionSetType::EntityType::codimension;
51 
52  using BlockMapperType = hpDG::DiscontinuousGalerkinBlockMapper< GridPartType, BasisFunctionSetsType >;
53  static const int localBlockSize = BasisFunctionSetsType::localBlockSize;
54 
55  template< class DiscreteFunction, class Operation = Dune::Fem::DFCommunicationOperation::Copy >
56  struct CommDataHandle
57  {
58  using OperationType = Operation;
60  };
61  };
62 
63 #endif // #ifndef DOXYGEN
64 
65 
66 
67  // DefaultDiscontinuousGalerkinSpace
68  // ---------------------------------
69 
76  template< class BasisFunctionSets >
78  : public hpDG::DiscontinuousGalerkinSpace< DefaultDiscontinuousGalerkinSpaceTraits< BasisFunctionSets > >
79  {
81 
82  public:
88  using KeyType = typename BaseType::KeyType;
89 
96  const KeyType &key,
97  const InterfaceType interface = InteriorBorder_All_Interface,
98  const CommunicationDirection direction = ForwardCommunication )
99  : BaseType( gridPart, basisFunctionSets, key, interface, direction )
100  {}
101 
103  };
104 
105 
106 
107  // make_space
108  // ----------
109 
124  template< class BasisFunctionSets >
125  std::unique_ptr< DefaultDiscontinuousGalerkinSpace< BasisFunctionSets > >
127  const BasisFunctionSets &basisFunctionSets,
128  const typename BasisFunctionSets::KeyType &key,
129  const InterfaceType interface = InteriorBorder_All_Interface,
130  const CommunicationDirection direction = ForwardCommunication )
131  {
132  using DiscreteFunctionSpaceType = DefaultDiscontinuousGalerkinSpace< BasisFunctionSets >;
133  return std::unique_ptr< DiscreteFunctionSpaceType >( new DiscreteFunctionSpaceType( gridPart, basisFunctionSets, key, interface, direction ) );
134  }
135 
136  } // namespace hpDG
137 
138 
139 
140 #ifndef DOXYGEN
141 
142  // DefaultLocalRestrictProlong
143  // ---------------------------
144 
145  template< class BasisFunctionSets >
146  class DefaultLocalRestrictProlong< hpDG::DefaultDiscontinuousGalerkinSpace< BasisFunctionSets > >
147  : public DiscontinuousGalerkinLocalRestrictProlong< hpDG::DefaultDiscontinuousGalerkinSpace< BasisFunctionSets >, !BasisFunctionSets::orthogonal() >
148  {
149  using BaseType = DiscontinuousGalerkinLocalRestrictProlong< hpDG::DefaultDiscontinuousGalerkinSpace< BasisFunctionSets >, !BasisFunctionSets::orthogonal() >;
150 
151  public:
152  explicit DefaultLocalRestrictProlong ( const typename BaseType::DiscreteFunctionSpaceType &space )
153  : BaseType( space )
154  {}
155  };
156 
157 
158 
159 #endif // #ifndef DOXYGEN
160 
161  } // namespace Fem
162 
163 } // namespace Dune
164 
165 #endif // #ifndef DUNE_FEM_HPDG_SPACE_DISCONTINUOUSGALERKIN_DEFAULT_HH
Definition: bindguard.hh:11
std::unique_ptr< DefaultDiscontinuousGalerkinSpace< BasisFunctionSets > > make_space(typename BasisFunctionSets::GridPartType &gridPart, const BasisFunctionSets &basisFunctionSets, const typename BasisFunctionSets::KeyType &key, const InterfaceType interface=InteriorBorder_All_Interface, const CommunicationDirection direction=ForwardCommunication)
returns a new space instance for a given family of local basis function sets
Definition: space/hpdg/default.hh:126
abstract interface class for a family of local basis function sets
Definition: basisfunctionset/hpdg/basisfunctionsets.hh:30
typename Traits::KeyType KeyType
key type
Definition: basisfunctionset/hpdg/basisfunctionsets.hh:39
typename Traits::GridPartType GridPartType
grid part type
Definition: basisfunctionset/hpdg/basisfunctionsets.hh:36
Default communication handler for discrete functions.
Definition: defaultcommhandler.hh:29
Default implementation of an -adaptive discrete function space given a family of local basis function...
Definition: space/hpdg/default.hh:79
typename BaseType::KeyType KeyType
key type identifying a basis function set
Definition: space/hpdg/default.hh:88
typename BaseType::GridPartType GridPartType
grid part type
Definition: space/hpdg/default.hh:84
DefaultDiscontinuousGalerkinSpace(GridPartType &gridPart, const BasisFunctionSetsType &basisFunctionSets, const KeyType &key, const InterfaceType interface=InteriorBorder_All_Interface, const CommunicationDirection direction=ForwardCommunication)
Definition: space/hpdg/default.hh:94
typename BaseType::BasisFunctionSetsType BasisFunctionSetsType
basis function sets type
Definition: space/hpdg/default.hh:86
Generic implementation of a -adaptive discontinuous finite element space.
Definition: hpdg/space.hh:46
typename Traits::BasisFunctionSetsType BasisFunctionSetsType
basis function sets type
Definition: hpdg/space.hh:56
typename BasisFunctionSetsType::KeyType KeyType
key type identifying a basis function set
Definition: hpdg/space.hh:58
const BasisFunctionSetsType & basisFunctionSets() const
return basis function sets
Definition: hpdg/space.hh:287
typename BaseType::GridPartType GridPartType
grid part type
Definition: hpdg/space.hh:51
const KeyType & key(const EntityType &entity) const
get identifiying basis function set key assigned to given entity
Definition: hpdg/space.hh:231