dune-localfunctions 2.8.0
Loading...
Searching...
No Matches
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
18namespace 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),
58 container_(0)
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 >
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
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
Definition: bdfmcube.hh:16
Field operator*(const Unity< Field > &u, const Field &f)
Definition: field.hh:48
DerivativeLayout
Definition: tensor.hh:166
Definition: basisevaluator.hh:29
static const int dimRange
Definition: basisevaluator.hh:34
B Basis
Definition: basisevaluator.hh:30
unsigned int order_
Definition: basisevaluator.hh:68
const Basis & basis_
Definition: basisevaluator.hh:67
MonomialEvaluator(const Basis &basis, unsigned int order, unsigned int size)
Definition: basisevaluator.hh:54
Basis::Field Field
Definition: basisevaluator.hh:31
unsigned int size_
Definition: basisevaluator.hh:68
Basis::DomainVector DomainVector
Definition: basisevaluator.hh:32
void resize()
Definition: basisevaluator.hh:61
Container container_
Definition: basisevaluator.hh:69
unsigned int size() const
Definition: basisevaluator.hh:48
std::vector< Field > Container
Definition: basisevaluator.hh:36
MonomialEvaluator(const MonomialEvaluator &)
static const int dimension
Definition: basisevaluator.hh:33
Definition: basisevaluator.hh:76
BaseIterator(Container &container)
Definition: basisevaluator.hh:88
const Deriv & operator*() const
Definition: basisevaluator.hh:93
Dune::FieldVector< Field, blockSize > Block
Definition: basisevaluator.hh:80
bool done() const
Definition: basisevaluator.hh:104
Container::iterator CIter
Definition: basisevaluator.hh:86
const Deriv * operator->() const
Definition: basisevaluator.hh:99
Deriv Derivatives
Definition: basisevaluator.hh:77
std::vector< Field > Container
Definition: basisevaluator.hh:85
Deriv::Field Field
Definition: basisevaluator.hh:78
Definition: basisevaluator.hh:43
BaseIterator< Derivatives< Field, dimension, 1, 0, DerivativeLayoutNS::value > > Integrate
Definition: basisevaluator.hh:45
BaseIterator< Derivatives< Field, dimension, dimRange, deriv, DerivativeLayoutNS::derivative > > All
Definition: basisevaluator.hh:44
Definition: basisevaluator.hh:129
Basis::Field Field
Definition: basisevaluator.hh:131
Basis::DomainVector DomainVector
Definition: basisevaluator.hh:132
Iterator< deriv >::All evaluate(const DVector &x)
Definition: basisevaluator.hh:146
MonomialEvaluator< B > Base
Definition: basisevaluator.hh:136
StandardEvaluator(const Basis &basis)
Definition: basisevaluator.hh:142
static const int dimRange
Definition: basisevaluator.hh:135
std::vector< Field > Container
Definition: basisevaluator.hh:133
Iterator< 0 >::Integrate integrate()
Definition: basisevaluator.hh:152
B Basis
Definition: basisevaluator.hh:130
StandardEvaluator(const Basis &basis, unsigned int size)
Definition: basisevaluator.hh:160
static const int dimension
Definition: basisevaluator.hh:134
Definition: basisevaluator.hh:140
Definition: tensor.hh:170