1 #ifndef DUNE_FEM_SPACE_COMMON_INTERPOLATE_HH 2 #define DUNE_FEM_SPACE_COMMON_INTERPOLATE_HH 7 #include <dune/grid/common/partitionset.hh> 8 #include <dune/grid/common/rangegenerators.hh> 40 template<
class Gr
idFunction,
class DiscreteFunction >
41 static inline void interpolate (
const GridFunction &u, DiscreteFunction &v )
49 template<
class Gr
idFunction,
class DiscreteFunction,
unsigned int partitions >
50 static inline void interpolate (
const GridFunction &u, DiscreteFunction &v, PartitionSet< partitions > ps )
52 const bool hasLocalFunction = std::is_convertible< GridFunction, HasLocalFunction >::value;
53 interpolate( u, v, ps, std::integral_constant< bool, hasLocalFunction >() );
56 template<
class Function,
class DiscreteFunction,
unsigned int partitions >
57 static inline void interpolate (
const Function &u, DiscreteFunction &v, PartitionSet< partitions > ps, std::integral_constant< bool, false > )
59 typedef typename DiscreteFunction :: DiscreteFunctionSpaceType :: GridPartType GridPartType;
62 GridFunctionType uGrid(
"uGrid", u, v.space().gridPart() );
67 template<
class Gr
idFunction,
class DiscreteFunction,
unsigned int partitions >
68 static inline void interpolate (
const GridFunction &u, DiscreteFunction &v, PartitionSet< partitions > ps, std::integral_constant< bool, true > )
72 const auto& gv =
static_cast< typename DiscreteFunction::GridPartType::GridViewType
>( v.gridPart() );
75 std::vector< typename DiscreteFunction::RangeFieldType > ldv;
76 ldv.reserve( v.space().blockMapper().maxNumDofs() * DiscreteFunction::DiscreteFunctionSpaceType::localBlockSize );
78 typename GridFunction::LocalFunctionType uLocal( u );
81 for(
const auto entity : elements( gv, ps ) )
84 const auto interpolation = v.space().interpolation( entity );
87 ldv.resize( v.space().basisFunctionSet( entity ).size() );
90 uLocal.init( entity );
91 interpolation( uLocal, ldv );
94 v.setLocalDofs( entity, ldv );
102 #endif // #ifndef DUNE_FEM_SPACE_COMMON_INTERPOLATE_HH
Definition: coordinate.hh:4
GridFunctionAdapter provides local functions for a Function.
Definition: gridfunctionadapter.hh:36
Abstract class representing a function.
Definition: function.hh:43
static void interpolate(const GridFunction &u, DiscreteFunction &v)
perform native interpolation of a discrete function space
Definition: interpolate.hh:41