dune-fem  2.8-git
localerror.hh
Go to the documentation of this file.
1 #ifndef DUNE_FEM_MARKING_LOCALERROR_HH
2 #define DUNE_FEM_MARKING_LOCALERROR_HH
3 
4 #include <dune/common/dynvector.hh>
5 
8 
9 namespace Dune
10 {
11 
12  namespace Fem
13  {
14 
15  // LocalFunctionalError
16  // --------------------
17 
18  template< class ErrorFunctional >
20  {
22 
23  static_assert( ErrorFunctional::dimRange == 1, "Error functionals must have dimRange == 1." );
24 
25  public:
26  typedef ErrorFunctional ErrorFunctionalType;
27 
28  typedef typename ErrorFunctionalType::DiscreteFunctionSpaceType DiscreteFunctionSpaceType;
29  typedef typename ErrorFunctionalType::GridPartType GridPartType;
30 
31  typedef typename DiscreteFunctionSpaceType::DomainType DomainType;
32  typedef typename DiscreteFunctionSpaceType::RangeType RangeType;
33  typedef typename DiscreteFunctionSpaceType::RangeFieldType RangeFieldType;
34 
35  typedef typename GridPartType::template Codim< 0 >::EntityType ElementType;
36 
38 
39  private:
40  struct LocalOne
41  {
42  typedef typename GridPartType::template Codim< 0 >::EntityType EntityType;
43 
44  typedef typename DiscreteFunctionSpaceType::FunctionSpaceType FunctionSpaceType;
45 
46  static const int dimDomain = FunctionSpaceType::dimDomain;
47  static const int dimRange = FunctionSpaceType::dimRange;
48 
49  typedef typename FunctionSpaceType::DomainType DomainType;
50  typedef typename FunctionSpaceType::RangeType RangeType;
51  typedef typename FunctionSpaceType::RangeFieldType RangeFieldType;
52 
53  LocalOne ( const EntityType &entity, int order ) : entity_( entity ), order_( order ) {}
54 
55  template< class Point >
56  void evaluate ( const Point &x, RangeType &value ) const
57  {
58  value[ 0 ] = 1;
59  }
60 
61  template< class Quadrature, class Values >
62  void evaluateQuadrature ( const Quadrature &quadrature, Values &values ) const
63  {
64  for( const auto qp : quadrature )
65  evaluate( qp, values[ qp.index() ] );
66  }
67 
68  int order () const { return order_; }
69 
70  const EntityType &entity () const { return entity_; }
71 
72  private:
73  const EntityType &entity_;
74  int order_;
75  };
76 
77  public:
78  explicit LocalFunctionalError ( const ErrorFunctionalType &errorFunctional )
79  : localErrorFunctional_( errorFunctional )
80  {
81  localIndicator_.reserve( space().blockMapper().maxNumDofs() * DiscreteFunctionSpaceType::localBlockSize );
82  }
83 
84  RangeFieldType operator() ( const ElementType &element ) const
85  {
86  localErrorFunctional_.init( element );
87  localIndicator_.resize( localErrorFunctional_.basisFunctionSet().size() );
88 
89  const auto &interpolation = space().interpolation( element );
90  interpolation( LocalOne( element, localErrorFunctional_.order() ), localIndicator_ );
91 
92  return localErrorFunctional_.localDofVector() * localIndicator_;
93  }
94 
95  const DiscreteFunctionSpaceType &space () const { return localErrorFunctional_.discreteFunction().space(); }
96 
97  private:
98  LocalErrorFunctionalType localErrorFunctional_;
99  Dune::DynamicVector< RangeFieldType > localIndicator_;
100  };
101 
102  } // namespace Fem
103 
104 } // namespace Dune
105 
106 #endif // #ifndef DUNE_FEM_MARKING_LOCALERROR_HH
Definition: bindguard.hh:11
typename Impl::ConstLocalFunction< GridFunction >::Type ConstLocalFunction
Definition: const.hh:517
Definition: localerror.hh:20
DiscreteFunctionSpaceType::RangeType RangeType
Definition: localerror.hh:32
const DiscreteFunctionSpaceType & space() const
Definition: localerror.hh:95
GridPartType::template Codim< 0 >::EntityType ElementType
Definition: localerror.hh:35
RangeFieldType operator()(const ElementType &element) const
Definition: localerror.hh:84
DiscreteFunctionSpaceType::DomainType DomainType
Definition: localerror.hh:31
LocalFunctionalError(const ErrorFunctionalType &errorFunctional)
Definition: localerror.hh:78
ErrorFunctional ErrorFunctionalType
Definition: localerror.hh:23
DiscreteFunctionSpaceType::RangeFieldType RangeFieldType
Definition: localerror.hh:33
ErrorFunctionalType::DiscreteFunctionSpaceType DiscreteFunctionSpaceType
Definition: localerror.hh:28
ConstLocalFunction< ErrorFunctionalType > LocalErrorFunctionalType
Definition: localerror.hh:37
ErrorFunctionalType::GridPartType GridPartType
Definition: localerror.hh:29
actual interface class for quadratures
Definition: quadrature.hh:405