firedrakeproject/firedrake — pull request #75 by dorugeber (2013-11-15 11:20:59+00:00)
Title: HDiv / HCurl support

This totally changes the handling of TensorProduct vector-valued FE families. There are changes in FIAT, UFL, FFC and Firedrake that need to reach master simultaneously. Currently, branch extrusion-vfs must be used in PyOP2, too.

The problem is as follows: after a tensor product of elements is taken, vector-valued elements do not have enough components (e.g. vector-valued space on triangles x scalar-valued space on intervals = vector-valued space on triangular prisms, but with only two components). Additionally, we sometimes wish to expand a scalar into a vector with only one non-zero component. E.g. scalar f(x, y) * g(z) --> (0, 0, h(x, y, z)).

Previously, the first of these was done "by intelligent guess", and the second wasn't supported at all. The solution is to wrap the OPE in HDiv() or HCurl(), which eventually tells FIAT how to pad out the components.

The corresponding changes to the extrusion tests have been made, some more comprehensive tests have been added. Waiting on various PyOP2/MixedFS things to get fixed before expanding the test suite further.