template <>
inline
Point<1>
-FELinear<1>::linear_shape_grad(const unsigned int i,
- const Point<1>&) const
+FEQuadraticSub<1>::linear_shape_grad(const unsigned int i,
+ const Point<1>&) const
{
Assert((i<2), ExcInvalidIndex(i));
switch (i)
+template <>
+inline
+double
+FEQuadraticSub<2>::linear_shape_value (const unsigned int i,
+ const Point<2>& p) const
+{
+ Assert((i<4), ExcInvalidIndex(i));
+ switch (i)
+ {
+ case 0: return (1.-p(0)) * (1.-p(1));
+ case 1: return p(0) * (1.-p(1));
+ case 2: return p(0) * p(1);
+ case 3: return (1.-p(0)) * p(1);
+ }
+ return 0.;
+};
+
+
+
template <>
Point<2>
FEQuadraticSub<2>::shape_grad (const unsigned int i,
+template <>
+inline
+Point<2>
+FEQuadraticSub<2>::linear_shape_grad (const unsigned int i,
+ const Point<2>& p) const
+{
+ Assert((i<4), ExcInvalidIndex(i));
+ switch (i)
+ {
+ case 0: return Point<2> (p(1)-1., p(0)-1.);
+ case 1: return Point<2> (1.-p(1), -p(0));
+ case 2: return Point<2> (p(1), p(0));
+ case 3: return Point<2> (-p(1), 1.-p(0));
+ }
+ return Point<2> ();
+};
+
+
+
template <>
void FEQuadraticSub<2>::get_local_mass_matrix (const DoFHandler<2>::cell_iterator &cell,
const Boundary<2> &,
for (unsigned int vertex=0; vertex<2; ++vertex)
ansatz_points[vertex] = face->vertex(vertex);
- ansatz_points[2] = (ansatz_points[0] + ansatz_points[1]) / 1;
+ ansatz_points[2] = (ansatz_points[0] + ansatz_points[1]) / 2;
};