dune-fem 2.8.0
Loading...
Searching...
No Matches
subfunction.hh
Go to the documentation of this file.
1#ifndef DUNE_FEM_SUBFUNCTION_HH
2#define DUNE_FEM_SUBFUNCTION_HH
3
4#include <memory>
5#include <vector>
6
10
11namespace Dune
12{
13
14 namespace Fem
15 {
16
20 template <class DiscreteFunctionImp>
22 {
23 protected:
24 typedef DiscreteFunctionImp DiscreteFunctionType;
25 typedef typename DiscreteFunctionType :: DiscreteFunctionSpaceType SpaceType;
26 enum { dimRange = SpaceType :: dimRange };
27 typedef typename DiscreteFunctionType :: DofStorageType DofStorageType;
28 public:
29 typedef typename SpaceType :: template ToNewDimRange < 1 > :: Type SubSpaceType;
30
34
36 explicit SubFunctionStorage( DiscreteFunctionType& discreteFunction ) :
37 discreteFunction_( discreteFunction ),
38 space_( discreteFunction.space() ),
39 subSpace_( space_.gridPart (), space_.communicationInterface(), space_.communicationDirection() ),
40 subVector_( dimRange, nullptr ),
42 {}
43
45
52 SubDiscreteFunctionType& subFunction(std::size_t component) const
53 {
54 assert( component < dimRange );
55 if( ! subDiscreteFunction_[ component ] )
56 {
57 subVector_[ component ] =
58 std::make_unique< SubDofVectorType >( discreteFunction_.dofStorage(), SubMapperType( subSpace_.mapper(), component ) );
59 subDiscreteFunction_[ component ] =
60 std::make_unique< SubDiscreteFunctionType >( discreteFunction_.name()+ "_sub", subSpace_, *( subVector_[ component ] ));
61 }
62 return *( subDiscreteFunction_[ component ] );
63 }
64
65 protected:
69 mutable std::vector< std::unique_ptr< SubDofVectorType > > subVector_;
70 mutable std::vector< std::unique_ptr< SubDiscreteFunctionType > > subDiscreteFunction_;
71 };
72
73 } // namespace Fem
74
75} // namespace Dune
76
77#endif // #ifndef DUNE_FEM_SUBFUNCTION_HH
Definition: bindguard.hh:11
Definition: subfunction.hh:22
SubVector< DofStorageType, SubMapperType > SubDofVectorType
Definition: subfunction.hh:32
const SpaceType & space_
Definition: subfunction.hh:67
SubSpaceType subSpace_
Definition: subfunction.hh:68
DiscreteFunctionType::DofStorageType DofStorageType
Definition: subfunction.hh:27
DiscreteFunctionType::DiscreteFunctionSpaceType SpaceType
Definition: subfunction.hh:25
VectorDiscreteFunction< SubSpaceType, SubDofVectorType > SubDiscreteFunctionType
Definition: subfunction.hh:33
SubDiscreteFunctionType & subFunction(std::size_t component) const
return a SubDiscreteFunction repsenting only one component of the original discrete function
Definition: subfunction.hh:52
CombinedSubMapper< typename SubSpaceType ::MapperType, dimRange, PointBased > SubMapperType
Definition: subfunction.hh:31
DiscreteFunctionType & discreteFunction_
Definition: subfunction.hh:66
DiscreteFunctionImp DiscreteFunctionType
Definition: subfunction.hh:24
@ dimRange
Definition: subfunction.hh:26
SubFunctionStorage(DiscreteFunctionType &discreteFunction)
constructor storing the discrete function
Definition: subfunction.hh:36
SpaceType::template ToNewDimRange< 1 >::Type SubSpaceType
Definition: subfunction.hh:29
std::vector< std::unique_ptr< SubDofVectorType > > subVector_
Definition: subfunction.hh:69
std::vector< std::unique_ptr< SubDiscreteFunctionType > > subDiscreteFunction_
Definition: subfunction.hh:70
SubFunctionStorage(const SubFunctionStorage &)=delete
Definition: vectorfunction/vectorfunction.hh:42
Definition: combineddofstorage.hh:96
An implementation of DenseVector to extract a portion, not necessarly contiguos, of a vector.
Definition: subvector.hh:161