4 #ifndef DUNE_PDELAB_FINITEELEMENT_QKDGLAGRANGE_HH 5 #define DUNE_PDELAB_FINITEELEMENT_QKDGLAGRANGE_HH 7 #include <dune/localfunctions/common/localbasis.hh> 8 #include <dune/localfunctions/common/localkey.hh> 9 #include <dune/localfunctions/common/localfiniteelementtraits.hh> 10 #include <dune/localfunctions/common/localtoglobaladaptors.hh> 20 template<
int k,
int n>
53 template<
class D,
class R,
int k>
57 for (
int j=0; j<=k; j++)
58 if (j!=i) result *= (k*x-j)/(i-j);
63 template<
class D,
class R,
int k>
68 for (
int j=0; j<=k; j++)
71 R prod( (k*1.0)/(i-j) );
72 for (
int l=0; l<=k; l++)
73 if (l!=i && l!=j) prod *= (k*x-l)/(i-l);
80 template<
class D,
class R,
int k>
85 R
p (
int i, D x)
const 88 for (
int j=0; j<=k; j++)
89 if (j!=i) result *= (k*x-j)/(i-j);
94 R
dp (
int i, D x)
const 98 for (
int j=0; j<=k; j++)
101 R prod( (k*1.0)/(i-j) );
102 for (
int l=0; l<=k; l++)
103 if (l!=i && l!=j) prod *= (k*x-l)/(i-l);
112 return i/((1.0)*(k+1));
116 template<
int k,
int d>
119 Dune::FieldVector<int,d> alpha;
120 for (
int j=0; j<d; j++)
122 alpha[j] = i % (k+1);
140 template<
class D,
class R,
int k,
int d>
145 typedef LocalBasisTraits<D,d,Dune::FieldVector<D,d>,R,1,Dune::FieldVector<R,1>,Dune::FieldMatrix<R,1,d> >
Traits;
155 std::vector<typename Traits::RangeType>& out)
const 158 for (
size_t i=0; i<size(); i++)
161 Dune::FieldVector<int,d> alpha(multiindex<k,d>(i));
167 for (
int j=0; j<d; j++)
168 out[i] *= p<D,R,k>(alpha[j],in[j]);
175 std::vector<typename Traits::JacobianType>& out)
const 180 for (
size_t i=0; i<size(); i++)
183 Dune::FieldVector<int,d> alpha(multiindex<k,d>(i));
186 for (
int j=0; j<d; j++)
190 out[i][0][j] = dp<D,R,k>(alpha[j],in[j]);
193 for (
int l=0; l<d; l++)
195 out[i][0][j] *= p<D,R,k>(alpha[l],in[l]);
213 template<
int k,
int d>
221 li[i] = LocalKey(0,0,i);
237 std::vector<LocalKey> li;
241 template<
int k,
int d,
class LB>
247 template<
typename F,
typename C>
250 typename LB::Traits::DomainType x;
251 typename LB::Traits::RangeType y;
258 Dune::FieldVector<int,d> alpha(multiindex<k,d>(i));
261 for (
int j=0; j<d; j++)
262 x[j] = (1.0*alpha[j])/k;
264 f.evaluate(x,y); out[i] = y;
270 template<
int d,
class LB>
275 template<
typename F,
typename C>
278 typename LB::Traits::DomainType x(0.5);
279 typename LB::Traits::RangeType y;
290 template<
class D,
class R,
int k,
int d>
303 typedef LocalFiniteElementTraits<LocalBasis,LocalCoefficients,LocalInterpolation>
Traits;
330 return interpolation;
347 LocalCoefficients coefficients;
348 LocalInterpolation interpolation;
358 template<
class Geometry,
class RF,
int k>
360 public ScalarLocalToGlobalFiniteElementAdaptorFactory<
361 QkDGLagrangeLocalFiniteElement<
362 typename Geometry::ctype, RF, k, Geometry::mydimension
368 typename Geometry::ctype, RF, k, Geometry::mydimension
370 typedef ScalarLocalToGlobalFiniteElementAdaptorFactory<LFE, Geometry> Base;
372 static const LFE lfe;
379 template<
class Geometry,
class RF,
int k>
386 #endif // DUNE_PDELAB_FINITEELEMENT_QKDGLAGRANGE_HH Definition: qkdglagrange.hh:242
Lagrange polynomials of degree k at equidistant points as a class.
Definition: qkdglagrange.hh:81
Definition: qkdglagrange.hh:291
void interpolate(const F &f, std::vector< C > &out) const
Local interpolation of a function.
Definition: qkdglagrange.hh:276
R p(int i, D x) const
Definition: qkdglagrange.hh:85
std::size_t size() const
number of coefficients
Definition: qkdglagrange.hh:225
void interpolate(const F &f, std::vector< C > &out) const
Local interpolation of a function.
Definition: qkdglagrange.hh:248
const Traits::LocalBasisType & localBasis() const
Definition: qkdglagrange.hh:314
void evaluateJacobian(const typename Traits::DomainType &in, std::vector< typename Traits::JacobianType > &out) const
Evaluate Jacobian of all shape functions.
Definition: qkdglagrange.hh:174
void evaluateFunction(const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate all shape functions.
Definition: qkdglagrange.hh:154
Definition: qkdglagrange.hh:24
GeometryType type() const
Definition: qkdglagrange.hh:335
R dp(int i, D x) const
Definition: qkdglagrange.hh:94
For backward compatibility – Do not use this!
Definition: adaptivity.hh:27
LocalBasisTraits< D, d, Dune::FieldVector< D, d >, R, 1, Dune::FieldVector< R, 1 >, Dune::FieldMatrix< R, 1, d > > Traits
Definition: qkdglagrange.hh:145
QkDGLagrangeLocalFiniteElement * clone() const
Definition: qkdglagrange.hh:340
Layout map for Q1 elements.
Definition: qkdglagrange.hh:214
R x(int i)
Definition: qkdglagrange.hh:110
QkDGFiniteElementFactory()
default constructor
Definition: qkdglagrange.hh:376
const Traits::LocalInterpolationType & localInterpolation() const
Definition: qkdglagrange.hh:328
QkDGLocalCoefficients()
Standard constructor.
Definition: qkdglagrange.hh:218
QkDGLagrangeLocalFiniteElement()
Definition: qkdglagrange.hh:307
LocalFiniteElementTraits< LocalBasis, LocalCoefficients, LocalInterpolation > Traits
Definition: qkdglagrange.hh:303
Definition: qkdglagrange.hh:21
const Traits::LocalCoefficientsType & localCoefficients() const
Definition: qkdglagrange.hh:321
Dune::FieldVector< int, d > multiindex(int i)
Definition: qkdglagrange.hh:117
R p(int i, D x)
Definition: qkdglagrange.hh:54
Lagrange shape functions of order k on the reference cube.
Definition: qkdglagrange.hh:141
R dp(int i, D x)
Definition: qkdglagrange.hh:64
static const unsigned int value
Definition: gridfunctionspace/tags.hh:139
unsigned int order() const
Polynomial order of the shape functions.
Definition: qkdglagrange.hh:201
unsigned int size() const
number of shape functions
Definition: qkdglagrange.hh:148
const LocalKey & localKey(std::size_t i) const
get i'th index
Definition: qkdglagrange.hh:231
Factory for global-valued QkDG elements.
Definition: qkdglagrange.hh:359