<h3>Specific improvements</h3>
<ol>
+<li> New: There is now a function hp::FECollection::n_blocks() in analogy to
+the existing function hp::FECollection::n_components().
+<br>
+(Wolfgang Bangerth, 2012/09/20)
+
<li> Changed: step-8 now outputs data in VTK format, rather than GMV.
GMV has long been dead.
<br>
*/
unsigned int n_components () const;
+ /**
+ * Return the number of vector
+ * blocks of the finite elements in
+ * this collection. While this class ensures that all
+ * elements stored in it have the same number of vector
+ * components, there is no such guarantees for the number
+ * of blocks each element is made up of (an element may
+ * have fewer blocks than vector components; see
+ * @ref GlossBlock "the glossary" for more information).
+ * For example, you may have an FECollection object that stores
+ * one copy of an FESystem with <code>dim</code> FE_Q objects
+ * and one copy of an FE_RaviartThomas element. Both have
+ * <code>dim</code> vector components but while the former has
+ * <code>dim</code> blocks the latter has only one.
+ * Consequently, this function will throw an assertion
+ * if the number of blocks is not the same for all elements.
+ * If they are the same, this function returns the result
+ * of FiniteElement::n_blocks().
+ */
+ unsigned int n_blocks () const;
+
/**
* Return the maximal number of degrees
* of freedom per vertex over all
+ template <int dim, int spacedim>
+ unsigned int
+ FECollection<dim,spacedim>::n_blocks () const
+ {
+ Assert (finite_elements.size () > 0, ExcNoFiniteElements());
+
+ const unsigned int nb = finite_elements[0]->n_blocks ();
+ for (unsigned int i=1; i<finite_elements.size(); ++i)
+ Assert (finite_elements[i]->n_blocks() == nb,
+ ExcMessage ("Not all finite elements in this collection have "
+ "the same number of components."));
+
+ return nb;
+ }
+
+
+
template <int dim, int spacedim>
std::size_t
FECollection<dim,spacedim>::memory_consumption () const