*/
virtual Point<dim>
get_new_point_on_quad (const typename Triangulation<dim>::quad_iterator &quad) const;
-
+
+ /**
+ * Compute the normals to the
+ * boundary at the vertices of
+ * the given face.
+ *
+ * Refer to the general
+ * documentation of this class
+ * and the documentation of the
+ * base class.
+ */
+ virtual void
+ get_normals_at_vertices (const typename Triangulation<dim>::face_iterator &face,
+ typename Boundary<dim>::FaceVertexNormals &face_vertex_normals) const;
+
private:
/**
* Store the center of the spheres.
*/
virtual Point<dim>
get_new_point_on_quad (const typename Triangulation<dim>::quad_iterator &quad) const;
+
+ /**
+ * Compute the normals to the
+ * boundary at the vertices of
+ * the given face.
+ *
+ * Refer to the general
+ * documentation of this class
+ * and the documentation of the
+ * base class.
+ */
+ virtual void
+ get_normals_at_vertices (const typename Triangulation<dim>::face_iterator &face,
+ typename Boundary<dim>::FaceVertexNormals &face_vertex_normals) const;
private:
/**
};
+
+#if deal_II_dimension == 1
+
+template <>
+void
+HyperShellBoundary<1>::
+get_normals_at_vertices (const Triangulation<1>::face_iterator &,
+ Boundary<1>::FaceVertexNormals &) const
+{
+ Assert (false, Boundary<1>::ExcFunctionNotUseful(1));
+};
+
+#endif
+
+
+template <int dim>
+void
+HyperShellBoundary<dim>::
+get_normals_at_vertices (const typename Triangulation<dim>::face_iterator &face,
+ typename Boundary<dim>::FaceVertexNormals &face_vertex_normals) const
+{
+ // this is equivalent to the case
+ // in the hyperball boundary. note
+ // that we need not normalize nor
+ // direct the normal
+ for (unsigned int vertex=0; vertex<GeometryInfo<dim>::vertices_per_face; ++vertex)
+ face_vertex_normals[vertex] = face->vertex(vertex)-center;
+};
+
+
+
/* ---------------------------------------------------------------------- */
+#if deal_II_dimension == 1
+
+template <>
+void
+HalfHyperShellBoundary<1>::
+get_normals_at_vertices (const Triangulation<1>::face_iterator &,
+ Boundary<1>::FaceVertexNormals &) const
+{
+ Assert (false, Boundary<1>::ExcFunctionNotUseful(1));
+};
+
+#endif
+
+
+
+template <int dim>
+void
+HalfHyperShellBoundary<dim>::
+get_normals_at_vertices (const typename Triangulation<dim>::face_iterator &face,
+ typename Boundary<dim>::FaceVertexNormals &face_vertex_normals) const
+{
+ if (face->center()(0) == center(0))
+ StraightBoundary<dim>::get_normals_at_vertices (face, face_vertex_normals);
+ else
+ HyperShellBoundary<dim>::get_normals_at_vertices (face, face_vertex_normals);
+};
+
+
+
// explicit instantiations
template class HyperBallBoundary<deal_II_dimension>;
template class HalfHyperBallBoundary<deal_II_dimension>;