*/
explicit FECollection (const FiniteElement<dim,spacedim> &fe);
+ /**
+ * Constructor. This constructor creates a FECollection from two
+ * finite elements.
+ */
+ FECollection (const FiniteElement<dim,spacedim> &fe1,
+ const FiniteElement<dim,spacedim> &fe2);
+
+ /**
+ * Constructor. This constructor creates a FECollection from three
+ * finite elements.
+ */
+ FECollection (const FiniteElement<dim,spacedim> &fe1,
+ const FiniteElement<dim,spacedim> &fe2,
+ const FiniteElement<dim,spacedim> &fe3);
+
+ /**
+ * Constructor. This constructor creates a FECollection from four
+ * finite elements.
+ */
+ FECollection (const FiniteElement<dim,spacedim> &fe1,
+ const FiniteElement<dim,spacedim> &fe2,
+ const FiniteElement<dim,spacedim> &fe3,
+ const FiniteElement<dim,spacedim> &fe4);
+
+ /**
+ * Constructor. This constructor creates a FECollection from five
+ * finite elements.
+ */
+ FECollection (const FiniteElement<dim,spacedim> &fe1,
+ const FiniteElement<dim,spacedim> &fe2,
+ const FiniteElement<dim,spacedim> &fe3,
+ const FiniteElement<dim,spacedim> &fe4,
+ const FiniteElement<dim,spacedim> &fe5);
+
+ /**
+ * Constructor. Same as above but for any number of elements. Pointers
+ * to the elements are passed in a vector to this constructor.
+ * As above, the finite element objects pointed to by the argument are
+ * not actually used other than to create copies internally. Consequently,
+ * you can delete these pointers immediately again after calling this
+ * constructor.
+ */
+ FECollection (const std::vector<const FiniteElement<dim,spacedim>*> &fes);
+
/**
* Copy constructor.
*/
+ template <int dim, int spacedim>
+ FECollection<dim,spacedim>::FECollection (const FiniteElement<dim,spacedim> &fe1,
+ const FiniteElement<dim,spacedim> &fe2)
+ {
+ push_back(fe1);
+ push_back(fe2);
+ }
+
+
+
+ template <int dim, int spacedim>
+ FECollection<dim,spacedim>::FECollection (const FiniteElement<dim,spacedim> &fe1,
+ const FiniteElement<dim,spacedim> &fe2,
+ const FiniteElement<dim,spacedim> &fe3)
+ {
+ push_back(fe1);
+ push_back(fe2);
+ push_back(fe3);
+ }
+
+
+
+ template <int dim, int spacedim>
+ FECollection<dim,spacedim>::FECollection (const FiniteElement<dim,spacedim> &fe1,
+ const FiniteElement<dim,spacedim> &fe2,
+ const FiniteElement<dim,spacedim> &fe3,
+ const FiniteElement<dim,spacedim> &fe4)
+ {
+ push_back(fe1);
+ push_back(fe2);
+ push_back(fe3);
+ push_back(fe4);
+ }
+
+
+
+ template <int dim, int spacedim>
+ FECollection<dim,spacedim>::FECollection (const FiniteElement<dim,spacedim> &fe1,
+ const FiniteElement<dim,spacedim> &fe2,
+ const FiniteElement<dim,spacedim> &fe3,
+ const FiniteElement<dim,spacedim> &fe4,
+ const FiniteElement<dim,spacedim> &fe5)
+ {
+ push_back(fe1);
+ push_back(fe2);
+ push_back(fe3);
+ push_back(fe4);
+ push_back(fe5);
+ }
+
+
+
+ template <int dim, int spacedim>
+ FECollection<dim,spacedim>::
+ FECollection (const std::vector<const FiniteElement<dim,spacedim>*> &fes)
+ {
+ Assert (fes.size() > 0,
+ ExcMessage ("Need to pass at least one finite element."));
+
+ for (unsigned int i = 0; i < fes.size(); ++i)
+ push_back(*fes[i]);
+ }
+
+
+
template <int dim, int spacedim>
FECollection<dim,spacedim>::
FECollection (const FECollection<dim,spacedim> &fe_collection)