++face_no)
{
const FiniteElement<dim> &fe = cell->get_fe();
-
+
+ // we can presently deal only with
+ // primitive elements for boundary
+ // values. this does not preclude
+ // us using non-primitive elements
+ // in components that we aren't
+ // interested in, however. make
+ // sure that all shape functions
+ // that are non-zero for the
+ // components we are interested in,
+ // are in fact primitive
+ for (unsigned int i=0; i<cell->get_fe().dofs_per_cell; ++i)
+ {
+ const std::vector<bool> &nonzero_component_array
+ = cell->get_fe().get_nonzero_components (i);
+ for (unsigned int c=0; c<n_components; ++c)
+ if ((nonzero_component_array[c] == true)
+ &&
+ (component_mask[c] == true))
+ Assert (cell->get_fe().is_primitive (i),
+ ExcMessage ("This function can only deal with requested boundary "
+ "values that correspond to primitive (scalar) base "
+ "elements"));
+ }
+
typename DH<dim>::face_iterator face = cell->face(face_no);
const unsigned char boundary_component = face->boundary_indicator();
if (function_map.find(boundary_component) != function_map.end())
for (unsigned int i=0; i<fe.dofs_per_face; ++i)
if (component_mask[fe.face_system_to_component_index(i).first]
== true)
- unit_support_points[i] = fe.unit_face_support_point(i);
+ unit_support_points[i] = fe.unit_face_support_point(i);
};
Quadrature<dim-1> aux_quad (unit_support_points);