  In this paper, we discuss how to efficiently evaluate and assemble general
finite element variational forms on H(div) and H(curl). The proposed strategy
relies on a decomposition of the element tensor into a precomputable reference
tensor and a mesh-dependent geometry tensor. Two key points must then be
considered: the appropriate mapping of basis functions from a reference
element, and the orientation of geometrical entities. To address these issues,
we extend here a previously presented representation theorem for affinely
mapped elements to Piola-mapped elements. We also discuss a simple numbering
strategy that removes the need to contend with directions of facet normals and
tangents. The result is an automated, efficient, and easy-to-use implementation
that allows a user to specify finite element variational forms on H(div) and
H(curl) in close to mathematical notation.
