dune-localfunctions  2.7.0
basisevaluator.hh
Go to the documentation of this file.
1 // -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
2 // vi: set et ts=4 sw=2 sts=2:
3 #ifndef DUNE_BASISEVALUATOR_HH
4 #define DUNE_BASISEVALUATOR_HH
5 
6 #include <vector>
7 
8 #include <dune/common/fmatrix.hh>
9 #include <dune/common/fvector.hh>
10 #include <dune/common/typetraits.hh>
11 
12 #include <dune/geometry/type.hh>
13 
17 
18 namespace Dune
19 {
20  /*******************************************
21  * Should be removed as soon as the Tensor
22  * classes have been revisited. See remarks
23  * in tensor.hh (also hold true here).
24  *******************************************/
25 
26 
27  template <class B>
29  {
30  typedef B Basis;
31  typedef typename Basis::Field Field;
32  typedef typename Basis::DomainVector DomainVector;
33  static const int dimension = Basis::dimension;
34  static const int dimRange = Basis::dimRange;
35 
36  typedef std::vector<Field> Container;
37 
38  template< class Deriv >
39  struct BaseIterator;
40 
41  template <unsigned int deriv>
42  struct Iterator
43  {
46  };
47 
48  unsigned int size() const
49  {
50  return size_;
51  }
52 
53  protected:
54  MonomialEvaluator(const Basis &basis,unsigned int order,unsigned int size)
55  : basis_(basis),
56  order_(order),
57  size_(size),
59  {}
60  template <int deriv>
61  void resize()
62  {
64  container_.resize(totalSize);
65  }
67  const Basis &basis_;
68  unsigned int order_,size_;
70  };
71 
72 
73  template< class B >
74  template< class Deriv >
75  struct MonomialEvaluator< B >::BaseIterator
76  {
77  typedef Deriv Derivatives;
78  typedef typename Deriv::Field Field;
79  static const unsigned int blockSize = Deriv::size;
80  typedef Dune::FieldVector<Field,blockSize> Block;
81  static const DerivativeLayoutNS::DerivativeLayout layout = Deriv::layout;
82  static const unsigned int dimDomain = Deriv::dimDomain;
83  static const unsigned int dimRange = Deriv::dimRange;
84 
85  typedef std::vector<Field> Container;
86  typedef typename Container::iterator CIter;
87 
88  explicit BaseIterator ( Container &container )
89  : pos_( container.begin() ),
90  end_( container.end() )
91  {}
92 
93  const Deriv &operator*() const
94  {
95  assert(!done());
96  return reinterpret_cast<const Deriv&>(*pos_);
97  }
98 
99  const Deriv *operator->() const
100  {
101  return &(operator*());
102  }
103 
104  bool done () const
105  {
106  return pos_ == end_;
107  }
108 
109  BaseIterator &operator++ ()
110  {
111  pos_ += blockSize;
112  return *this;
113  }
114 
115  BaseIterator &operator+= ( unsigned int skip )
116  {
117  pos_ += skip*blockSize;
118  return *this;
119  }
120 
121  private:
122  CIter pos_;
123  const CIter end_;
124  };
125 
126  template< class B >
128  : public MonomialEvaluator< B >
129  {
130  typedef B Basis;
131  typedef typename Basis::Field Field;
132  typedef typename Basis::DomainVector DomainVector;
133  typedef std::vector<Field> Container;
134  static const int dimension = Basis::dimension;
135  static const int dimRange = Basis::dimRange;
137 
138  template <unsigned int deriv>
139  struct Iterator : public Base::template Iterator<deriv>
140  {};
141 
142  StandardEvaluator(const Basis &basis)
143  : Base(basis,basis.order(),basis.size())
144  {}
145  template <unsigned int deriv,class DVector>
146  typename Iterator<deriv>::All evaluate(const DVector &x)
147  {
148  Base::template resize<deriv>();
149  basis_.template evaluate<deriv>(x,&(container_[0]));
150  return typename Iterator<deriv>::All(container_);
151  }
153  {
154  Base::template resize<0>();
155  basis_.integrate(&(container_[0]));
156  return typename Iterator<0>::Integrate(container_);
157  }
158 
159  protected:
160  StandardEvaluator ( const Basis &basis, unsigned int size )
161  : Base( basis, basis.order(), size )
162  {}
163 
164  private:
166  using Base::basis_;
167  using Base::container_;
168  };
169 
170 }
171 
172 #endif
Dune::StandardEvaluator::Container
std::vector< Field > Container
Definition: basisevaluator.hh:133
Dune::StandardEvaluator::StandardEvaluator
StandardEvaluator(const Basis &basis)
Definition: basisevaluator.hh:142
Dune::MonomialEvaluator::BaseIterator::Block
Dune::FieldVector< Field, blockSize > Block
Definition: basisevaluator.hh:80
Dune::MonomialEvaluator::dimension
static const int dimension
Definition: basisevaluator.hh:37
Dune::MonomialEvaluator::Basis
B Basis
Definition: basisevaluator.hh:34
Dune::MonomialEvaluator::container_
Container container_
Definition: basisevaluator.hh:73
Dune::MonomialEvaluator::BaseIterator::BaseIterator
BaseIterator(Container &container)
Definition: basisevaluator.hh:88
Dune::MonomialEvaluator::size_
unsigned int size_
Definition: basisevaluator.hh:72
Dune::StandardEvaluator::Field
Basis::Field Field
Definition: basisevaluator.hh:131
Dune::StandardEvaluator::StandardEvaluator
StandardEvaluator(const Basis &basis, unsigned int size)
Definition: basisevaluator.hh:160
Dune::StandardEvaluator::Basis
B Basis
Definition: basisevaluator.hh:130
Dune
Definition: bdfmcube.hh:15
Dune::MonomialEvaluator::Field
Basis::Field Field
Definition: basisevaluator.hh:35
Dune::StandardEvaluator
Definition: basisevaluator.hh:127
Dune::MonomialEvaluator::BaseIterator::Field
Deriv::Field Field
Definition: basisevaluator.hh:78
Dune::MonomialEvaluator::BaseIterator
Definition: basisevaluator.hh:43
Dune::MonomialEvaluator::BaseIterator::CIter
Container::iterator CIter
Definition: basisevaluator.hh:86
Dune::MonomialEvaluator::Iterator
Definition: basisevaluator.hh:46
Dune::MonomialEvaluator::basis_
const Basis & basis_
Definition: basisevaluator.hh:71
Dune::StandardEvaluator::integrate
Iterator< 0 >::Integrate integrate()
Definition: basisevaluator.hh:152
Dune::MonomialEvaluator::BaseIterator::Derivatives
Deriv Derivatives
Definition: basisevaluator.hh:77
Dune::MonomialEvaluator
Definition: basisevaluator.hh:28
Dune::MonomialEvaluator::Iterator::All
BaseIterator< Derivatives< Field, dimension, dimRange, deriv, DerivativeLayoutNS::derivative > > All
Definition: basisevaluator.hh:48
Dune::MonomialEvaluator::resize
void resize()
Definition: basisevaluator.hh:65
Dune::StandardEvaluator::dimRange
static const int dimRange
Definition: basisevaluator.hh:135
Dune::StandardEvaluator::dimension
static const int dimension
Definition: basisevaluator.hh:134
Dune::Derivatives
Definition: tensor.hh:170
Dune::MonomialEvaluator::Container
std::vector< Field > Container
Definition: basisevaluator.hh:40
Dune::MonomialEvaluator::size
unsigned int size() const
Definition: basisevaluator.hh:52
field.hh
Dune::MonomialEvaluator::BaseIterator::done
bool done() const
Definition: basisevaluator.hh:104
Dune::MonomialEvaluator::dimRange
static const int dimRange
Definition: basisevaluator.hh:38
tensor.hh
Dune::MonomialEvaluator::order_
unsigned int order_
Definition: basisevaluator.hh:72
Dune::MonomialEvaluator::DomainVector
Basis::DomainVector DomainVector
Definition: basisevaluator.hh:36
Dune::StandardEvaluator::Base
MonomialEvaluator< B > Base
Definition: basisevaluator.hh:136
Dune::MonomialEvaluator::MonomialEvaluator
MonomialEvaluator(const Basis &basis, unsigned int order, unsigned int size)
Definition: basisevaluator.hh:58
Dune::StandardEvaluator::DomainVector
Basis::DomainVector DomainVector
Definition: basisevaluator.hh:132
multiindex.hh
Dune::StandardEvaluator::evaluate
Iterator< deriv >::All evaluate(const DVector &x)
Definition: basisevaluator.hh:146
Dune::MonomialEvaluator::BaseIterator::operator*
const Deriv & operator*() const
Definition: basisevaluator.hh:93
Dune::DerivativeLayoutNS::DerivativeLayout
DerivativeLayout
Definition: tensor.hh:166
Dune::MonomialEvaluator::BaseIterator::Container
std::vector< Field > Container
Definition: basisevaluator.hh:85
Dune::MonomialEvaluator::BaseIterator::operator->
const Deriv * operator->() const
Definition: basisevaluator.hh:99
Dune::operator*
Field operator*(const Unity< Field > &u, const Field &f)
Definition: field.hh:48
Dune::StandardEvaluator::Iterator
Definition: basisevaluator.hh:139
Dune::MonomialEvaluator::Iterator::Integrate
BaseIterator< Derivatives< Field, dimension, 1, 0, DerivativeLayoutNS::value > > Integrate
Definition: basisevaluator.hh:49