dune-fem 2.12-git
Loading...
Searching...
No Matches
hierarchical/function.hh
Go to the documentation of this file.
1#ifndef DUNE_FEM_FUNCTION_HIERARCHICAL_FUNCTION_HH
2#define DUNE_FEM_FUNCTION_HIERARCHICAL_FUNCTION_HH
3
5
6#if HAVE_DUNE_ISTL
9#endif // #if HAVE_DUNE_ISTL
10
17
18namespace Dune
19{
20
21 namespace Fem
22 {
23
24 // Internal Forward Declaration
25 // ----------------------------
26
27 template< class DiscreteFunctionSpace >
28 class HierarchicalDiscreteFunction;
29
30
31
32 namespace Impl
33 {
34
35 template< class Dof, class BlockIndices >
36 struct HierarchicalDofContainerChooser;
37
38#if HAVE_DUNE_ISTL
39 template< class Dof, int sz >
40 struct HierarchicalDofContainerChooser< Dof, Hybrid::IndexRange< int, sz > >
41 {
42 typedef BlockVector< FieldVector< Dof, sz > > Type;
43 };
44
45 template< class Dof, class... SR >
46 struct HierarchicalDofContainerChooser< Dof, Hybrid::CompositeIndexRange< SR... > >
47 {
48 typedef MultiTypeBlockVector< typename HierarchicalDofContainerChooser< Dof, SR >::Type... > Type;
49 };
50#else
51 template< class Dof, int sz >
52 struct HierarchicalDofContainerChooser< Dof, Hybrid::IndexRange< int, sz > >
53 {
54 typedef MutableBlockVector< DynamicArray< Dof >, sz > Type;
55 };
56
57 template< class Dof, class... SR >
58 struct HierarchicalDofContainerChooser< Dof, Hybrid::CompositeIndexRange< SR... > >
59 {
60 typedef MutableBlockVector< DynamicArray< Dof >, Hybrid::CompositeIndexRange< SR... >::size() > Type;
61 };
62#endif // #if HAVE_DUNE_ISTL
63
64 } // namespace Impl
65
66
67
68 // DiscreteFunctionTraits for HierarchicalDiscreteFunction
69 // -------------------------------------------------------
70
71 template< class DiscreteFunctionSpace >
98
99
100 // HierarchicalDiscreteFunction
101 // ----------------------------
102
103 template< class DiscreteFunctionSpace >
105 : public DiscreteFunctionDefault< HierarchicalDiscreteFunction< DiscreteFunctionSpace > >
106 {
109
110 public:
113
114 using BaseType :: name;
115
119
123
125 : BaseType( "copy of " + other.name(), other.space() ), dofVector_( allocateDofStorage( other.space() ) )
126 {
127 dofVector_ = other.dofVector_;
128 }
129
131 const DofVectorType &dofVector () const { return dofVector_; }
132
134 {
135 if( memObject_ )
136 memObject_->enableDofCompression();
137 }
138
139 protected:
141 {
142 auto memPair = allocateManagedDofStorage< DofVectorType >( space.gridPart().grid(), space.blockMapper() );
143 memObject_.reset( memPair.first );
144 return *memPair.second;
145 }
146
149 };
150
151 } // namespace Fem
152
153} // namespace Dune
154
155#endif // #ifndef DUNE_FEM_FUNCTION_HIERARCHICAL_FUNCTION_HH
static constexpr Index size()
Definition hybrid.hh:111
Definition stackallocator.hh:61
Traits class for a DiscreteFunction.
Definition common/discretefunction.hh:61
Definition common/discretefunction.hh:584
const DiscreteFunctionSpaceType & space() const
obtain a reference to the corresponding DiscreteFunctionSpace
Definition common/discretefunction.hh:709
const std::string & name() const
obtain the name of the discrete function
Definition common/discretefunction.hh:691
Definition hierarchical/dofvector.hh:131
Definition hierarchical/function.hh:106
HierarchicalDiscreteFunction(const ThisType &other)
Definition hierarchical/function.hh:124
DofVectorType & allocateDofStorage(const DiscreteFunctionSpaceType &space)
Definition hierarchical/function.hh:140
HierarchicalDiscreteFunction(const std::string &name, const DiscreteFunctionSpaceType &space, DofVectorType &dofVector)
Definition hierarchical/function.hh:116
BaseType::DofVectorType DofVectorType
Definition hierarchical/function.hh:112
std::unique_ptr< DofStorageInterface > memObject_
Definition hierarchical/function.hh:147
DofVectorType & dofVector()
Definition hierarchical/function.hh:130
const DofVectorType & dofVector() const
Definition hierarchical/function.hh:131
BaseType::DiscreteFunctionSpaceType DiscreteFunctionSpaceType
Definition hierarchical/function.hh:111
void enableDofCompression()
Definition hierarchical/function.hh:133
HierarchicalDiscreteFunction(const std::string &name, const DiscreteFunctionSpaceType &space)
Definition hierarchical/function.hh:120
DofVectorType & dofVector_
Definition hierarchical/function.hh:148
ThreadSafeValue< UninitializedObjectStack > LocalDofVectorStackType
Definition hierarchical/function.hh:91
DiscreteFunctionSpaceType::DomainType DomainType
Definition hierarchical/function.hh:78
DiscreteFunctionSpace DiscreteFunctionSpaceType
Definition hierarchical/function.hh:74
DiscreteFunctionSpaceType::RangeFieldType DofType
Definition hierarchical/function.hh:76
HierarchicalDiscreteFunction< DiscreteFunctionSpace > DiscreteFunctionType
Definition hierarchical/function.hh:95
StackAllocator< DofType, LocalDofVectorStackType * > LocalDofVectorAllocatorType
Definition hierarchical/function.hh:92
DiscreteFunctionSpaceType::RangeType RangeType
Definition hierarchical/function.hh:79
DynamicReferenceVector< DofType, LocalDofVectorAllocatorType > LocalDofVectorType
Definition hierarchical/function.hh:93
HierarchicalDofVector< typename Impl::HierarchicalDofContainerChooser< DofType, typename DiscreteFunctionSpaceType::LocalBlockIndices >::Type > DofVectorType
Definition hierarchical/function.hh:81
const DofType ** ConstDofBlockPtrType
Definition hierarchical/function.hh:89
MutableLocalFunction< DiscreteFunctionType > LocalFunctionType
Definition hierarchical/function.hh:96
An implementation of DenseVector which uses a std::vector of references as storage.
Definition storage/referencevector.hh:53
discrete function space