* @p{base_element(0)} is
* @p{this}.
*/
- virtual const FiniteElement<dim> & base_element (const unsigned int index) const = 0;
+ virtual
+ const FiniteElement<dim> &
+ base_element (const unsigned int index) const = 0;
+ /**
+ * This index denotes how often
+ * the base element @p{index} is
+ * used in a composed element. If
+ * the element is scalar, then
+ * the result is always equal to
+ * one. See the documentation for
+ * the @p{n_base_elements}
+ * function for more details.
+ */
+ virtual
+ unsigned int
+ element_multiplicity (const unsigned int index) const = 0;
+
/**
* Check for non-zero values on a face.
*
* @p{this}, and all other
* indices throw an error.
*/
- virtual const FiniteElement<dim> & base_element (const unsigned int index) const;
+ virtual const FiniteElement<dim> &
+ base_element (const unsigned int index) const;
+
+ /**
+ * Multiplicity of base element
+ * @p{index}. Since this is a
+ * scalar element,
+ * @p{element_multiplicity(0)}
+ * returns one, and all other
+ * indices will throw an error.
+ */
+ virtual unsigned int element_multiplicity (const unsigned int index);
/**
* Check for non-zero values on a face.
* @p{this}, and all other
* indices throw an error.
*/
- virtual const FiniteElement<dim> & base_element (const unsigned int index) const;
+ virtual const FiniteElement<dim> &
+ base_element (const unsigned int index) const;
+
+ /**
+ * Multiplicity of base element
+ * @p{index}. Since this is a
+ * scalar element,
+ * @p{element_multiplicity(0)}
+ * returns one, and all other
+ * indices will throw an error.
+ */
+ virtual unsigned int element_multiplicity (const unsigned int index);
/**
* Check for non-zero values on a face.
* @p{this}, and all other
* indices throw an error.
*/
- virtual const FiniteElement<dim> & base_element (const unsigned int index) const;
+ virtual const FiniteElement<dim> &
+ base_element (const unsigned int index) const;
+
+ /**
+ * Multiplicity of base element
+ * @p{index}. Since this is a
+ * scalar element,
+ * @p{element_multiplicity(0)}
+ * returns one, and all other
+ * indices will throw an error.
+ */
+ virtual unsigned int element_multiplicity (const unsigned int index);
/**
* Check for non-zero values on a face.
* @p{this}, and all other
* indices throw an error.
*/
- virtual const FiniteElement<dim> & base_element (const unsigned int index) const;
+ virtual const FiniteElement<dim> &
+ base_element (const unsigned int index) const;
+
+ /**
+ * Multiplicity of base element
+ * @p{index}. Since this is an
+ * atomic element,
+ * @p{element_multiplicity(0)}
+ * returns one, and all other
+ * indices will throw an error.
+ */
+ virtual unsigned int element_multiplicity (const unsigned int index);
/**
* This function returns
* @p{this}, and all other
* indices throw an error.
*/
- virtual const FiniteElement<dim> & base_element (const unsigned int index) const;
+ virtual const FiniteElement<dim> &
+ base_element (const unsigned int index) const;
+
+ /**
+ * Multiplicity of base element
+ * @p{index}. Since this is a
+ * scalar element,
+ * @p{element_multiplicity(0)}
+ * returns one, and all other
+ * indices will throw an error.
+ */
+ virtual unsigned int element_multiplicity (const unsigned int index);
/**
* Check for non-zero values on a face.
* How often is a composing
* element used.
*/
- unsigned int element_multiplicity (const unsigned int index) const;
+ virtual unsigned int element_multiplicity (const unsigned int index) const;
/**
* Access to a composing
template <> void FESystem<1>::initialize_unit_face_support_points ();
-/* ------------------------- inline functions ------------------------- */
-
-
-template<int dim>
-inline unsigned int
-FESystem<dim>::element_multiplicity (const unsigned int index) const
-{
- Assert (index < base_elements.size(),
- ExcIndexRange(index, 0, base_elements.size()));
- return base_elements[index].second;
-};
-
-
/*---------------------------- fe_system.h ---------------------------*/
#endif
+template <int dim>
+unsigned int
+FE_DGP<dim>::element_multiplicity (const unsigned int index) const
+{
+ Assert (index==0, ExcIndexRange(index, 0, 1));
+ return 1;
+};
+
+
+
template <int dim>
bool
FE_DGP<dim>::has_support_on_face (const unsigned int,
+template <int dim>
+unsigned int
+FE_DGPNonparametric<dim>::element_multiplicity (const unsigned int index) const
+{
+ Assert (index==0, ExcIndexRange(index, 0, 1));
+ return 1;
+};
+
+
+
template <int dim>
bool
FE_DGPNonparametric<dim>::has_support_on_face (const unsigned int,
+template <int dim>
+unsigned int
+FE_Nedelec<dim>::element_multiplicity (const unsigned int index) const
+{
+ Assert (index==0, ExcIndexRange(index, 0, 1));
+ return 1;
+};
+
+
+
template <int dim>
bool
FE_Nedelec<dim>::has_support_on_face (const unsigned int shape_index,
+template <int dim>
+unsigned int
+FE_Q<dim>::element_multiplicity (const unsigned int index) const
+{
+ Assert (index==0, ExcIndexRange(index, 0, 1));
+ return 1;
+};
+
+
+
template <int dim>
bool
FE_Q<dim>::has_support_on_face (const unsigned int shape_index_,
};
+
+template<int dim>
+unsigned int
+FESystem<dim>::element_multiplicity (const unsigned int index) const
+{
+ Assert (index < base_elements.size(),
+ ExcIndexRange(index, 0, base_elements.size()));
+ return base_elements[index].second;
+};
+
+
+
template <int dim>
bool
FESystem<dim>::has_support_on_face (const unsigned int shape_index,