template<> MappingQ<1>::MappingQ (const unsigned int,
const bool);
template<> MappingQ<1>::~MappingQ ();
-template<> void MappingQ<1>::compute_shapes_virtual (
- const std::vector<Point<1> > &unit_points,
- MappingQ1<1>::InternalData &data) const;
-template <> void MappingQ<1>::set_laplace_on_quad_vector(
- Table<2,double> &) const;
-template <> void MappingQ<3>::set_laplace_on_hex_vector(
- Table<2,double> &lohvs) const;
-template <> void MappingQ<1>::compute_laplace_vector(
- Table<2,double> &) const;
-template <> void MappingQ<1>::add_line_support_points (
- const Triangulation<1>::cell_iterator &,
- std::vector<Point<1> > &) const;
-template<> void MappingQ<3>::add_quad_support_points(
- const Triangulation<3>::cell_iterator &cell,
- std::vector<Point<3> > &a) const;
+
+template<>
+void MappingQ<1>::compute_shapes_virtual (const std::vector<Point<1> > &unit_points,
+ MappingQ1<1>::InternalData &data) const;
+template <>
+void MappingQ<1>::set_laplace_on_quad_vector(Table<2,double> &) const;
+
+template <>
+void MappingQ<3>::set_laplace_on_hex_vector(Table<2,double> &lohvs) const;
+
+template <>
+void MappingQ<1>::compute_laplace_vector(Table<2,double> &) const;
+template <>
+void MappingQ<1>::add_line_support_points (const Triangulation<1>::cell_iterator &,
+ std::vector<Point<1> > &) const;
+template <>
+void MappingQ<1,2>::add_line_support_points (const Triangulation<1,2>::cell_iterator &,
+ std::vector<Point<2> > &) const;
+template <>
+void MappingQ<1,3>::add_line_support_points (const Triangulation<1,3>::cell_iterator &,
+ std::vector<Point<3> > &) const;
+
+template<>
+void MappingQ<3>::add_quad_support_points(const Triangulation<3>::cell_iterator &cell,
+ std::vector<Point<3> > &a) const;
#endif // DOXYGEN
switch (dim)
{
case 1:
- Assert(spacedim == 2, ExcInternalError());
add_line_support_points(cell, a);
break;
case 2:
default:
Assert(false, ExcNotImplemented());
break;
- };
+ }
}
MappingQ<1,2>::add_line_support_points (const Triangulation<1,2>::cell_iterator &cell,
std::vector<Point<2> > &a) const
{
- const unsigned int dim=1, spacedim=2;
+ const unsigned int dim = 1;
+ const unsigned int spacedim = 2;
+ // Ask for the mid point, if that's
+ // the only thing we need.
+ if (degree==2)
+ {
+ const Boundary<dim,spacedim> * const boundary
+ = &(cell->get_triangulation().get_boundary(cell->material_id()));
+ a.push_back(boundary->get_new_point_on_line(cell));
+ }
+ else
+ // otherwise call the more
+ // complicated functions and ask
+ // for inner points from the
+ // boundary description
+ {
+ std::vector<Point<spacedim> > line_points (degree-1);
+
+ const Boundary<dim,spacedim> * const boundary
+ = &(cell->get_triangulation().get_boundary(cell->material_id()));
+
+ boundary->get_intermediate_points_on_line (cell, line_points);
+ // Append all points
+ a.insert (a.end(), line_points.begin(), line_points.end());
+ }
+}
+
+
+
+template <>
+void
+MappingQ<1,3>::add_line_support_points (const Triangulation<1,3>::cell_iterator &cell,
+ std::vector<Point<3> > &a) const
+{
+ const unsigned int dim = 1;
+ const unsigned int spacedim = 3;
// Ask for the mid point, if that's
// the only thing we need.
if (degree==2)