1#ifndef DUNE_FEM_FUNCTION_TUPLEDISCRETEFUNCTION_DISCRETEFUNCTION_HH
2#define DUNE_FEM_FUNCTION_TUPLEDISCRETEFUNCTION_DISCRETEFUNCTION_HH
8#include <dune/common/hybridutilities.hh>
26 template<
class ... DiscreteFunctions >
27 class TupleDiscreteFunction;
32 template<
class ... DiscreteFunctions >
35 TupleDiscreteFunctionSpace< typename DiscreteFunctions::DiscreteFunctionSpaceType ... >,
36 TupleDofVector< typename DiscreteFunctions::DofVectorType ... >
47 template<
class ... DiscreteFunctions >
50 public std::tuple< DiscreteFunctions ... >
57 typedef std::tuple< DiscreteFunctions ... > DiscreteFunctionTuple;
59 static_assert(
sizeof ... ( DiscreteFunctions ) > 0,
"TupleDiscreteFunction needs at least one DiscreteFunction." );
62 typedef decltype ( std::index_sequence_for< DiscreteFunctions ... >() )
Sequence;
75 typedef typename std::tuple_element< i, DiscreteFunctionTuple >::type
Type;
108 DiscreteFunctionTuple(
std::move( other ) ),
121 return std::get< i >( *
this );
127 return std::get< i >( *
this );
138 template< std::size_t ... I >
141 DiscreteFunctionTuple(
143 name +
"_comp_" +
std::to_string( I ),
space.template subDiscreteFunctionSpace< I >()
148 template< std::size_t ... I >
152 DiscreteFunctionTuple(
154 name +
"_comp_" +
std::to_string( I ),
space.template subDiscreteFunctionSpace< I >(),
Definition: bindguard.hh:11
std::tuple_element< i, Tuple >::type & get(Dune::TypeIndexedTuple< Tuple, Types > &tuple)
Definition: typeindexedtuple.hh:122
static void forEach(IndexRange< T, sz > range, F &&f)
Definition: hybrid.hh:129
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: common/discretefunction.hh:1081
Definition: common/scalarproducts.hh:73
forward declaration
Definition: tuplediscretefunction/discretefunction.hh:51
const DofVectorType & dofVector() const
Definition: tuplediscretefunction/discretefunction.hh:116
const SubDiscreteFunction< i >::Type & subDiscreteFunction() const
Definition: tuplediscretefunction/discretefunction.hh:125
TupleDiscreteFunction(const ThisType &other)
Definition: tuplediscretefunction/discretefunction.hh:99
decltype(std::index_sequence_for< DiscreteFunctions ... >()) Sequence
Definition: tuplediscretefunction/discretefunction.hh:62
const DiscreteFunctionSpaceType & space() const
obtain a reference to the corresponding DiscreteFunctionSpace
Definition: common/discretefunction.hh:709
TupleDiscreteFunction()=delete
TupleDiscreteFunction(const std::string &name, const DiscreteFunctionSpaceType &space, std::index_sequence< I ... >)
Definition: tuplediscretefunction/discretefunction.hh:139
TupleDiscreteFunction(const std::string &name, const DiscreteFunctionSpaceType &space, DofVectorType &dofVector, std::index_sequence< I ... >)
Definition: tuplediscretefunction/discretefunction.hh:149
DofVectorType dofVector_
Definition: tuplediscretefunction/discretefunction.hh:159
TupleDiscreteFunction(ThisType &&other)
Definition: tuplediscretefunction/discretefunction.hh:106
TupleDofVector< typename DiscreteFunctions::DofVectorType ... > DofVectorType
Definition: tuplediscretefunction/discretefunction.hh:64
TupleDiscreteFunction(const std::string &name, const DiscreteFunctionSpaceType &dfSpace)
Constructor to use if the vector storing the dofs does not exist yet.
Definition: tuplediscretefunction/discretefunction.hh:94
DofVectorType & dofVector()
Definition: tuplediscretefunction/discretefunction.hh:115
TupleDiscreteFunctionSpace< typename DiscreteFunctions::DiscreteFunctionSpaceType ... > DiscreteFunctionSpaceType
type for the discrete function space this function lives in
Definition: tuplediscretefunction/discretefunction.hh:69
TupleDiscreteFunction(const std::string &name, const DiscreteFunctionSpaceType &dfSpace, DofVectorType &dofVector)
Constructor to use if the vector storing the dofs (which is a block vector) already exists.
Definition: tuplediscretefunction/discretefunction.hh:84
ThisType & operator=(const ThisType &)=delete
SubDiscreteFunction< i >::Type & subDiscreteFunction()
Definition: tuplediscretefunction/discretefunction.hh:119
void enableDofCompression()
Enable this discrete function for dof compression, i.e. during grid changes a dof compression is done...
Definition: tuplediscretefunction/discretefunction.hh:131
MutableLocalFunction< DiscreteFunctionType > LocalFunctionType
Definition: tuplediscretefunction/discretefunction.hh:40
TupleDiscreteFunction< DiscreteFunctions ... > DiscreteFunctionType
Definition: tuplediscretefunction/discretefunction.hh:39
helper struct to get the type of the i-th sub function
Definition: tuplediscretefunction/discretefunction.hh:74
std::tuple_element< i, DiscreteFunctionTuple >::type Type
Definition: tuplediscretefunction/discretefunction.hh:75
Definition: tuplediscretefunction/dofvector.hh:30
Definition: tuplespace.hh:192