[cig-commits] commit: updated and recompiled forms for MADDs-5a FFC 0.7.1

Mercurial hg at geodynamics.org
Wed Dec 9 20:51:18 PST 2009


changeset:   103:0b9832b2bf6b
user:        Marc Spiegelman <mspieg at ldeo.columbia.edu>
date:        Sun Dec 06 14:03:20 2009 -0500
files:       MADDs-5/MADDs-5a/cpp/MagmaEquations.h MADDs-5/MADDs-5a/cpp/MeltFlux.h MADDs-5/MADDs-5a/cpp/SemiLagrangianRHS.h MADDs-5/MADDs-5a/cpp/forms/MagmaEquations.form MADDs-5/MADDs-5a/cpp/forms/MagmaEquations_P2.ufl MADDs-5/MADDs-5a/cpp/forms/MeltFlux.form MADDs-5/MADDs-5a/cpp/forms/MeltFlux_P2.ufl MADDs-5/MADDs-5a/cpp/forms/Projection.form MADDs-5/MADDs-5a/cpp/forms/Projection_P2.ufl MADDs-5/MADDs-5a/cpp/forms/SemiLagrangianRHS.form
description:
updated and recompiled forms for MADDs-5a FFC 0.7.1


diff -r 925bd37bea8a -r 0b9832b2bf6b MADDs-5/MADDs-5a/cpp/MagmaEquations.h
--- a/MADDs-5/MADDs-5a/cpp/MagmaEquations.h	Sun Dec 06 14:02:56 2009 -0500
+++ b/MADDs-5/MADDs-5a/cpp/MagmaEquations.h	Sun Dec 06 14:03:20 2009 -0500
@@ -1,5 +1,5 @@
 // This code conforms with the UFC specification version 1.0
-// and was automatically generated by FFC version 0.6.2.
+// and was automatically generated by FFC version 0.7.1.
 //
 // Warning: This code was generated with the option '-l dolfin'
 // and contains DOLFIN-specific wrappers that depend on DOLFIN.
@@ -14,2468 +14,2069 @@
     
 /// This class defines the interface for a finite element.
 
-class UFC_MagmaEquationsBilinearForm_finite_element_0_0: public ufc::finite_element
-{
-public:
-
-  /// Constructor
-  UFC_MagmaEquationsBilinearForm_finite_element_0_0();
-
-  /// Destructor
-  virtual ~UFC_MagmaEquationsBilinearForm_finite_element_0_0();
-
-  /// Return a string identifying the finite element
-  virtual const char* signature() const;
-
-  /// Return the cell shape
-  virtual ufc::shape cell_shape() const;
-
-  /// Return the dimension of the finite element function space
-  virtual unsigned int space_dimension() const;
-
-  /// Return the rank of the value space
-  virtual unsigned int value_rank() const;
-
-  /// Return the dimension of the value space for axis i
-  virtual unsigned int value_dimension(unsigned int i) const;
-
-  /// Evaluate basis function i at given point in cell
-  virtual void evaluate_basis(unsigned int i,
-                              double* values,
-                              const double* coordinates,
-                              const ufc::cell& c) const;
-
-  /// Evaluate all basis functions at given point in cell
-  virtual void evaluate_basis_all(double* values,
-                                  const double* coordinates,
-                                  const ufc::cell& c) const;
-
-  /// Evaluate order n derivatives of basis function i at given point in cell
-  virtual void evaluate_basis_derivatives(unsigned int i,
-                                          unsigned int n,
-                                          double* values,
-                                          const double* coordinates,
-                                          const ufc::cell& c) const;
-  
-  /// Evaluate order n derivatives of all basis functions at given point in cell
-  virtual void evaluate_basis_derivatives_all(unsigned int n,
-                                              double* values,
-                                              const double* coordinates,
-                                              const ufc::cell& c) const;
-
-  /// Evaluate linear functional for dof i on the function f
-  virtual double evaluate_dof(unsigned int i,
-                              const ufc::function& f,
-                              const ufc::cell& c) const;
-
-  /// Evaluate linear functionals for all dofs on the function f
-  virtual void evaluate_dofs(double* values,
-                             const ufc::function& f,
-                             const ufc::cell& c) const;
-
-  /// Interpolate vertex values from dof values
-  virtual void interpolate_vertex_values(double* vertex_values,
-                                         const double* dof_values,
-                                         const ufc::cell& c) const;
-
-  /// Return the number of sub elements (for a mixed element)
-  virtual unsigned int num_sub_elements() const;
-
-  /// Create a new finite element for sub element i (for a mixed element)
-  virtual ufc::finite_element* create_sub_element(unsigned int i) const;
-
-};
-
-/// This class defines the interface for a finite element.
-
-class UFC_MagmaEquationsBilinearForm_finite_element_0_1: public ufc::finite_element
-{
-public:
-
-  /// Constructor
-  UFC_MagmaEquationsBilinearForm_finite_element_0_1();
-
-  /// Destructor
-  virtual ~UFC_MagmaEquationsBilinearForm_finite_element_0_1();
-
-  /// Return a string identifying the finite element
-  virtual const char* signature() const;
-
-  /// Return the cell shape
-  virtual ufc::shape cell_shape() const;
-
-  /// Return the dimension of the finite element function space
-  virtual unsigned int space_dimension() const;
-
-  /// Return the rank of the value space
-  virtual unsigned int value_rank() const;
-
-  /// Return the dimension of the value space for axis i
-  virtual unsigned int value_dimension(unsigned int i) const;
-
-  /// Evaluate basis function i at given point in cell
-  virtual void evaluate_basis(unsigned int i,
-                              double* values,
-                              const double* coordinates,
-                              const ufc::cell& c) const;
-
-  /// Evaluate all basis functions at given point in cell
-  virtual void evaluate_basis_all(double* values,
-                                  const double* coordinates,
-                                  const ufc::cell& c) const;
-
-  /// Evaluate order n derivatives of basis function i at given point in cell
-  virtual void evaluate_basis_derivatives(unsigned int i,
-                                          unsigned int n,
-                                          double* values,
-                                          const double* coordinates,
-                                          const ufc::cell& c) const;
-  
-  /// Evaluate order n derivatives of all basis functions at given point in cell
-  virtual void evaluate_basis_derivatives_all(unsigned int n,
-                                              double* values,
-                                              const double* coordinates,
-                                              const ufc::cell& c) const;
-
-  /// Evaluate linear functional for dof i on the function f
-  virtual double evaluate_dof(unsigned int i,
-                              const ufc::function& f,
-                              const ufc::cell& c) const;
-
-  /// Evaluate linear functionals for all dofs on the function f
-  virtual void evaluate_dofs(double* values,
-                             const ufc::function& f,
-                             const ufc::cell& c) const;
-
-  /// Interpolate vertex values from dof values
-  virtual void interpolate_vertex_values(double* vertex_values,
-                                         const double* dof_values,
-                                         const ufc::cell& c) const;
-
-  /// Return the number of sub elements (for a mixed element)
-  virtual unsigned int num_sub_elements() const;
-
-  /// Create a new finite element for sub element i (for a mixed element)
-  virtual ufc::finite_element* create_sub_element(unsigned int i) const;
-
-};
-
-/// This class defines the interface for a finite element.
-
-class UFC_MagmaEquationsBilinearForm_finite_element_0: public ufc::finite_element
-{
-public:
-
-  /// Constructor
-  UFC_MagmaEquationsBilinearForm_finite_element_0();
-
-  /// Destructor
-  virtual ~UFC_MagmaEquationsBilinearForm_finite_element_0();
-
-  /// Return a string identifying the finite element
-  virtual const char* signature() const;
-
-  /// Return the cell shape
-  virtual ufc::shape cell_shape() const;
-
-  /// Return the dimension of the finite element function space
-  virtual unsigned int space_dimension() const;
-
-  /// Return the rank of the value space
-  virtual unsigned int value_rank() const;
-
-  /// Return the dimension of the value space for axis i
-  virtual unsigned int value_dimension(unsigned int i) const;
-
-  /// Evaluate basis function i at given point in cell
-  virtual void evaluate_basis(unsigned int i,
-                              double* values,
-                              const double* coordinates,
-                              const ufc::cell& c) const;
-
-  /// Evaluate all basis functions at given point in cell
-  virtual void evaluate_basis_all(double* values,
-                                  const double* coordinates,
-                                  const ufc::cell& c) const;
-
-  /// Evaluate order n derivatives of basis function i at given point in cell
-  virtual void evaluate_basis_derivatives(unsigned int i,
-                                          unsigned int n,
-                                          double* values,
-                                          const double* coordinates,
-                                          const ufc::cell& c) const;
-  
-  /// Evaluate order n derivatives of all basis functions at given point in cell
-  virtual void evaluate_basis_derivatives_all(unsigned int n,
-                                              double* values,
-                                              const double* coordinates,
-                                              const ufc::cell& c) const;
-
-  /// Evaluate linear functional for dof i on the function f
-  virtual double evaluate_dof(unsigned int i,
-                              const ufc::function& f,
-                              const ufc::cell& c) const;
-
-  /// Evaluate linear functionals for all dofs on the function f
-  virtual void evaluate_dofs(double* values,
-                             const ufc::function& f,
-                             const ufc::cell& c) const;
-
-  /// Interpolate vertex values from dof values
-  virtual void interpolate_vertex_values(double* vertex_values,
-                                         const double* dof_values,
-                                         const ufc::cell& c) const;
-
-  /// Return the number of sub elements (for a mixed element)
-  virtual unsigned int num_sub_elements() const;
-
-  /// Create a new finite element for sub element i (for a mixed element)
-  virtual ufc::finite_element* create_sub_element(unsigned int i) const;
-
-};
-
-/// This class defines the interface for a finite element.
-
-class UFC_MagmaEquationsBilinearForm_finite_element_1_0: public ufc::finite_element
-{
-public:
-
-  /// Constructor
-  UFC_MagmaEquationsBilinearForm_finite_element_1_0();
-
-  /// Destructor
-  virtual ~UFC_MagmaEquationsBilinearForm_finite_element_1_0();
-
-  /// Return a string identifying the finite element
-  virtual const char* signature() const;
-
-  /// Return the cell shape
-  virtual ufc::shape cell_shape() const;
-
-  /// Return the dimension of the finite element function space
-  virtual unsigned int space_dimension() const;
-
-  /// Return the rank of the value space
-  virtual unsigned int value_rank() const;
-
-  /// Return the dimension of the value space for axis i
-  virtual unsigned int value_dimension(unsigned int i) const;
-
-  /// Evaluate basis function i at given point in cell
-  virtual void evaluate_basis(unsigned int i,
-                              double* values,
-                              const double* coordinates,
-                              const ufc::cell& c) const;
-
-  /// Evaluate all basis functions at given point in cell
-  virtual void evaluate_basis_all(double* values,
-                                  const double* coordinates,
-                                  const ufc::cell& c) const;
-
-  /// Evaluate order n derivatives of basis function i at given point in cell
-  virtual void evaluate_basis_derivatives(unsigned int i,
-                                          unsigned int n,
-                                          double* values,
-                                          const double* coordinates,
-                                          const ufc::cell& c) const;
-  
-  /// Evaluate order n derivatives of all basis functions at given point in cell
-  virtual void evaluate_basis_derivatives_all(unsigned int n,
-                                              double* values,
-                                              const double* coordinates,
-                                              const ufc::cell& c) const;
-
-  /// Evaluate linear functional for dof i on the function f
-  virtual double evaluate_dof(unsigned int i,
-                              const ufc::function& f,
-                              const ufc::cell& c) const;
-
-  /// Evaluate linear functionals for all dofs on the function f
-  virtual void evaluate_dofs(double* values,
-                             const ufc::function& f,
-                             const ufc::cell& c) const;
-
-  /// Interpolate vertex values from dof values
-  virtual void interpolate_vertex_values(double* vertex_values,
-                                         const double* dof_values,
-                                         const ufc::cell& c) const;
-
-  /// Return the number of sub elements (for a mixed element)
-  virtual unsigned int num_sub_elements() const;
-
-  /// Create a new finite element for sub element i (for a mixed element)
-  virtual ufc::finite_element* create_sub_element(unsigned int i) const;
-
-};
-
-/// This class defines the interface for a finite element.
-
-class UFC_MagmaEquationsBilinearForm_finite_element_1_1: public ufc::finite_element
-{
-public:
-
-  /// Constructor
-  UFC_MagmaEquationsBilinearForm_finite_element_1_1();
-
-  /// Destructor
-  virtual ~UFC_MagmaEquationsBilinearForm_finite_element_1_1();
-
-  /// Return a string identifying the finite element
-  virtual const char* signature() const;
-
-  /// Return the cell shape
-  virtual ufc::shape cell_shape() const;
-
-  /// Return the dimension of the finite element function space
-  virtual unsigned int space_dimension() const;
-
-  /// Return the rank of the value space
-  virtual unsigned int value_rank() const;
-
-  /// Return the dimension of the value space for axis i
-  virtual unsigned int value_dimension(unsigned int i) const;
-
-  /// Evaluate basis function i at given point in cell
-  virtual void evaluate_basis(unsigned int i,
-                              double* values,
-                              const double* coordinates,
-                              const ufc::cell& c) const;
-
-  /// Evaluate all basis functions at given point in cell
-  virtual void evaluate_basis_all(double* values,
-                                  const double* coordinates,
-                                  const ufc::cell& c) const;
-
-  /// Evaluate order n derivatives of basis function i at given point in cell
-  virtual void evaluate_basis_derivatives(unsigned int i,
-                                          unsigned int n,
-                                          double* values,
-                                          const double* coordinates,
-                                          const ufc::cell& c) const;
-  
-  /// Evaluate order n derivatives of all basis functions at given point in cell
-  virtual void evaluate_basis_derivatives_all(unsigned int n,
-                                              double* values,
-                                              const double* coordinates,
-                                              const ufc::cell& c) const;
-
-  /// Evaluate linear functional for dof i on the function f
-  virtual double evaluate_dof(unsigned int i,
-                              const ufc::function& f,
-                              const ufc::cell& c) const;
-
-  /// Evaluate linear functionals for all dofs on the function f
-  virtual void evaluate_dofs(double* values,
-                             const ufc::function& f,
-                             const ufc::cell& c) const;
-
-  /// Interpolate vertex values from dof values
-  virtual void interpolate_vertex_values(double* vertex_values,
-                                         const double* dof_values,
-                                         const ufc::cell& c) const;
-
-  /// Return the number of sub elements (for a mixed element)
-  virtual unsigned int num_sub_elements() const;
-
-  /// Create a new finite element for sub element i (for a mixed element)
-  virtual ufc::finite_element* create_sub_element(unsigned int i) const;
-
-};
-
-/// This class defines the interface for a finite element.
-
-class UFC_MagmaEquationsBilinearForm_finite_element_1: public ufc::finite_element
-{
-public:
-
-  /// Constructor
-  UFC_MagmaEquationsBilinearForm_finite_element_1();
-
-  /// Destructor
-  virtual ~UFC_MagmaEquationsBilinearForm_finite_element_1();
-
-  /// Return a string identifying the finite element
-  virtual const char* signature() const;
-
-  /// Return the cell shape
-  virtual ufc::shape cell_shape() const;
-
-  /// Return the dimension of the finite element function space
-  virtual unsigned int space_dimension() const;
-
-  /// Return the rank of the value space
-  virtual unsigned int value_rank() const;
-
-  /// Return the dimension of the value space for axis i
-  virtual unsigned int value_dimension(unsigned int i) const;
-
-  /// Evaluate basis function i at given point in cell
-  virtual void evaluate_basis(unsigned int i,
-                              double* values,
-                              const double* coordinates,
-                              const ufc::cell& c) const;
-
-  /// Evaluate all basis functions at given point in cell
-  virtual void evaluate_basis_all(double* values,
-                                  const double* coordinates,
-                                  const ufc::cell& c) const;
-
-  /// Evaluate order n derivatives of basis function i at given point in cell
-  virtual void evaluate_basis_derivatives(unsigned int i,
-                                          unsigned int n,
-                                          double* values,
-                                          const double* coordinates,
-                                          const ufc::cell& c) const;
-  
-  /// Evaluate order n derivatives of all basis functions at given point in cell
-  virtual void evaluate_basis_derivatives_all(unsigned int n,
-                                              double* values,
-                                              const double* coordinates,
-                                              const ufc::cell& c) const;
-
-  /// Evaluate linear functional for dof i on the function f
-  virtual double evaluate_dof(unsigned int i,
-                              const ufc::function& f,
-                              const ufc::cell& c) const;
-
-  /// Evaluate linear functionals for all dofs on the function f
-  virtual void evaluate_dofs(double* values,
-                             const ufc::function& f,
-                             const ufc::cell& c) const;
-
-  /// Interpolate vertex values from dof values
-  virtual void interpolate_vertex_values(double* vertex_values,
-                                         const double* dof_values,
-                                         const ufc::cell& c) const;
-
-  /// Return the number of sub elements (for a mixed element)
-  virtual unsigned int num_sub_elements() const;
-
-  /// Create a new finite element for sub element i (for a mixed element)
-  virtual ufc::finite_element* create_sub_element(unsigned int i) const;
-
-};
-
-/// This class defines the interface for a finite element.
-
-class UFC_MagmaEquationsBilinearForm_finite_element_2_0: public ufc::finite_element
-{
-public:
-
-  /// Constructor
-  UFC_MagmaEquationsBilinearForm_finite_element_2_0();
-
-  /// Destructor
-  virtual ~UFC_MagmaEquationsBilinearForm_finite_element_2_0();
-
-  /// Return a string identifying the finite element
-  virtual const char* signature() const;
-
-  /// Return the cell shape
-  virtual ufc::shape cell_shape() const;
-
-  /// Return the dimension of the finite element function space
-  virtual unsigned int space_dimension() const;
-
-  /// Return the rank of the value space
-  virtual unsigned int value_rank() const;
-
-  /// Return the dimension of the value space for axis i
-  virtual unsigned int value_dimension(unsigned int i) const;
-
-  /// Evaluate basis function i at given point in cell
-  virtual void evaluate_basis(unsigned int i,
-                              double* values,
-                              const double* coordinates,
-                              const ufc::cell& c) const;
-
-  /// Evaluate all basis functions at given point in cell
-  virtual void evaluate_basis_all(double* values,
-                                  const double* coordinates,
-                                  const ufc::cell& c) const;
-
-  /// Evaluate order n derivatives of basis function i at given point in cell
-  virtual void evaluate_basis_derivatives(unsigned int i,
-                                          unsigned int n,
-                                          double* values,
-                                          const double* coordinates,
-                                          const ufc::cell& c) const;
-  
-  /// Evaluate order n derivatives of all basis functions at given point in cell
-  virtual void evaluate_basis_derivatives_all(unsigned int n,
-                                              double* values,
-                                              const double* coordinates,
-                                              const ufc::cell& c) const;
-
-  /// Evaluate linear functional for dof i on the function f
-  virtual double evaluate_dof(unsigned int i,
-                              const ufc::function& f,
-                              const ufc::cell& c) const;
-
-  /// Evaluate linear functionals for all dofs on the function f
-  virtual void evaluate_dofs(double* values,
-                             const ufc::function& f,
-                             const ufc::cell& c) const;
-
-  /// Interpolate vertex values from dof values
-  virtual void interpolate_vertex_values(double* vertex_values,
-                                         const double* dof_values,
-                                         const ufc::cell& c) const;
-
-  /// Return the number of sub elements (for a mixed element)
-  virtual unsigned int num_sub_elements() const;
-
-  /// Create a new finite element for sub element i (for a mixed element)
-  virtual ufc::finite_element* create_sub_element(unsigned int i) const;
-
-};
-
-/// This class defines the interface for a finite element.
-
-class UFC_MagmaEquationsBilinearForm_finite_element_2_1: public ufc::finite_element
-{
-public:
-
-  /// Constructor
-  UFC_MagmaEquationsBilinearForm_finite_element_2_1();
-
-  /// Destructor
-  virtual ~UFC_MagmaEquationsBilinearForm_finite_element_2_1();
-
-  /// Return a string identifying the finite element
-  virtual const char* signature() const;
-
-  /// Return the cell shape
-  virtual ufc::shape cell_shape() const;
-
-  /// Return the dimension of the finite element function space
-  virtual unsigned int space_dimension() const;
-
-  /// Return the rank of the value space
-  virtual unsigned int value_rank() const;
-
-  /// Return the dimension of the value space for axis i
-  virtual unsigned int value_dimension(unsigned int i) const;
-
-  /// Evaluate basis function i at given point in cell
-  virtual void evaluate_basis(unsigned int i,
-                              double* values,
-                              const double* coordinates,
-                              const ufc::cell& c) const;
-
-  /// Evaluate all basis functions at given point in cell
-  virtual void evaluate_basis_all(double* values,
-                                  const double* coordinates,
-                                  const ufc::cell& c) const;
-
-  /// Evaluate order n derivatives of basis function i at given point in cell
-  virtual void evaluate_basis_derivatives(unsigned int i,
-                                          unsigned int n,
-                                          double* values,
-                                          const double* coordinates,
-                                          const ufc::cell& c) const;
-  
-  /// Evaluate order n derivatives of all basis functions at given point in cell
-  virtual void evaluate_basis_derivatives_all(unsigned int n,
-                                              double* values,
-                                              const double* coordinates,
-                                              const ufc::cell& c) const;
-
-  /// Evaluate linear functional for dof i on the function f
-  virtual double evaluate_dof(unsigned int i,
-                              const ufc::function& f,
-                              const ufc::cell& c) const;
-
-  /// Evaluate linear functionals for all dofs on the function f
-  virtual void evaluate_dofs(double* values,
-                             const ufc::function& f,
-                             const ufc::cell& c) const;
-
-  /// Interpolate vertex values from dof values
-  virtual void interpolate_vertex_values(double* vertex_values,
-                                         const double* dof_values,
-                                         const ufc::cell& c) const;
-
-  /// Return the number of sub elements (for a mixed element)
-  virtual unsigned int num_sub_elements() const;
-
-  /// Create a new finite element for sub element i (for a mixed element)
-  virtual ufc::finite_element* create_sub_element(unsigned int i) const;
-
-};
-
-/// This class defines the interface for a finite element.
-
-class UFC_MagmaEquationsBilinearForm_finite_element_2: public ufc::finite_element
-{
-public:
-
-  /// Constructor
-  UFC_MagmaEquationsBilinearForm_finite_element_2();
-
-  /// Destructor
-  virtual ~UFC_MagmaEquationsBilinearForm_finite_element_2();
-
-  /// Return a string identifying the finite element
-  virtual const char* signature() const;
-
-  /// Return the cell shape
-  virtual ufc::shape cell_shape() const;
-
-  /// Return the dimension of the finite element function space
-  virtual unsigned int space_dimension() const;
-
-  /// Return the rank of the value space
-  virtual unsigned int value_rank() const;
-
-  /// Return the dimension of the value space for axis i
-  virtual unsigned int value_dimension(unsigned int i) const;
-
-  /// Evaluate basis function i at given point in cell
-  virtual void evaluate_basis(unsigned int i,
-                              double* values,
-                              const double* coordinates,
-                              const ufc::cell& c) const;
-
-  /// Evaluate all basis functions at given point in cell
-  virtual void evaluate_basis_all(double* values,
-                                  const double* coordinates,
-                                  const ufc::cell& c) const;
-
-  /// Evaluate order n derivatives of basis function i at given point in cell
-  virtual void evaluate_basis_derivatives(unsigned int i,
-                                          unsigned int n,
-                                          double* values,
-                                          const double* coordinates,
-                                          const ufc::cell& c) const;
-  
-  /// Evaluate order n derivatives of all basis functions at given point in cell
-  virtual void evaluate_basis_derivatives_all(unsigned int n,
-                                              double* values,
-                                              const double* coordinates,
-                                              const ufc::cell& c) const;
-
-  /// Evaluate linear functional for dof i on the function f
-  virtual double evaluate_dof(unsigned int i,
-                              const ufc::function& f,
-                              const ufc::cell& c) const;
-
-  /// Evaluate linear functionals for all dofs on the function f
-  virtual void evaluate_dofs(double* values,
-                             const ufc::function& f,
-                             const ufc::cell& c) const;
-
-  /// Interpolate vertex values from dof values
-  virtual void interpolate_vertex_values(double* vertex_values,
-                                         const double* dof_values,
-                                         const ufc::cell& c) const;
-
-  /// Return the number of sub elements (for a mixed element)
-  virtual unsigned int num_sub_elements() const;
-
-  /// Create a new finite element for sub element i (for a mixed element)
-  virtual ufc::finite_element* create_sub_element(unsigned int i) const;
-
-};
-
-/// This class defines the interface for a finite element.
-
-class UFC_MagmaEquationsBilinearForm_finite_element_3: public ufc::finite_element
-{
-public:
-
-  /// Constructor
-  UFC_MagmaEquationsBilinearForm_finite_element_3();
-
-  /// Destructor
-  virtual ~UFC_MagmaEquationsBilinearForm_finite_element_3();
-
-  /// Return a string identifying the finite element
-  virtual const char* signature() const;
-
-  /// Return the cell shape
-  virtual ufc::shape cell_shape() const;
-
-  /// Return the dimension of the finite element function space
-  virtual unsigned int space_dimension() const;
-
-  /// Return the rank of the value space
-  virtual unsigned int value_rank() const;
-
-  /// Return the dimension of the value space for axis i
-  virtual unsigned int value_dimension(unsigned int i) const;
-
-  /// Evaluate basis function i at given point in cell
-  virtual void evaluate_basis(unsigned int i,
-                              double* values,
-                              const double* coordinates,
-                              const ufc::cell& c) const;
-
-  /// Evaluate all basis functions at given point in cell
-  virtual void evaluate_basis_all(double* values,
-                                  const double* coordinates,
-                                  const ufc::cell& c) const;
-
-  /// Evaluate order n derivatives of basis function i at given point in cell
-  virtual void evaluate_basis_derivatives(unsigned int i,
-                                          unsigned int n,
-                                          double* values,
-                                          const double* coordinates,
-                                          const ufc::cell& c) const;
-  
-  /// Evaluate order n derivatives of all basis functions at given point in cell
-  virtual void evaluate_basis_derivatives_all(unsigned int n,
-                                              double* values,
-                                              const double* coordinates,
-                                              const ufc::cell& c) const;
-
-  /// Evaluate linear functional for dof i on the function f
-  virtual double evaluate_dof(unsigned int i,
-                              const ufc::function& f,
-                              const ufc::cell& c) const;
-
-  /// Evaluate linear functionals for all dofs on the function f
-  virtual void evaluate_dofs(double* values,
-                             const ufc::function& f,
-                             const ufc::cell& c) const;
-
-  /// Interpolate vertex values from dof values
-  virtual void interpolate_vertex_values(double* vertex_values,
-                                         const double* dof_values,
-                                         const ufc::cell& c) const;
-
-  /// Return the number of sub elements (for a mixed element)
-  virtual unsigned int num_sub_elements() const;
-
-  /// Create a new finite element for sub element i (for a mixed element)
-  virtual ufc::finite_element* create_sub_element(unsigned int i) const;
-
-};
-
-/// This class defines the interface for a finite element.
-
-class UFC_MagmaEquationsBilinearForm_finite_element_4: public ufc::finite_element
-{
-public:
-
-  /// Constructor
-  UFC_MagmaEquationsBilinearForm_finite_element_4();
-
-  /// Destructor
-  virtual ~UFC_MagmaEquationsBilinearForm_finite_element_4();
-
-  /// Return a string identifying the finite element
-  virtual const char* signature() const;
-
-  /// Return the cell shape
-  virtual ufc::shape cell_shape() const;
-
-  /// Return the dimension of the finite element function space
-  virtual unsigned int space_dimension() const;
-
-  /// Return the rank of the value space
-  virtual unsigned int value_rank() const;
-
-  /// Return the dimension of the value space for axis i
-  virtual unsigned int value_dimension(unsigned int i) const;
-
-  /// Evaluate basis function i at given point in cell
-  virtual void evaluate_basis(unsigned int i,
-                              double* values,
-                              const double* coordinates,
-                              const ufc::cell& c) const;
-
-  /// Evaluate all basis functions at given point in cell
-  virtual void evaluate_basis_all(double* values,
-                                  const double* coordinates,
-                                  const ufc::cell& c) const;
-
-  /// Evaluate order n derivatives of basis function i at given point in cell
-  virtual void evaluate_basis_derivatives(unsigned int i,
-                                          unsigned int n,
-                                          double* values,
-                                          const double* coordinates,
-                                          const ufc::cell& c) const;
-  
-  /// Evaluate order n derivatives of all basis functions at given point in cell
-  virtual void evaluate_basis_derivatives_all(unsigned int n,
-                                              double* values,
-                                              const double* coordinates,
-                                              const ufc::cell& c) const;
-
-  /// Evaluate linear functional for dof i on the function f
-  virtual double evaluate_dof(unsigned int i,
-                              const ufc::function& f,
-                              const ufc::cell& c) const;
-
-  /// Evaluate linear functionals for all dofs on the function f
-  virtual void evaluate_dofs(double* values,
-                             const ufc::function& f,
-                             const ufc::cell& c) const;
-
-  /// Interpolate vertex values from dof values
-  virtual void interpolate_vertex_values(double* vertex_values,
-                                         const double* dof_values,
-                                         const ufc::cell& c) const;
-
-  /// Return the number of sub elements (for a mixed element)
-  virtual unsigned int num_sub_elements() const;
-
-  /// Create a new finite element for sub element i (for a mixed element)
-  virtual ufc::finite_element* create_sub_element(unsigned int i) const;
-
-};
-
-/// This class defines the interface for a finite element.
-
-class UFC_MagmaEquationsBilinearForm_finite_element_5_0: public ufc::finite_element
-{
-public:
-
-  /// Constructor
-  UFC_MagmaEquationsBilinearForm_finite_element_5_0();
-
-  /// Destructor
-  virtual ~UFC_MagmaEquationsBilinearForm_finite_element_5_0();
-
-  /// Return a string identifying the finite element
-  virtual const char* signature() const;
-
-  /// Return the cell shape
-  virtual ufc::shape cell_shape() const;
-
-  /// Return the dimension of the finite element function space
-  virtual unsigned int space_dimension() const;
-
-  /// Return the rank of the value space
-  virtual unsigned int value_rank() const;
-
-  /// Return the dimension of the value space for axis i
-  virtual unsigned int value_dimension(unsigned int i) const;
-
-  /// Evaluate basis function i at given point in cell
-  virtual void evaluate_basis(unsigned int i,
-                              double* values,
-                              const double* coordinates,
-                              const ufc::cell& c) const;
-
-  /// Evaluate all basis functions at given point in cell
-  virtual void evaluate_basis_all(double* values,
-                                  const double* coordinates,
-                                  const ufc::cell& c) const;
-
-  /// Evaluate order n derivatives of basis function i at given point in cell
-  virtual void evaluate_basis_derivatives(unsigned int i,
-                                          unsigned int n,
-                                          double* values,
-                                          const double* coordinates,
-                                          const ufc::cell& c) const;
-  
-  /// Evaluate order n derivatives of all basis functions at given point in cell
-  virtual void evaluate_basis_derivatives_all(unsigned int n,
-                                              double* values,
-                                              const double* coordinates,
-                                              const ufc::cell& c) const;
-
-  /// Evaluate linear functional for dof i on the function f
-  virtual double evaluate_dof(unsigned int i,
-                              const ufc::function& f,
-                              const ufc::cell& c) const;
-
-  /// Evaluate linear functionals for all dofs on the function f
-  virtual void evaluate_dofs(double* values,
-                             const ufc::function& f,
-                             const ufc::cell& c) const;
-
-  /// Interpolate vertex values from dof values
-  virtual void interpolate_vertex_values(double* vertex_values,
-                                         const double* dof_values,
-                                         const ufc::cell& c) const;
-
-  /// Return the number of sub elements (for a mixed element)
-  virtual unsigned int num_sub_elements() const;
-
-  /// Create a new finite element for sub element i (for a mixed element)
-  virtual ufc::finite_element* create_sub_element(unsigned int i) const;
-
-};
-
-/// This class defines the interface for a finite element.
-
-class UFC_MagmaEquationsBilinearForm_finite_element_5_1: public ufc::finite_element
-{
-public:
-
-  /// Constructor
-  UFC_MagmaEquationsBilinearForm_finite_element_5_1();
-
-  /// Destructor
-  virtual ~UFC_MagmaEquationsBilinearForm_finite_element_5_1();
-
-  /// Return a string identifying the finite element
-  virtual const char* signature() const;
-
-  /// Return the cell shape
-  virtual ufc::shape cell_shape() const;
-
-  /// Return the dimension of the finite element function space
-  virtual unsigned int space_dimension() const;
-
-  /// Return the rank of the value space
-  virtual unsigned int value_rank() const;
-
-  /// Return the dimension of the value space for axis i
-  virtual unsigned int value_dimension(unsigned int i) const;
-
-  /// Evaluate basis function i at given point in cell
-  virtual void evaluate_basis(unsigned int i,
-                              double* values,
-                              const double* coordinates,
-                              const ufc::cell& c) const;
-
-  /// Evaluate all basis functions at given point in cell
-  virtual void evaluate_basis_all(double* values,
-                                  const double* coordinates,
-                                  const ufc::cell& c) const;
-
-  /// Evaluate order n derivatives of basis function i at given point in cell
-  virtual void evaluate_basis_derivatives(unsigned int i,
-                                          unsigned int n,
-                                          double* values,
-                                          const double* coordinates,
-                                          const ufc::cell& c) const;
-  
-  /// Evaluate order n derivatives of all basis functions at given point in cell
-  virtual void evaluate_basis_derivatives_all(unsigned int n,
-                                              double* values,
-                                              const double* coordinates,
-                                              const ufc::cell& c) const;
-
-  /// Evaluate linear functional for dof i on the function f
-  virtual double evaluate_dof(unsigned int i,
-                              const ufc::function& f,
-                              const ufc::cell& c) const;
-
-  /// Evaluate linear functionals for all dofs on the function f
-  virtual void evaluate_dofs(double* values,
-                             const ufc::function& f,
-                             const ufc::cell& c) const;
-
-  /// Interpolate vertex values from dof values
-  virtual void interpolate_vertex_values(double* vertex_values,
-                                         const double* dof_values,
-                                         const ufc::cell& c) const;
-
-  /// Return the number of sub elements (for a mixed element)
-  virtual unsigned int num_sub_elements() const;
-
-  /// Create a new finite element for sub element i (for a mixed element)
-  virtual ufc::finite_element* create_sub_element(unsigned int i) const;
-
-};
-
-/// This class defines the interface for a finite element.
-
-class UFC_MagmaEquationsBilinearForm_finite_element_5: public ufc::finite_element
-{
-public:
-
-  /// Constructor
-  UFC_MagmaEquationsBilinearForm_finite_element_5();
-
-  /// Destructor
-  virtual ~UFC_MagmaEquationsBilinearForm_finite_element_5();
-
-  /// Return a string identifying the finite element
-  virtual const char* signature() const;
-
-  /// Return the cell shape
-  virtual ufc::shape cell_shape() const;
-
-  /// Return the dimension of the finite element function space
-  virtual unsigned int space_dimension() const;
-
-  /// Return the rank of the value space
-  virtual unsigned int value_rank() const;
-
-  /// Return the dimension of the value space for axis i
-  virtual unsigned int value_dimension(unsigned int i) const;
-
-  /// Evaluate basis function i at given point in cell
-  virtual void evaluate_basis(unsigned int i,
-                              double* values,
-                              const double* coordinates,
-                              const ufc::cell& c) const;
-
-  /// Evaluate all basis functions at given point in cell
-  virtual void evaluate_basis_all(double* values,
-                                  const double* coordinates,
-                                  const ufc::cell& c) const;
-
-  /// Evaluate order n derivatives of basis function i at given point in cell
-  virtual void evaluate_basis_derivatives(unsigned int i,
-                                          unsigned int n,
-                                          double* values,
-                                          const double* coordinates,
-                                          const ufc::cell& c) const;
-  
-  /// Evaluate order n derivatives of all basis functions at given point in cell
-  virtual void evaluate_basis_derivatives_all(unsigned int n,
-                                              double* values,
-                                              const double* coordinates,
-                                              const ufc::cell& c) const;
-
-  /// Evaluate linear functional for dof i on the function f
-  virtual double evaluate_dof(unsigned int i,
-                              const ufc::function& f,
-                              const ufc::cell& c) const;
-
-  /// Evaluate linear functionals for all dofs on the function f
-  virtual void evaluate_dofs(double* values,
-                             const ufc::function& f,
-                             const ufc::cell& c) const;
-
-  /// Interpolate vertex values from dof values
-  virtual void interpolate_vertex_values(double* vertex_values,
-                                         const double* dof_values,
-                                         const ufc::cell& c) const;
-
-  /// Return the number of sub elements (for a mixed element)
-  virtual unsigned int num_sub_elements() const;
-
-  /// Create a new finite element for sub element i (for a mixed element)
-  virtual ufc::finite_element* create_sub_element(unsigned int i) const;
-
-};
-
-/// This class defines the interface for a finite element.
-
-class UFC_MagmaEquationsBilinearForm_finite_element_6: public ufc::finite_element
-{
-public:
-
-  /// Constructor
-  UFC_MagmaEquationsBilinearForm_finite_element_6();
-
-  /// Destructor
-  virtual ~UFC_MagmaEquationsBilinearForm_finite_element_6();
-
-  /// Return a string identifying the finite element
-  virtual const char* signature() const;
-
-  /// Return the cell shape
-  virtual ufc::shape cell_shape() const;
-
-  /// Return the dimension of the finite element function space
-  virtual unsigned int space_dimension() const;
-
-  /// Return the rank of the value space
-  virtual unsigned int value_rank() const;
-
-  /// Return the dimension of the value space for axis i
-  virtual unsigned int value_dimension(unsigned int i) const;
-
-  /// Evaluate basis function i at given point in cell
-  virtual void evaluate_basis(unsigned int i,
-                              double* values,
-                              const double* coordinates,
-                              const ufc::cell& c) const;
-
-  /// Evaluate all basis functions at given point in cell
-  virtual void evaluate_basis_all(double* values,
-                                  const double* coordinates,
-                                  const ufc::cell& c) const;
-
-  /// Evaluate order n derivatives of basis function i at given point in cell
-  virtual void evaluate_basis_derivatives(unsigned int i,
-                                          unsigned int n,
-                                          double* values,
-                                          const double* coordinates,
-                                          const ufc::cell& c) const;
-  
-  /// Evaluate order n derivatives of all basis functions at given point in cell
-  virtual void evaluate_basis_derivatives_all(unsigned int n,
-                                              double* values,
-                                              const double* coordinates,
-                                              const ufc::cell& c) const;
-
-  /// Evaluate linear functional for dof i on the function f
-  virtual double evaluate_dof(unsigned int i,
-                              const ufc::function& f,
-                              const ufc::cell& c) const;
-
-  /// Evaluate linear functionals for all dofs on the function f
-  virtual void evaluate_dofs(double* values,
-                             const ufc::function& f,
-                             const ufc::cell& c) const;
-
-  /// Interpolate vertex values from dof values
-  virtual void interpolate_vertex_values(double* vertex_values,
-                                         const double* dof_values,
-                                         const ufc::cell& c) const;
-
-  /// Return the number of sub elements (for a mixed element)
-  virtual unsigned int num_sub_elements() const;
-
-  /// Create a new finite element for sub element i (for a mixed element)
-  virtual ufc::finite_element* create_sub_element(unsigned int i) const;
-
-};
-
-/// This class defines the interface for a finite element.
-
-class UFC_MagmaEquationsBilinearForm_finite_element_7: public ufc::finite_element
-{
-public:
-
-  /// Constructor
-  UFC_MagmaEquationsBilinearForm_finite_element_7();
-
-  /// Destructor
-  virtual ~UFC_MagmaEquationsBilinearForm_finite_element_7();
-
-  /// Return a string identifying the finite element
-  virtual const char* signature() const;
-
-  /// Return the cell shape
-  virtual ufc::shape cell_shape() const;
-
-  /// Return the dimension of the finite element function space
-  virtual unsigned int space_dimension() const;
-
-  /// Return the rank of the value space
-  virtual unsigned int value_rank() const;
-
-  /// Return the dimension of the value space for axis i
-  virtual unsigned int value_dimension(unsigned int i) const;
-
-  /// Evaluate basis function i at given point in cell
-  virtual void evaluate_basis(unsigned int i,
-                              double* values,
-                              const double* coordinates,
-                              const ufc::cell& c) const;
-
-  /// Evaluate all basis functions at given point in cell
-  virtual void evaluate_basis_all(double* values,
-                                  const double* coordinates,
-                                  const ufc::cell& c) const;
-
-  /// Evaluate order n derivatives of basis function i at given point in cell
-  virtual void evaluate_basis_derivatives(unsigned int i,
-                                          unsigned int n,
-                                          double* values,
-                                          const double* coordinates,
-                                          const ufc::cell& c) const;
-  
-  /// Evaluate order n derivatives of all basis functions at given point in cell
-  virtual void evaluate_basis_derivatives_all(unsigned int n,
-                                              double* values,
-                                              const double* coordinates,
-                                              const ufc::cell& c) const;
-
-  /// Evaluate linear functional for dof i on the function f
-  virtual double evaluate_dof(unsigned int i,
-                              const ufc::function& f,
-                              const ufc::cell& c) const;
-
-  /// Evaluate linear functionals for all dofs on the function f
-  virtual void evaluate_dofs(double* values,
-                             const ufc::function& f,
-                             const ufc::cell& c) const;
-
-  /// Interpolate vertex values from dof values
-  virtual void interpolate_vertex_values(double* vertex_values,
-                                         const double* dof_values,
-                                         const ufc::cell& c) const;
-
-  /// Return the number of sub elements (for a mixed element)
-  virtual unsigned int num_sub_elements() const;
-
-  /// Create a new finite element for sub element i (for a mixed element)
-  virtual ufc::finite_element* create_sub_element(unsigned int i) const;
-
-};
-
-/// This class defines the interface for a finite element.
-
-class UFC_MagmaEquationsBilinearForm_finite_element_8: public ufc::finite_element
-{
-public:
-
-  /// Constructor
-  UFC_MagmaEquationsBilinearForm_finite_element_8();
-
-  /// Destructor
-  virtual ~UFC_MagmaEquationsBilinearForm_finite_element_8();
-
-  /// Return a string identifying the finite element
-  virtual const char* signature() const;
-
-  /// Return the cell shape
-  virtual ufc::shape cell_shape() const;
-
-  /// Return the dimension of the finite element function space
-  virtual unsigned int space_dimension() const;
-
-  /// Return the rank of the value space
-  virtual unsigned int value_rank() const;
-
-  /// Return the dimension of the value space for axis i
-  virtual unsigned int value_dimension(unsigned int i) const;
-
-  /// Evaluate basis function i at given point in cell
-  virtual void evaluate_basis(unsigned int i,
-                              double* values,
-                              const double* coordinates,
-                              const ufc::cell& c) const;
-
-  /// Evaluate all basis functions at given point in cell
-  virtual void evaluate_basis_all(double* values,
-                                  const double* coordinates,
-                                  const ufc::cell& c) const;
-
-  /// Evaluate order n derivatives of basis function i at given point in cell
-  virtual void evaluate_basis_derivatives(unsigned int i,
-                                          unsigned int n,
-                                          double* values,
-                                          const double* coordinates,
-                                          const ufc::cell& c) const;
-  
-  /// Evaluate order n derivatives of all basis functions at given point in cell
-  virtual void evaluate_basis_derivatives_all(unsigned int n,
-                                              double* values,
-                                              const double* coordinates,
-                                              const ufc::cell& c) const;
-
-  /// Evaluate linear functional for dof i on the function f
-  virtual double evaluate_dof(unsigned int i,
-                              const ufc::function& f,
-                              const ufc::cell& c) const;
-
-  /// Evaluate linear functionals for all dofs on the function f
-  virtual void evaluate_dofs(double* values,
-                             const ufc::function& f,
-                             const ufc::cell& c) const;
-
-  /// Interpolate vertex values from dof values
-  virtual void interpolate_vertex_values(double* vertex_values,
-                                         const double* dof_values,
-                                         const ufc::cell& c) const;
-
-  /// Return the number of sub elements (for a mixed element)
-  virtual unsigned int num_sub_elements() const;
-
-  /// Create a new finite element for sub element i (for a mixed element)
-  virtual ufc::finite_element* create_sub_element(unsigned int i) const;
-
-};
-
-/// This class defines the interface for a local-to-global mapping of
-/// degrees of freedom (dofs).
-
-class UFC_MagmaEquationsBilinearForm_dof_map_0_0: public ufc::dof_map
-{
-private:
-
-  unsigned int __global_dimension;
-
-public:
-
-  /// Constructor
-  UFC_MagmaEquationsBilinearForm_dof_map_0_0();
-
-  /// Destructor
-  virtual ~UFC_MagmaEquationsBilinearForm_dof_map_0_0();
-
-  /// Return a string identifying the dof map
-  virtual const char* signature() const;
-
-  /// Return true iff mesh entities of topological dimension d are needed
-  virtual bool needs_mesh_entities(unsigned int d) const;
-
-  /// Initialize dof map for mesh (return true iff init_cell() is needed)
-  virtual bool init_mesh(const ufc::mesh& m);
-
-  /// Initialize dof map for given cell
-  virtual void init_cell(const ufc::mesh& m,
-                         const ufc::cell& c);
-
-  /// Finish initialization of dof map for cells
-  virtual void init_cell_finalize();
-
-  /// Return the dimension of the global finite element function space
-  virtual unsigned int global_dimension() const;
-
-  /// Return the dimension of the local finite element function space
-  virtual unsigned int local_dimension() const;
-
-  // Return the geometric dimension of the coordinates this dof map provides
-  virtual unsigned int geometric_dimension() const;
-
-  /// Return the number of dofs on each cell facet
-  virtual unsigned int num_facet_dofs() const;
-
-  /// Return the number of dofs associated with each cell entity of dimension d
-  virtual unsigned int num_entity_dofs(unsigned int d) const;
-
-  /// Tabulate the local-to-global mapping of dofs on a cell
-  virtual void tabulate_dofs(unsigned int* dofs,
-                             const ufc::mesh& m,
-                             const ufc::cell& c) const;
-
-  /// Tabulate the local-to-local mapping from facet dofs to cell dofs
-  virtual void tabulate_facet_dofs(unsigned int* dofs,
-                                   unsigned int facet) const;
-
-  /// Tabulate the local-to-local mapping of dofs on entity (d, i)
-  virtual void tabulate_entity_dofs(unsigned int* dofs,
-                                    unsigned int d, unsigned int i) const;
-
-  /// Tabulate the coordinates of all dofs on a cell
-  virtual void tabulate_coordinates(double** coordinates,
-                                    const ufc::cell& c) const;
-
-  /// Return the number of sub dof maps (for a mixed element)
-  virtual unsigned int num_sub_dof_maps() const;
-
-  /// Create a new dof_map for sub dof map i (for a mixed element)
-  virtual ufc::dof_map* create_sub_dof_map(unsigned int i) const;
-
-};
-
-/// This class defines the interface for a local-to-global mapping of
-/// degrees of freedom (dofs).
-
-class UFC_MagmaEquationsBilinearForm_dof_map_0_1: public ufc::dof_map
-{
-private:
-
-  unsigned int __global_dimension;
-
-public:
-
-  /// Constructor
-  UFC_MagmaEquationsBilinearForm_dof_map_0_1();
-
-  /// Destructor
-  virtual ~UFC_MagmaEquationsBilinearForm_dof_map_0_1();
-
-  /// Return a string identifying the dof map
-  virtual const char* signature() const;
-
-  /// Return true iff mesh entities of topological dimension d are needed
-  virtual bool needs_mesh_entities(unsigned int d) const;
-
-  /// Initialize dof map for mesh (return true iff init_cell() is needed)
-  virtual bool init_mesh(const ufc::mesh& m);
-
-  /// Initialize dof map for given cell
-  virtual void init_cell(const ufc::mesh& m,
-                         const ufc::cell& c);
-
-  /// Finish initialization of dof map for cells
-  virtual void init_cell_finalize();
-
-  /// Return the dimension of the global finite element function space
-  virtual unsigned int global_dimension() const;
-
-  /// Return the dimension of the local finite element function space
-  virtual unsigned int local_dimension() const;
-
-  // Return the geometric dimension of the coordinates this dof map provides
-  virtual unsigned int geometric_dimension() const;
-
-  /// Return the number of dofs on each cell facet
-  virtual unsigned int num_facet_dofs() const;
-
-  /// Return the number of dofs associated with each cell entity of dimension d
-  virtual unsigned int num_entity_dofs(unsigned int d) const;
-
-  /// Tabulate the local-to-global mapping of dofs on a cell
-  virtual void tabulate_dofs(unsigned int* dofs,
-                             const ufc::mesh& m,
-                             const ufc::cell& c) const;
-
-  /// Tabulate the local-to-local mapping from facet dofs to cell dofs
-  virtual void tabulate_facet_dofs(unsigned int* dofs,
-                                   unsigned int facet) const;
-
-  /// Tabulate the local-to-local mapping of dofs on entity (d, i)
-  virtual void tabulate_entity_dofs(unsigned int* dofs,
-                                    unsigned int d, unsigned int i) const;
-
-  /// Tabulate the coordinates of all dofs on a cell
-  virtual void tabulate_coordinates(double** coordinates,
-                                    const ufc::cell& c) const;
-
-  /// Return the number of sub dof maps (for a mixed element)
-  virtual unsigned int num_sub_dof_maps() const;
-
-  /// Create a new dof_map for sub dof map i (for a mixed element)
-  virtual ufc::dof_map* create_sub_dof_map(unsigned int i) const;
-
-};
-
-/// This class defines the interface for a local-to-global mapping of
-/// degrees of freedom (dofs).
-
-class UFC_MagmaEquationsBilinearForm_dof_map_0: public ufc::dof_map
-{
-private:
-
-  unsigned int __global_dimension;
-
-public:
-
-  /// Constructor
-  UFC_MagmaEquationsBilinearForm_dof_map_0();
-
-  /// Destructor
-  virtual ~UFC_MagmaEquationsBilinearForm_dof_map_0();
-
-  /// Return a string identifying the dof map
-  virtual const char* signature() const;
-
-  /// Return true iff mesh entities of topological dimension d are needed
-  virtual bool needs_mesh_entities(unsigned int d) const;
-
-  /// Initialize dof map for mesh (return true iff init_cell() is needed)
-  virtual bool init_mesh(const ufc::mesh& m);
-
-  /// Initialize dof map for given cell
-  virtual void init_cell(const ufc::mesh& m,
-                         const ufc::cell& c);
-
-  /// Finish initialization of dof map for cells
-  virtual void init_cell_finalize();
-
-  /// Return the dimension of the global finite element function space
-  virtual unsigned int global_dimension() const;
-
-  /// Return the dimension of the local finite element function space
-  virtual unsigned int local_dimension() const;
-
-  // Return the geometric dimension of the coordinates this dof map provides
-  virtual unsigned int geometric_dimension() const;
-
-  /// Return the number of dofs on each cell facet
-  virtual unsigned int num_facet_dofs() const;
-
-  /// Return the number of dofs associated with each cell entity of dimension d
-  virtual unsigned int num_entity_dofs(unsigned int d) const;
-
-  /// Tabulate the local-to-global mapping of dofs on a cell
-  virtual void tabulate_dofs(unsigned int* dofs,
-                             const ufc::mesh& m,
-                             const ufc::cell& c) const;
-
-  /// Tabulate the local-to-local mapping from facet dofs to cell dofs
-  virtual void tabulate_facet_dofs(unsigned int* dofs,
-                                   unsigned int facet) const;
-
-  /// Tabulate the local-to-local mapping of dofs on entity (d, i)
-  virtual void tabulate_entity_dofs(unsigned int* dofs,
-                                    unsigned int d, unsigned int i) const;
-
-  /// Tabulate the coordinates of all dofs on a cell
-  virtual void tabulate_coordinates(double** coordinates,
-                                    const ufc::cell& c) const;
-
-  /// Return the number of sub dof maps (for a mixed element)
-  virtual unsigned int num_sub_dof_maps() const;
-
-  /// Create a new dof_map for sub dof map i (for a mixed element)
-  virtual ufc::dof_map* create_sub_dof_map(unsigned int i) const;
-
-};
-
-/// This class defines the interface for a local-to-global mapping of
-/// degrees of freedom (dofs).
-
-class UFC_MagmaEquationsBilinearForm_dof_map_1_0: public ufc::dof_map
-{
-private:
-
-  unsigned int __global_dimension;
-
-public:
-
-  /// Constructor
-  UFC_MagmaEquationsBilinearForm_dof_map_1_0();
-
-  /// Destructor
-  virtual ~UFC_MagmaEquationsBilinearForm_dof_map_1_0();
-
-  /// Return a string identifying the dof map
-  virtual const char* signature() const;
-
-  /// Return true iff mesh entities of topological dimension d are needed
-  virtual bool needs_mesh_entities(unsigned int d) const;
-
-  /// Initialize dof map for mesh (return true iff init_cell() is needed)
-  virtual bool init_mesh(const ufc::mesh& m);
-
-  /// Initialize dof map for given cell
-  virtual void init_cell(const ufc::mesh& m,
-                         const ufc::cell& c);
-
-  /// Finish initialization of dof map for cells
-  virtual void init_cell_finalize();
-
-  /// Return the dimension of the global finite element function space
-  virtual unsigned int global_dimension() const;
-
-  /// Return the dimension of the local finite element function space
-  virtual unsigned int local_dimension() const;
-
-  // Return the geometric dimension of the coordinates this dof map provides
-  virtual unsigned int geometric_dimension() const;
-
-  /// Return the number of dofs on each cell facet
-  virtual unsigned int num_facet_dofs() const;
-
-  /// Return the number of dofs associated with each cell entity of dimension d
-  virtual unsigned int num_entity_dofs(unsigned int d) const;
-
-  /// Tabulate the local-to-global mapping of dofs on a cell
-  virtual void tabulate_dofs(unsigned int* dofs,
-                             const ufc::mesh& m,
-                             const ufc::cell& c) const;
-
-  /// Tabulate the local-to-local mapping from facet dofs to cell dofs
-  virtual void tabulate_facet_dofs(unsigned int* dofs,
-                                   unsigned int facet) const;
-
-  /// Tabulate the local-to-local mapping of dofs on entity (d, i)
-  virtual void tabulate_entity_dofs(unsigned int* dofs,
-                                    unsigned int d, unsigned int i) const;
-
-  /// Tabulate the coordinates of all dofs on a cell
-  virtual void tabulate_coordinates(double** coordinates,
-                                    const ufc::cell& c) const;
-
-  /// Return the number of sub dof maps (for a mixed element)
-  virtual unsigned int num_sub_dof_maps() const;
-
-  /// Create a new dof_map for sub dof map i (for a mixed element)
-  virtual ufc::dof_map* create_sub_dof_map(unsigned int i) const;
-
-};
-
-/// This class defines the interface for a local-to-global mapping of
-/// degrees of freedom (dofs).
-
-class UFC_MagmaEquationsBilinearForm_dof_map_1_1: public ufc::dof_map
-{
-private:
-
-  unsigned int __global_dimension;
-
-public:
-
-  /// Constructor
-  UFC_MagmaEquationsBilinearForm_dof_map_1_1();
-
-  /// Destructor
-  virtual ~UFC_MagmaEquationsBilinearForm_dof_map_1_1();
-
-  /// Return a string identifying the dof map
-  virtual const char* signature() const;
-
-  /// Return true iff mesh entities of topological dimension d are needed
-  virtual bool needs_mesh_entities(unsigned int d) const;
-
-  /// Initialize dof map for mesh (return true iff init_cell() is needed)
-  virtual bool init_mesh(const ufc::mesh& m);
-
-  /// Initialize dof map for given cell
-  virtual void init_cell(const ufc::mesh& m,
-                         const ufc::cell& c);
-
-  /// Finish initialization of dof map for cells
-  virtual void init_cell_finalize();
-
-  /// Return the dimension of the global finite element function space
-  virtual unsigned int global_dimension() const;
-
-  /// Return the dimension of the local finite element function space
-  virtual unsigned int local_dimension() const;
-
-  // Return the geometric dimension of the coordinates this dof map provides
-  virtual unsigned int geometric_dimension() const;
-
-  /// Return the number of dofs on each cell facet
-  virtual unsigned int num_facet_dofs() const;
-
-  /// Return the number of dofs associated with each cell entity of dimension d
-  virtual unsigned int num_entity_dofs(unsigned int d) const;
-
-  /// Tabulate the local-to-global mapping of dofs on a cell
-  virtual void tabulate_dofs(unsigned int* dofs,
-                             const ufc::mesh& m,
-                             const ufc::cell& c) const;
-
-  /// Tabulate the local-to-local mapping from facet dofs to cell dofs
-  virtual void tabulate_facet_dofs(unsigned int* dofs,
-                                   unsigned int facet) const;
-
-  /// Tabulate the local-to-local mapping of dofs on entity (d, i)
-  virtual void tabulate_entity_dofs(unsigned int* dofs,
-                                    unsigned int d, unsigned int i) const;
-
-  /// Tabulate the coordinates of all dofs on a cell
-  virtual void tabulate_coordinates(double** coordinates,
-                                    const ufc::cell& c) const;
-
-  /// Return the number of sub dof maps (for a mixed element)
-  virtual unsigned int num_sub_dof_maps() const;
-
-  /// Create a new dof_map for sub dof map i (for a mixed element)
-  virtual ufc::dof_map* create_sub_dof_map(unsigned int i) const;
-
-};
-
-/// This class defines the interface for a local-to-global mapping of
-/// degrees of freedom (dofs).
-
-class UFC_MagmaEquationsBilinearForm_dof_map_1: public ufc::dof_map
-{
-private:
-
-  unsigned int __global_dimension;
-
-public:
-
-  /// Constructor
-  UFC_MagmaEquationsBilinearForm_dof_map_1();
-
-  /// Destructor
-  virtual ~UFC_MagmaEquationsBilinearForm_dof_map_1();
-
-  /// Return a string identifying the dof map
-  virtual const char* signature() const;
-
-  /// Return true iff mesh entities of topological dimension d are needed
-  virtual bool needs_mesh_entities(unsigned int d) const;
-
-  /// Initialize dof map for mesh (return true iff init_cell() is needed)
-  virtual bool init_mesh(const ufc::mesh& m);
-
-  /// Initialize dof map for given cell
-  virtual void init_cell(const ufc::mesh& m,
-                         const ufc::cell& c);
-
-  /// Finish initialization of dof map for cells
-  virtual void init_cell_finalize();
-
-  /// Return the dimension of the global finite element function space
-  virtual unsigned int global_dimension() const;
-
-  /// Return the dimension of the local finite element function space
-  virtual unsigned int local_dimension() const;
-
-  // Return the geometric dimension of the coordinates this dof map provides
-  virtual unsigned int geometric_dimension() const;
-
-  /// Return the number of dofs on each cell facet
-  virtual unsigned int num_facet_dofs() const;
-
-  /// Return the number of dofs associated with each cell entity of dimension d
-  virtual unsigned int num_entity_dofs(unsigned int d) const;
-
-  /// Tabulate the local-to-global mapping of dofs on a cell
-  virtual void tabulate_dofs(unsigned int* dofs,
-                             const ufc::mesh& m,
-                             const ufc::cell& c) const;
-
-  /// Tabulate the local-to-local mapping from facet dofs to cell dofs
-  virtual void tabulate_facet_dofs(unsigned int* dofs,
-                                   unsigned int facet) const;
-
-  /// Tabulate the local-to-local mapping of dofs on entity (d, i)
-  virtual void tabulate_entity_dofs(unsigned int* dofs,
-                                    unsigned int d, unsigned int i) const;
-
-  /// Tabulate the coordinates of all dofs on a cell
-  virtual void tabulate_coordinates(double** coordinates,
-                                    const ufc::cell& c) const;
-
-  /// Return the number of sub dof maps (for a mixed element)
-  virtual unsigned int num_sub_dof_maps() const;
-
-  /// Create a new dof_map for sub dof map i (for a mixed element)
-  virtual ufc::dof_map* create_sub_dof_map(unsigned int i) const;
-
-};
-
-/// This class defines the interface for a local-to-global mapping of
-/// degrees of freedom (dofs).
-
-class UFC_MagmaEquationsBilinearForm_dof_map_2_0: public ufc::dof_map
-{
-private:
-
-  unsigned int __global_dimension;
-
-public:
-
-  /// Constructor
-  UFC_MagmaEquationsBilinearForm_dof_map_2_0();
-
-  /// Destructor
-  virtual ~UFC_MagmaEquationsBilinearForm_dof_map_2_0();
-
-  /// Return a string identifying the dof map
-  virtual const char* signature() const;
-
-  /// Return true iff mesh entities of topological dimension d are needed
-  virtual bool needs_mesh_entities(unsigned int d) const;
-
-  /// Initialize dof map for mesh (return true iff init_cell() is needed)
-  virtual bool init_mesh(const ufc::mesh& m);
-
-  /// Initialize dof map for given cell
-  virtual void init_cell(const ufc::mesh& m,
-                         const ufc::cell& c);
-
-  /// Finish initialization of dof map for cells
-  virtual void init_cell_finalize();
-
-  /// Return the dimension of the global finite element function space
-  virtual unsigned int global_dimension() const;
-
-  /// Return the dimension of the local finite element function space
-  virtual unsigned int local_dimension() const;
-
-  // Return the geometric dimension of the coordinates this dof map provides
-  virtual unsigned int geometric_dimension() const;
-
-  /// Return the number of dofs on each cell facet
-  virtual unsigned int num_facet_dofs() const;
-
-  /// Return the number of dofs associated with each cell entity of dimension d
-  virtual unsigned int num_entity_dofs(unsigned int d) const;
-
-  /// Tabulate the local-to-global mapping of dofs on a cell
-  virtual void tabulate_dofs(unsigned int* dofs,
-                             const ufc::mesh& m,
-                             const ufc::cell& c) const;
-
-  /// Tabulate the local-to-local mapping from facet dofs to cell dofs
-  virtual void tabulate_facet_dofs(unsigned int* dofs,
-                                   unsigned int facet) const;
-
-  /// Tabulate the local-to-local mapping of dofs on entity (d, i)
-  virtual void tabulate_entity_dofs(unsigned int* dofs,
-                                    unsigned int d, unsigned int i) const;
-
-  /// Tabulate the coordinates of all dofs on a cell
-  virtual void tabulate_coordinates(double** coordinates,
-                                    const ufc::cell& c) const;
-
-  /// Return the number of sub dof maps (for a mixed element)
-  virtual unsigned int num_sub_dof_maps() const;
-
-  /// Create a new dof_map for sub dof map i (for a mixed element)
-  virtual ufc::dof_map* create_sub_dof_map(unsigned int i) const;
-
-};
-
-/// This class defines the interface for a local-to-global mapping of
-/// degrees of freedom (dofs).
-
-class UFC_MagmaEquationsBilinearForm_dof_map_2_1: public ufc::dof_map
-{
-private:
-
-  unsigned int __global_dimension;
-
-public:
-
-  /// Constructor
-  UFC_MagmaEquationsBilinearForm_dof_map_2_1();
-
-  /// Destructor
-  virtual ~UFC_MagmaEquationsBilinearForm_dof_map_2_1();
-
-  /// Return a string identifying the dof map
-  virtual const char* signature() const;
-
-  /// Return true iff mesh entities of topological dimension d are needed
-  virtual bool needs_mesh_entities(unsigned int d) const;
-
-  /// Initialize dof map for mesh (return true iff init_cell() is needed)
-  virtual bool init_mesh(const ufc::mesh& m);
-
-  /// Initialize dof map for given cell
-  virtual void init_cell(const ufc::mesh& m,
-                         const ufc::cell& c);
-
-  /// Finish initialization of dof map for cells
-  virtual void init_cell_finalize();
-
-  /// Return the dimension of the global finite element function space
-  virtual unsigned int global_dimension() const;
-
-  /// Return the dimension of the local finite element function space
-  virtual unsigned int local_dimension() const;
-
-  // Return the geometric dimension of the coordinates this dof map provides
-  virtual unsigned int geometric_dimension() const;
-
-  /// Return the number of dofs on each cell facet
-  virtual unsigned int num_facet_dofs() const;
-
-  /// Return the number of dofs associated with each cell entity of dimension d
-  virtual unsigned int num_entity_dofs(unsigned int d) const;
-
-  /// Tabulate the local-to-global mapping of dofs on a cell
-  virtual void tabulate_dofs(unsigned int* dofs,
-                             const ufc::mesh& m,
-                             const ufc::cell& c) const;
-
-  /// Tabulate the local-to-local mapping from facet dofs to cell dofs
-  virtual void tabulate_facet_dofs(unsigned int* dofs,
-                                   unsigned int facet) const;
-
-  /// Tabulate the local-to-local mapping of dofs on entity (d, i)
-  virtual void tabulate_entity_dofs(unsigned int* dofs,
-                                    unsigned int d, unsigned int i) const;
-
-  /// Tabulate the coordinates of all dofs on a cell
-  virtual void tabulate_coordinates(double** coordinates,
-                                    const ufc::cell& c) const;
-
-  /// Return the number of sub dof maps (for a mixed element)
-  virtual unsigned int num_sub_dof_maps() const;
-
-  /// Create a new dof_map for sub dof map i (for a mixed element)
-  virtual ufc::dof_map* create_sub_dof_map(unsigned int i) const;
-
-};
-
-/// This class defines the interface for a local-to-global mapping of
-/// degrees of freedom (dofs).
-
-class UFC_MagmaEquationsBilinearForm_dof_map_2: public ufc::dof_map
-{
-private:
-
-  unsigned int __global_dimension;
-
-public:
-
-  /// Constructor
-  UFC_MagmaEquationsBilinearForm_dof_map_2();
-
-  /// Destructor
-  virtual ~UFC_MagmaEquationsBilinearForm_dof_map_2();
-
-  /// Return a string identifying the dof map
-  virtual const char* signature() const;
-
-  /// Return true iff mesh entities of topological dimension d are needed
-  virtual bool needs_mesh_entities(unsigned int d) const;
-
-  /// Initialize dof map for mesh (return true iff init_cell() is needed)
-  virtual bool init_mesh(const ufc::mesh& m);
-
-  /// Initialize dof map for given cell
-  virtual void init_cell(const ufc::mesh& m,
-                         const ufc::cell& c);
-
-  /// Finish initialization of dof map for cells
-  virtual void init_cell_finalize();
-
-  /// Return the dimension of the global finite element function space
-  virtual unsigned int global_dimension() const;
-
-  /// Return the dimension of the local finite element function space
-  virtual unsigned int local_dimension() const;
-
-  // Return the geometric dimension of the coordinates this dof map provides
-  virtual unsigned int geometric_dimension() const;
-
-  /// Return the number of dofs on each cell facet
-  virtual unsigned int num_facet_dofs() const;
-
-  /// Return the number of dofs associated with each cell entity of dimension d
-  virtual unsigned int num_entity_dofs(unsigned int d) const;
-
-  /// Tabulate the local-to-global mapping of dofs on a cell
-  virtual void tabulate_dofs(unsigned int* dofs,
-                             const ufc::mesh& m,
-                             const ufc::cell& c) const;
-
-  /// Tabulate the local-to-local mapping from facet dofs to cell dofs
-  virtual void tabulate_facet_dofs(unsigned int* dofs,
-                                   unsigned int facet) const;
-
-  /// Tabulate the local-to-local mapping of dofs on entity (d, i)
-  virtual void tabulate_entity_dofs(unsigned int* dofs,
-                                    unsigned int d, unsigned int i) const;
-
-  /// Tabulate the coordinates of all dofs on a cell
-  virtual void tabulate_coordinates(double** coordinates,
-                                    const ufc::cell& c) const;
-
-  /// Return the number of sub dof maps (for a mixed element)
-  virtual unsigned int num_sub_dof_maps() const;
-
-  /// Create a new dof_map for sub dof map i (for a mixed element)
-  virtual ufc::dof_map* create_sub_dof_map(unsigned int i) const;
-
-};
-
-/// This class defines the interface for a local-to-global mapping of
-/// degrees of freedom (dofs).
-
-class UFC_MagmaEquationsBilinearForm_dof_map_3: public ufc::dof_map
-{
-private:
-
-  unsigned int __global_dimension;
-
-public:
-
-  /// Constructor
-  UFC_MagmaEquationsBilinearForm_dof_map_3();
-
-  /// Destructor
-  virtual ~UFC_MagmaEquationsBilinearForm_dof_map_3();
-
-  /// Return a string identifying the dof map
-  virtual const char* signature() const;
-
-  /// Return true iff mesh entities of topological dimension d are needed
-  virtual bool needs_mesh_entities(unsigned int d) const;
-
-  /// Initialize dof map for mesh (return true iff init_cell() is needed)
-  virtual bool init_mesh(const ufc::mesh& m);
-
-  /// Initialize dof map for given cell
-  virtual void init_cell(const ufc::mesh& m,
-                         const ufc::cell& c);
-
-  /// Finish initialization of dof map for cells
-  virtual void init_cell_finalize();
-
-  /// Return the dimension of the global finite element function space
-  virtual unsigned int global_dimension() const;
-
-  /// Return the dimension of the local finite element function space
-  virtual unsigned int local_dimension() const;
-
-  // Return the geometric dimension of the coordinates this dof map provides
-  virtual unsigned int geometric_dimension() const;
-
-  /// Return the number of dofs on each cell facet
-  virtual unsigned int num_facet_dofs() const;
-
-  /// Return the number of dofs associated with each cell entity of dimension d
-  virtual unsigned int num_entity_dofs(unsigned int d) const;
-
-  /// Tabulate the local-to-global mapping of dofs on a cell
-  virtual void tabulate_dofs(unsigned int* dofs,
-                             const ufc::mesh& m,
-                             const ufc::cell& c) const;
-
-  /// Tabulate the local-to-local mapping from facet dofs to cell dofs
-  virtual void tabulate_facet_dofs(unsigned int* dofs,
-                                   unsigned int facet) const;
-
-  /// Tabulate the local-to-local mapping of dofs on entity (d, i)
-  virtual void tabulate_entity_dofs(unsigned int* dofs,
-                                    unsigned int d, unsigned int i) const;
-
-  /// Tabulate the coordinates of all dofs on a cell
-  virtual void tabulate_coordinates(double** coordinates,
-                                    const ufc::cell& c) const;
-
-  /// Return the number of sub dof maps (for a mixed element)
-  virtual unsigned int num_sub_dof_maps() const;
-
-  /// Create a new dof_map for sub dof map i (for a mixed element)
-  virtual ufc::dof_map* create_sub_dof_map(unsigned int i) const;
-
-};
-
-/// This class defines the interface for a local-to-global mapping of
-/// degrees of freedom (dofs).
-
-class UFC_MagmaEquationsBilinearForm_dof_map_4: public ufc::dof_map
-{
-private:
-
-  unsigned int __global_dimension;
-
-public:
-
-  /// Constructor
-  UFC_MagmaEquationsBilinearForm_dof_map_4();
-
-  /// Destructor
-  virtual ~UFC_MagmaEquationsBilinearForm_dof_map_4();
-
-  /// Return a string identifying the dof map
-  virtual const char* signature() const;
-
-  /// Return true iff mesh entities of topological dimension d are needed
-  virtual bool needs_mesh_entities(unsigned int d) const;
-
-  /// Initialize dof map for mesh (return true iff init_cell() is needed)
-  virtual bool init_mesh(const ufc::mesh& m);
-
-  /// Initialize dof map for given cell
-  virtual void init_cell(const ufc::mesh& m,
-                         const ufc::cell& c);
-
-  /// Finish initialization of dof map for cells
-  virtual void init_cell_finalize();
-
-  /// Return the dimension of the global finite element function space
-  virtual unsigned int global_dimension() const;
-
-  /// Return the dimension of the local finite element function space
-  virtual unsigned int local_dimension() const;
-
-  // Return the geometric dimension of the coordinates this dof map provides
-  virtual unsigned int geometric_dimension() const;
-
-  /// Return the number of dofs on each cell facet
-  virtual unsigned int num_facet_dofs() const;
-
-  /// Return the number of dofs associated with each cell entity of dimension d
-  virtual unsigned int num_entity_dofs(unsigned int d) const;
-
-  /// Tabulate the local-to-global mapping of dofs on a cell
-  virtual void tabulate_dofs(unsigned int* dofs,
-                             const ufc::mesh& m,
-                             const ufc::cell& c) const;
-
-  /// Tabulate the local-to-local mapping from facet dofs to cell dofs
-  virtual void tabulate_facet_dofs(unsigned int* dofs,
-                                   unsigned int facet) const;
-
-  /// Tabulate the local-to-local mapping of dofs on entity (d, i)
-  virtual void tabulate_entity_dofs(unsigned int* dofs,
-                                    unsigned int d, unsigned int i) const;
-
-  /// Tabulate the coordinates of all dofs on a cell
-  virtual void tabulate_coordinates(double** coordinates,
-                                    const ufc::cell& c) const;
-
-  /// Return the number of sub dof maps (for a mixed element)
-  virtual unsigned int num_sub_dof_maps() const;
-
-  /// Create a new dof_map for sub dof map i (for a mixed element)
-  virtual ufc::dof_map* create_sub_dof_map(unsigned int i) const;
-
-};
-
-/// This class defines the interface for a local-to-global mapping of
-/// degrees of freedom (dofs).
-
-class UFC_MagmaEquationsBilinearForm_dof_map_5_0: public ufc::dof_map
-{
-private:
-
-  unsigned int __global_dimension;
-
-public:
-
-  /// Constructor
-  UFC_MagmaEquationsBilinearForm_dof_map_5_0();
-
-  /// Destructor
-  virtual ~UFC_MagmaEquationsBilinearForm_dof_map_5_0();
-
-  /// Return a string identifying the dof map
-  virtual const char* signature() const;
-
-  /// Return true iff mesh entities of topological dimension d are needed
-  virtual bool needs_mesh_entities(unsigned int d) const;
-
-  /// Initialize dof map for mesh (return true iff init_cell() is needed)
-  virtual bool init_mesh(const ufc::mesh& m);
-
-  /// Initialize dof map for given cell
-  virtual void init_cell(const ufc::mesh& m,
-                         const ufc::cell& c);
-
-  /// Finish initialization of dof map for cells
-  virtual void init_cell_finalize();
-
-  /// Return the dimension of the global finite element function space
-  virtual unsigned int global_dimension() const;
-
-  /// Return the dimension of the local finite element function space
-  virtual unsigned int local_dimension() const;
-
-  // Return the geometric dimension of the coordinates this dof map provides
-  virtual unsigned int geometric_dimension() const;
-
-  /// Return the number of dofs on each cell facet
-  virtual unsigned int num_facet_dofs() const;
-
-  /// Return the number of dofs associated with each cell entity of dimension d
-  virtual unsigned int num_entity_dofs(unsigned int d) const;
-
-  /// Tabulate the local-to-global mapping of dofs on a cell
-  virtual void tabulate_dofs(unsigned int* dofs,
-                             const ufc::mesh& m,
-                             const ufc::cell& c) const;
-
-  /// Tabulate the local-to-local mapping from facet dofs to cell dofs
-  virtual void tabulate_facet_dofs(unsigned int* dofs,
-                                   unsigned int facet) const;
-
-  /// Tabulate the local-to-local mapping of dofs on entity (d, i)
-  virtual void tabulate_entity_dofs(unsigned int* dofs,
-                                    unsigned int d, unsigned int i) const;
-
-  /// Tabulate the coordinates of all dofs on a cell
-  virtual void tabulate_coordinates(double** coordinates,
-                                    const ufc::cell& c) const;
-
-  /// Return the number of sub dof maps (for a mixed element)
-  virtual unsigned int num_sub_dof_maps() const;
-
-  /// Create a new dof_map for sub dof map i (for a mixed element)
-  virtual ufc::dof_map* create_sub_dof_map(unsigned int i) const;
-
-};
-
-/// This class defines the interface for a local-to-global mapping of
-/// degrees of freedom (dofs).
-
-class UFC_MagmaEquationsBilinearForm_dof_map_5_1: public ufc::dof_map
-{
-private:
-
-  unsigned int __global_dimension;
-
-public:
-
-  /// Constructor
-  UFC_MagmaEquationsBilinearForm_dof_map_5_1();
-
-  /// Destructor
-  virtual ~UFC_MagmaEquationsBilinearForm_dof_map_5_1();
-
-  /// Return a string identifying the dof map
-  virtual const char* signature() const;
-
-  /// Return true iff mesh entities of topological dimension d are needed
-  virtual bool needs_mesh_entities(unsigned int d) const;
-
-  /// Initialize dof map for mesh (return true iff init_cell() is needed)
-  virtual bool init_mesh(const ufc::mesh& m);
-
-  /// Initialize dof map for given cell
-  virtual void init_cell(const ufc::mesh& m,
-                         const ufc::cell& c);
-
-  /// Finish initialization of dof map for cells
-  virtual void init_cell_finalize();
-
-  /// Return the dimension of the global finite element function space
-  virtual unsigned int global_dimension() const;
-
-  /// Return the dimension of the local finite element function space
-  virtual unsigned int local_dimension() const;
-
-  // Return the geometric dimension of the coordinates this dof map provides
-  virtual unsigned int geometric_dimension() const;
-
-  /// Return the number of dofs on each cell facet
-  virtual unsigned int num_facet_dofs() const;
-
-  /// Return the number of dofs associated with each cell entity of dimension d
-  virtual unsigned int num_entity_dofs(unsigned int d) const;
-
-  /// Tabulate the local-to-global mapping of dofs on a cell
-  virtual void tabulate_dofs(unsigned int* dofs,
-                             const ufc::mesh& m,
-                             const ufc::cell& c) const;
-
-  /// Tabulate the local-to-local mapping from facet dofs to cell dofs
-  virtual void tabulate_facet_dofs(unsigned int* dofs,
-                                   unsigned int facet) const;
-
-  /// Tabulate the local-to-local mapping of dofs on entity (d, i)
-  virtual void tabulate_entity_dofs(unsigned int* dofs,
-                                    unsigned int d, unsigned int i) const;
-
-  /// Tabulate the coordinates of all dofs on a cell
-  virtual void tabulate_coordinates(double** coordinates,
-                                    const ufc::cell& c) const;
-
-  /// Return the number of sub dof maps (for a mixed element)
-  virtual unsigned int num_sub_dof_maps() const;
-
-  /// Create a new dof_map for sub dof map i (for a mixed element)
-  virtual ufc::dof_map* create_sub_dof_map(unsigned int i) const;
-
-};
-
-/// This class defines the interface for a local-to-global mapping of
-/// degrees of freedom (dofs).
-
-class UFC_MagmaEquationsBilinearForm_dof_map_5: public ufc::dof_map
-{
-private:
-
-  unsigned int __global_dimension;
-
-public:
-
-  /// Constructor
-  UFC_MagmaEquationsBilinearForm_dof_map_5();
-
-  /// Destructor
-  virtual ~UFC_MagmaEquationsBilinearForm_dof_map_5();
-
-  /// Return a string identifying the dof map
-  virtual const char* signature() const;
-
-  /// Return true iff mesh entities of topological dimension d are needed
-  virtual bool needs_mesh_entities(unsigned int d) const;
-
-  /// Initialize dof map for mesh (return true iff init_cell() is needed)
-  virtual bool init_mesh(const ufc::mesh& m);
-
-  /// Initialize dof map for given cell
-  virtual void init_cell(const ufc::mesh& m,
-                         const ufc::cell& c);
-
-  /// Finish initialization of dof map for cells
-  virtual void init_cell_finalize();
-
-  /// Return the dimension of the global finite element function space
-  virtual unsigned int global_dimension() const;
-
-  /// Return the dimension of the local finite element function space
-  virtual unsigned int local_dimension() const;
-
-  // Return the geometric dimension of the coordinates this dof map provides
-  virtual unsigned int geometric_dimension() const;
-
-  /// Return the number of dofs on each cell facet
-  virtual unsigned int num_facet_dofs() const;
-
-  /// Return the number of dofs associated with each cell entity of dimension d
-  virtual unsigned int num_entity_dofs(unsigned int d) const;
-
-  /// Tabulate the local-to-global mapping of dofs on a cell
-  virtual void tabulate_dofs(unsigned int* dofs,
-                             const ufc::mesh& m,
-                             const ufc::cell& c) const;
-
-  /// Tabulate the local-to-local mapping from facet dofs to cell dofs
-  virtual void tabulate_facet_dofs(unsigned int* dofs,
-                                   unsigned int facet) const;
-
-  /// Tabulate the local-to-local mapping of dofs on entity (d, i)
-  virtual void tabulate_entity_dofs(unsigned int* dofs,
-                                    unsigned int d, unsigned int i) const;
-
-  /// Tabulate the coordinates of all dofs on a cell
-  virtual void tabulate_coordinates(double** coordinates,
-                                    const ufc::cell& c) const;
-
-  /// Return the number of sub dof maps (for a mixed element)
-  virtual unsigned int num_sub_dof_maps() const;
-
-  /// Create a new dof_map for sub dof map i (for a mixed element)
-  virtual ufc::dof_map* create_sub_dof_map(unsigned int i) const;
-
-};
-
-/// This class defines the interface for a local-to-global mapping of
-/// degrees of freedom (dofs).
-
-class UFC_MagmaEquationsBilinearForm_dof_map_6: public ufc::dof_map
-{
-private:
-
-  unsigned int __global_dimension;
-
-public:
-
-  /// Constructor
-  UFC_MagmaEquationsBilinearForm_dof_map_6();
-
-  /// Destructor
-  virtual ~UFC_MagmaEquationsBilinearForm_dof_map_6();
-
-  /// Return a string identifying the dof map
-  virtual const char* signature() const;
-
-  /// Return true iff mesh entities of topological dimension d are needed
-  virtual bool needs_mesh_entities(unsigned int d) const;
-
-  /// Initialize dof map for mesh (return true iff init_cell() is needed)
-  virtual bool init_mesh(const ufc::mesh& m);
-
-  /// Initialize dof map for given cell
-  virtual void init_cell(const ufc::mesh& m,
-                         const ufc::cell& c);
-
-  /// Finish initialization of dof map for cells
-  virtual void init_cell_finalize();
-
-  /// Return the dimension of the global finite element function space
-  virtual unsigned int global_dimension() const;
-
-  /// Return the dimension of the local finite element function space
-  virtual unsigned int local_dimension() const;
-
-  // Return the geometric dimension of the coordinates this dof map provides
-  virtual unsigned int geometric_dimension() const;
-
-  /// Return the number of dofs on each cell facet
-  virtual unsigned int num_facet_dofs() const;
-
-  /// Return the number of dofs associated with each cell entity of dimension d
-  virtual unsigned int num_entity_dofs(unsigned int d) const;
-
-  /// Tabulate the local-to-global mapping of dofs on a cell
-  virtual void tabulate_dofs(unsigned int* dofs,
-                             const ufc::mesh& m,
-                             const ufc::cell& c) const;
-
-  /// Tabulate the local-to-local mapping from facet dofs to cell dofs
-  virtual void tabulate_facet_dofs(unsigned int* dofs,
-                                   unsigned int facet) const;
-
-  /// Tabulate the local-to-local mapping of dofs on entity (d, i)
-  virtual void tabulate_entity_dofs(unsigned int* dofs,
-                                    unsigned int d, unsigned int i) const;
-
-  /// Tabulate the coordinates of all dofs on a cell
-  virtual void tabulate_coordinates(double** coordinates,
-                                    const ufc::cell& c) const;
-
-  /// Return the number of sub dof maps (for a mixed element)
-  virtual unsigned int num_sub_dof_maps() const;
-
-  /// Create a new dof_map for sub dof map i (for a mixed element)
-  virtual ufc::dof_map* create_sub_dof_map(unsigned int i) const;
-
-};
-
-/// This class defines the interface for a local-to-global mapping of
-/// degrees of freedom (dofs).
-
-class UFC_MagmaEquationsBilinearForm_dof_map_7: public ufc::dof_map
-{
-private:
-
-  unsigned int __global_dimension;
-
-public:
-
-  /// Constructor
-  UFC_MagmaEquationsBilinearForm_dof_map_7();
-
-  /// Destructor
-  virtual ~UFC_MagmaEquationsBilinearForm_dof_map_7();
-
-  /// Return a string identifying the dof map
-  virtual const char* signature() const;
-
-  /// Return true iff mesh entities of topological dimension d are needed
-  virtual bool needs_mesh_entities(unsigned int d) const;
-
-  /// Initialize dof map for mesh (return true iff init_cell() is needed)
-  virtual bool init_mesh(const ufc::mesh& m);
-
-  /// Initialize dof map for given cell
-  virtual void init_cell(const ufc::mesh& m,
-                         const ufc::cell& c);
-
-  /// Finish initialization of dof map for cells
-  virtual void init_cell_finalize();
-
-  /// Return the dimension of the global finite element function space
-  virtual unsigned int global_dimension() const;
-
-  /// Return the dimension of the local finite element function space
-  virtual unsigned int local_dimension() const;
-
-  // Return the geometric dimension of the coordinates this dof map provides
-  virtual unsigned int geometric_dimension() const;
-
-  /// Return the number of dofs on each cell facet
-  virtual unsigned int num_facet_dofs() const;
-
-  /// Return the number of dofs associated with each cell entity of dimension d
-  virtual unsigned int num_entity_dofs(unsigned int d) const;
-
-  /// Tabulate the local-to-global mapping of dofs on a cell
-  virtual void tabulate_dofs(unsigned int* dofs,
-                             const ufc::mesh& m,
-                             const ufc::cell& c) const;
-
-  /// Tabulate the local-to-local mapping from facet dofs to cell dofs
-  virtual void tabulate_facet_dofs(unsigned int* dofs,
-                                   unsigned int facet) const;
-
-  /// Tabulate the local-to-local mapping of dofs on entity (d, i)
-  virtual void tabulate_entity_dofs(unsigned int* dofs,
-                                    unsigned int d, unsigned int i) const;
-
-  /// Tabulate the coordinates of all dofs on a cell
-  virtual void tabulate_coordinates(double** coordinates,
-                                    const ufc::cell& c) const;
-
-  /// Return the number of sub dof maps (for a mixed element)
-  virtual unsigned int num_sub_dof_maps() const;
-
-  /// Create a new dof_map for sub dof map i (for a mixed element)
-  virtual ufc::dof_map* create_sub_dof_map(unsigned int i) const;
-
-};
-
-/// This class defines the interface for a local-to-global mapping of
-/// degrees of freedom (dofs).
-
-class UFC_MagmaEquationsBilinearForm_dof_map_8: public ufc::dof_map
-{
-private:
-
-  unsigned int __global_dimension;
-
-public:
-
-  /// Constructor
-  UFC_MagmaEquationsBilinearForm_dof_map_8();
-
-  /// Destructor
-  virtual ~UFC_MagmaEquationsBilinearForm_dof_map_8();
-
-  /// Return a string identifying the dof map
-  virtual const char* signature() const;
-
-  /// Return true iff mesh entities of topological dimension d are needed
-  virtual bool needs_mesh_entities(unsigned int d) const;
-
-  /// Initialize dof map for mesh (return true iff init_cell() is needed)
-  virtual bool init_mesh(const ufc::mesh& m);
-
-  /// Initialize dof map for given cell
-  virtual void init_cell(const ufc::mesh& m,
-                         const ufc::cell& c);
-
-  /// Finish initialization of dof map for cells
-  virtual void init_cell_finalize();
-
-  /// Return the dimension of the global finite element function space
-  virtual unsigned int global_dimension() const;
-
-  /// Return the dimension of the local finite element function space
-  virtual unsigned int local_dimension() const;
+class magmaequations_0_finite_element_0_0: public ufc::finite_element
+{
+public:
+
+  /// Constructor
+  magmaequations_0_finite_element_0_0();
+
+  /// Destructor
+  virtual ~magmaequations_0_finite_element_0_0();
+
+  /// Return a string identifying the finite element
+  virtual const char* signature() const;
+
+  /// Return the cell shape
+  virtual ufc::shape cell_shape() const;
+
+  /// Return the dimension of the finite element function space
+  virtual unsigned int space_dimension() const;
+
+  /// Return the rank of the value space
+  virtual unsigned int value_rank() const;
+
+  /// Return the dimension of the value space for axis i
+  virtual unsigned int value_dimension(unsigned int i) const;
+
+  /// Evaluate basis function i at given point in cell
+  virtual void evaluate_basis(unsigned int i,
+                              double* values,
+                              const double* coordinates,
+                              const ufc::cell& c) const;
+
+  /// Evaluate all basis functions at given point in cell
+  virtual void evaluate_basis_all(double* values,
+                                  const double* coordinates,
+                                  const ufc::cell& c) const;
+
+  /// Evaluate order n derivatives of basis function i at given point in cell
+  virtual void evaluate_basis_derivatives(unsigned int i,
+                                          unsigned int n,
+                                          double* values,
+                                          const double* coordinates,
+                                          const ufc::cell& c) const;
+
+  /// Evaluate order n derivatives of all basis functions at given point in cell
+  virtual void evaluate_basis_derivatives_all(unsigned int n,
+                                              double* values,
+                                              const double* coordinates,
+                                              const ufc::cell& c) const;
+
+  /// Evaluate linear functional for dof i on the function f
+  virtual double evaluate_dof(unsigned int i,
+                              const ufc::function& f,
+                              const ufc::cell& c) const;
+
+  /// Evaluate linear functionals for all dofs on the function f
+  virtual void evaluate_dofs(double* values,
+                             const ufc::function& f,
+                             const ufc::cell& c) const;
+
+  /// Interpolate vertex values from dof values
+  virtual void interpolate_vertex_values(double* vertex_values,
+                                         const double* dof_values,
+                                         const ufc::cell& c) const;
+
+  /// Return the number of sub elements (for a mixed element)
+  virtual unsigned int num_sub_elements() const;
+
+  /// Create a new finite element for sub element i (for a mixed element)
+  virtual ufc::finite_element* create_sub_element(unsigned int i) const;
+
+};
+
+/// This class defines the interface for a finite element.
+
+class magmaequations_0_finite_element_0_1: public ufc::finite_element
+{
+public:
+
+  /// Constructor
+  magmaequations_0_finite_element_0_1();
+
+  /// Destructor
+  virtual ~magmaequations_0_finite_element_0_1();
+
+  /// Return a string identifying the finite element
+  virtual const char* signature() const;
+
+  /// Return the cell shape
+  virtual ufc::shape cell_shape() const;
+
+  /// Return the dimension of the finite element function space
+  virtual unsigned int space_dimension() const;
+
+  /// Return the rank of the value space
+  virtual unsigned int value_rank() const;
+
+  /// Return the dimension of the value space for axis i
+  virtual unsigned int value_dimension(unsigned int i) const;
+
+  /// Evaluate basis function i at given point in cell
+  virtual void evaluate_basis(unsigned int i,
+                              double* values,
+                              const double* coordinates,
+                              const ufc::cell& c) const;
+
+  /// Evaluate all basis functions at given point in cell
+  virtual void evaluate_basis_all(double* values,
+                                  const double* coordinates,
+                                  const ufc::cell& c) const;
+
+  /// Evaluate order n derivatives of basis function i at given point in cell
+  virtual void evaluate_basis_derivatives(unsigned int i,
+                                          unsigned int n,
+                                          double* values,
+                                          const double* coordinates,
+                                          const ufc::cell& c) const;
+
+  /// Evaluate order n derivatives of all basis functions at given point in cell
+  virtual void evaluate_basis_derivatives_all(unsigned int n,
+                                              double* values,
+                                              const double* coordinates,
+                                              const ufc::cell& c) const;
+
+  /// Evaluate linear functional for dof i on the function f
+  virtual double evaluate_dof(unsigned int i,
+                              const ufc::function& f,
+                              const ufc::cell& c) const;
+
+  /// Evaluate linear functionals for all dofs on the function f
+  virtual void evaluate_dofs(double* values,
+                             const ufc::function& f,
+                             const ufc::cell& c) const;
+
+  /// Interpolate vertex values from dof values
+  virtual void interpolate_vertex_values(double* vertex_values,
+                                         const double* dof_values,
+                                         const ufc::cell& c) const;
+
+  /// Return the number of sub elements (for a mixed element)
+  virtual unsigned int num_sub_elements() const;
+
+  /// Create a new finite element for sub element i (for a mixed element)
+  virtual ufc::finite_element* create_sub_element(unsigned int i) const;
+
+};
+
+/// This class defines the interface for a finite element.
+
+class magmaequations_0_finite_element_0: public ufc::finite_element
+{
+public:
+
+  /// Constructor
+  magmaequations_0_finite_element_0();
+
+  /// Destructor
+  virtual ~magmaequations_0_finite_element_0();
+
+  /// Return a string identifying the finite element
+  virtual const char* signature() const;
+
+  /// Return the cell shape
+  virtual ufc::shape cell_shape() const;
+
+  /// Return the dimension of the finite element function space
+  virtual unsigned int space_dimension() const;
+
+  /// Return the rank of the value space
+  virtual unsigned int value_rank() const;
+
+  /// Return the dimension of the value space for axis i
+  virtual unsigned int value_dimension(unsigned int i) const;
+
+  /// Evaluate basis function i at given point in cell
+  virtual void evaluate_basis(unsigned int i,
+                              double* values,
+                              const double* coordinates,
+                              const ufc::cell& c) const;
+
+  /// Evaluate all basis functions at given point in cell
+  virtual void evaluate_basis_all(double* values,
+                                  const double* coordinates,
+                                  const ufc::cell& c) const;
+
+  /// Evaluate order n derivatives of basis function i at given point in cell
+  virtual void evaluate_basis_derivatives(unsigned int i,
+                                          unsigned int n,
+                                          double* values,
+                                          const double* coordinates,
+                                          const ufc::cell& c) const;
+
+  /// Evaluate order n derivatives of all basis functions at given point in cell
+  virtual void evaluate_basis_derivatives_all(unsigned int n,
+                                              double* values,
+                                              const double* coordinates,
+                                              const ufc::cell& c) const;
+
+  /// Evaluate linear functional for dof i on the function f
+  virtual double evaluate_dof(unsigned int i,
+                              const ufc::function& f,
+                              const ufc::cell& c) const;
+
+  /// Evaluate linear functionals for all dofs on the function f
+  virtual void evaluate_dofs(double* values,
+                             const ufc::function& f,
+                             const ufc::cell& c) const;
+
+  /// Interpolate vertex values from dof values
+  virtual void interpolate_vertex_values(double* vertex_values,
+                                         const double* dof_values,
+                                         const ufc::cell& c) const;
+
+  /// Return the number of sub elements (for a mixed element)
+  virtual unsigned int num_sub_elements() const;
+
+  /// Create a new finite element for sub element i (for a mixed element)
+  virtual ufc::finite_element* create_sub_element(unsigned int i) const;
+
+};
+
+/// This class defines the interface for a finite element.
+
+class magmaequations_0_finite_element_1_0: public ufc::finite_element
+{
+public:
+
+  /// Constructor
+  magmaequations_0_finite_element_1_0();
+
+  /// Destructor
+  virtual ~magmaequations_0_finite_element_1_0();
+
+  /// Return a string identifying the finite element
+  virtual const char* signature() const;
+
+  /// Return the cell shape
+  virtual ufc::shape cell_shape() const;
+
+  /// Return the dimension of the finite element function space
+  virtual unsigned int space_dimension() const;
+
+  /// Return the rank of the value space
+  virtual unsigned int value_rank() const;
+
+  /// Return the dimension of the value space for axis i
+  virtual unsigned int value_dimension(unsigned int i) const;
+
+  /// Evaluate basis function i at given point in cell
+  virtual void evaluate_basis(unsigned int i,
+                              double* values,
+                              const double* coordinates,
+                              const ufc::cell& c) const;
+
+  /// Evaluate all basis functions at given point in cell
+  virtual void evaluate_basis_all(double* values,
+                                  const double* coordinates,
+                                  const ufc::cell& c) const;
+
+  /// Evaluate order n derivatives of basis function i at given point in cell
+  virtual void evaluate_basis_derivatives(unsigned int i,
+                                          unsigned int n,
+                                          double* values,
+                                          const double* coordinates,
+                                          const ufc::cell& c) const;
+
+  /// Evaluate order n derivatives of all basis functions at given point in cell
+  virtual void evaluate_basis_derivatives_all(unsigned int n,
+                                              double* values,
+                                              const double* coordinates,
+                                              const ufc::cell& c) const;
+
+  /// Evaluate linear functional for dof i on the function f
+  virtual double evaluate_dof(unsigned int i,
+                              const ufc::function& f,
+                              const ufc::cell& c) const;
+
+  /// Evaluate linear functionals for all dofs on the function f
+  virtual void evaluate_dofs(double* values,
+                             const ufc::function& f,
+                             const ufc::cell& c) const;
+
+  /// Interpolate vertex values from dof values
+  virtual void interpolate_vertex_values(double* vertex_values,
+                                         const double* dof_values,
+                                         const ufc::cell& c) const;
+
+  /// Return the number of sub elements (for a mixed element)
+  virtual unsigned int num_sub_elements() const;
+
+  /// Create a new finite element for sub element i (for a mixed element)
+  virtual ufc::finite_element* create_sub_element(unsigned int i) const;
+
+};
+
+/// This class defines the interface for a finite element.
+
+class magmaequations_0_finite_element_1_1: public ufc::finite_element
+{
+public:
+
+  /// Constructor
+  magmaequations_0_finite_element_1_1();
+
+  /// Destructor
+  virtual ~magmaequations_0_finite_element_1_1();
+
+  /// Return a string identifying the finite element
+  virtual const char* signature() const;
+
+  /// Return the cell shape
+  virtual ufc::shape cell_shape() const;
+
+  /// Return the dimension of the finite element function space
+  virtual unsigned int space_dimension() const;
+
+  /// Return the rank of the value space
+  virtual unsigned int value_rank() const;
+
+  /// Return the dimension of the value space for axis i
+  virtual unsigned int value_dimension(unsigned int i) const;
+
+  /// Evaluate basis function i at given point in cell
+  virtual void evaluate_basis(unsigned int i,
+                              double* values,
+                              const double* coordinates,
+                              const ufc::cell& c) const;
+
+  /// Evaluate all basis functions at given point in cell
+  virtual void evaluate_basis_all(double* values,
+                                  const double* coordinates,
+                                  const ufc::cell& c) const;
+
+  /// Evaluate order n derivatives of basis function i at given point in cell
+  virtual void evaluate_basis_derivatives(unsigned int i,
+                                          unsigned int n,
+                                          double* values,
+                                          const double* coordinates,
+                                          const ufc::cell& c) const;
+
+  /// Evaluate order n derivatives of all basis functions at given point in cell
+  virtual void evaluate_basis_derivatives_all(unsigned int n,
+                                              double* values,
+                                              const double* coordinates,
+                                              const ufc::cell& c) const;
+
+  /// Evaluate linear functional for dof i on the function f
+  virtual double evaluate_dof(unsigned int i,
+                              const ufc::function& f,
+                              const ufc::cell& c) const;
+
+  /// Evaluate linear functionals for all dofs on the function f
+  virtual void evaluate_dofs(double* values,
+                             const ufc::function& f,
+                             const ufc::cell& c) const;
+
+  /// Interpolate vertex values from dof values
+  virtual void interpolate_vertex_values(double* vertex_values,
+                                         const double* dof_values,
+                                         const ufc::cell& c) const;
+
+  /// Return the number of sub elements (for a mixed element)
+  virtual unsigned int num_sub_elements() const;
+
+  /// Create a new finite element for sub element i (for a mixed element)
+  virtual ufc::finite_element* create_sub_element(unsigned int i) const;
+
+};
+
+/// This class defines the interface for a finite element.
+
+class magmaequations_0_finite_element_1: public ufc::finite_element
+{
+public:
+
+  /// Constructor
+  magmaequations_0_finite_element_1();
+
+  /// Destructor
+  virtual ~magmaequations_0_finite_element_1();
+
+  /// Return a string identifying the finite element
+  virtual const char* signature() const;
+
+  /// Return the cell shape
+  virtual ufc::shape cell_shape() const;
+
+  /// Return the dimension of the finite element function space
+  virtual unsigned int space_dimension() const;
+
+  /// Return the rank of the value space
+  virtual unsigned int value_rank() const;
+
+  /// Return the dimension of the value space for axis i
+  virtual unsigned int value_dimension(unsigned int i) const;
+
+  /// Evaluate basis function i at given point in cell
+  virtual void evaluate_basis(unsigned int i,
+                              double* values,
+                              const double* coordinates,
+                              const ufc::cell& c) const;
+
+  /// Evaluate all basis functions at given point in cell
+  virtual void evaluate_basis_all(double* values,
+                                  const double* coordinates,
+                                  const ufc::cell& c) const;
+
+  /// Evaluate order n derivatives of basis function i at given point in cell
+  virtual void evaluate_basis_derivatives(unsigned int i,
+                                          unsigned int n,
+                                          double* values,
+                                          const double* coordinates,
+                                          const ufc::cell& c) const;
+
+  /// Evaluate order n derivatives of all basis functions at given point in cell
+  virtual void evaluate_basis_derivatives_all(unsigned int n,
+                                              double* values,
+                                              const double* coordinates,
+                                              const ufc::cell& c) const;
+
+  /// Evaluate linear functional for dof i on the function f
+  virtual double evaluate_dof(unsigned int i,
+                              const ufc::function& f,
+                              const ufc::cell& c) const;
+
+  /// Evaluate linear functionals for all dofs on the function f
+  virtual void evaluate_dofs(double* values,
+                             const ufc::function& f,
+                             const ufc::cell& c) const;
+
+  /// Interpolate vertex values from dof values
+  virtual void interpolate_vertex_values(double* vertex_values,
+                                         const double* dof_values,
+                                         const ufc::cell& c) const;
+
+  /// Return the number of sub elements (for a mixed element)
+  virtual unsigned int num_sub_elements() const;
+
+  /// Create a new finite element for sub element i (for a mixed element)
+  virtual ufc::finite_element* create_sub_element(unsigned int i) const;
+
+};
+
+/// This class defines the interface for a finite element.
+
+class magmaequations_0_finite_element_2_0: public ufc::finite_element
+{
+public:
+
+  /// Constructor
+  magmaequations_0_finite_element_2_0();
+
+  /// Destructor
+  virtual ~magmaequations_0_finite_element_2_0();
+
+  /// Return a string identifying the finite element
+  virtual const char* signature() const;
+
+  /// Return the cell shape
+  virtual ufc::shape cell_shape() const;
+
+  /// Return the dimension of the finite element function space
+  virtual unsigned int space_dimension() const;
+
+  /// Return the rank of the value space
+  virtual unsigned int value_rank() const;
+
+  /// Return the dimension of the value space for axis i
+  virtual unsigned int value_dimension(unsigned int i) const;
+
+  /// Evaluate basis function i at given point in cell
+  virtual void evaluate_basis(unsigned int i,
+                              double* values,
+                              const double* coordinates,
+                              const ufc::cell& c) const;
+
+  /// Evaluate all basis functions at given point in cell
+  virtual void evaluate_basis_all(double* values,
+                                  const double* coordinates,
+                                  const ufc::cell& c) const;
+
+  /// Evaluate order n derivatives of basis function i at given point in cell
+  virtual void evaluate_basis_derivatives(unsigned int i,
+                                          unsigned int n,
+                                          double* values,
+                                          const double* coordinates,
+                                          const ufc::cell& c) const;
+
+  /// Evaluate order n derivatives of all basis functions at given point in cell
+  virtual void evaluate_basis_derivatives_all(unsigned int n,
+                                              double* values,
+                                              const double* coordinates,
+                                              const ufc::cell& c) const;
+
+  /// Evaluate linear functional for dof i on the function f
+  virtual double evaluate_dof(unsigned int i,
+                              const ufc::function& f,
+                              const ufc::cell& c) const;
+
+  /// Evaluate linear functionals for all dofs on the function f
+  virtual void evaluate_dofs(double* values,
+                             const ufc::function& f,
+                             const ufc::cell& c) const;
+
+  /// Interpolate vertex values from dof values
+  virtual void interpolate_vertex_values(double* vertex_values,
+                                         const double* dof_values,
+                                         const ufc::cell& c) const;
+
+  /// Return the number of sub elements (for a mixed element)
+  virtual unsigned int num_sub_elements() const;
+
+  /// Create a new finite element for sub element i (for a mixed element)
+  virtual ufc::finite_element* create_sub_element(unsigned int i) const;
+
+};
+
+/// This class defines the interface for a finite element.
+
+class magmaequations_0_finite_element_2_1: public ufc::finite_element
+{
+public:
+
+  /// Constructor
+  magmaequations_0_finite_element_2_1();
+
+  /// Destructor
+  virtual ~magmaequations_0_finite_element_2_1();
+
+  /// Return a string identifying the finite element
+  virtual const char* signature() const;
+
+  /// Return the cell shape
+  virtual ufc::shape cell_shape() const;
+
+  /// Return the dimension of the finite element function space
+  virtual unsigned int space_dimension() const;
+
+  /// Return the rank of the value space
+  virtual unsigned int value_rank() const;
+
+  /// Return the dimension of the value space for axis i
+  virtual unsigned int value_dimension(unsigned int i) const;
+
+  /// Evaluate basis function i at given point in cell
+  virtual void evaluate_basis(unsigned int i,
+                              double* values,
+                              const double* coordinates,
+                              const ufc::cell& c) const;
+
+  /// Evaluate all basis functions at given point in cell
+  virtual void evaluate_basis_all(double* values,
+                                  const double* coordinates,
+                                  const ufc::cell& c) const;
+
+  /// Evaluate order n derivatives of basis function i at given point in cell
+  virtual void evaluate_basis_derivatives(unsigned int i,
+                                          unsigned int n,
+                                          double* values,
+                                          const double* coordinates,
+                                          const ufc::cell& c) const;
+
+  /// Evaluate order n derivatives of all basis functions at given point in cell
+  virtual void evaluate_basis_derivatives_all(unsigned int n,
+                                              double* values,
+                                              const double* coordinates,
+                                              const ufc::cell& c) const;
+
+  /// Evaluate linear functional for dof i on the function f
+  virtual double evaluate_dof(unsigned int i,
+                              const ufc::function& f,
+                              const ufc::cell& c) const;
+
+  /// Evaluate linear functionals for all dofs on the function f
+  virtual void evaluate_dofs(double* values,
+                             const ufc::function& f,
+                             const ufc::cell& c) const;
+
+  /// Interpolate vertex values from dof values
+  virtual void interpolate_vertex_values(double* vertex_values,
+                                         const double* dof_values,
+                                         const ufc::cell& c) const;
+
+  /// Return the number of sub elements (for a mixed element)
+  virtual unsigned int num_sub_elements() const;
+
+  /// Create a new finite element for sub element i (for a mixed element)
+  virtual ufc::finite_element* create_sub_element(unsigned int i) const;
+
+};
+
+/// This class defines the interface for a finite element.
+
+class magmaequations_0_finite_element_2: public ufc::finite_element
+{
+public:
+
+  /// Constructor
+  magmaequations_0_finite_element_2();
+
+  /// Destructor
+  virtual ~magmaequations_0_finite_element_2();
+
+  /// Return a string identifying the finite element
+  virtual const char* signature() const;
+
+  /// Return the cell shape
+  virtual ufc::shape cell_shape() const;
+
+  /// Return the dimension of the finite element function space
+  virtual unsigned int space_dimension() const;
+
+  /// Return the rank of the value space
+  virtual unsigned int value_rank() const;
+
+  /// Return the dimension of the value space for axis i
+  virtual unsigned int value_dimension(unsigned int i) const;
+
+  /// Evaluate basis function i at given point in cell
+  virtual void evaluate_basis(unsigned int i,
+                              double* values,
+                              const double* coordinates,
+                              const ufc::cell& c) const;
+
+  /// Evaluate all basis functions at given point in cell
+  virtual void evaluate_basis_all(double* values,
+                                  const double* coordinates,
+                                  const ufc::cell& c) const;
+
+  /// Evaluate order n derivatives of basis function i at given point in cell
+  virtual void evaluate_basis_derivatives(unsigned int i,
+                                          unsigned int n,
+                                          double* values,
+                                          const double* coordinates,
+                                          const ufc::cell& c) const;
+
+  /// Evaluate order n derivatives of all basis functions at given point in cell
+  virtual void evaluate_basis_derivatives_all(unsigned int n,
+                                              double* values,
+                                              const double* coordinates,
+                                              const ufc::cell& c) const;
+
+  /// Evaluate linear functional for dof i on the function f
+  virtual double evaluate_dof(unsigned int i,
+                              const ufc::function& f,
+                              const ufc::cell& c) const;
+
+  /// Evaluate linear functionals for all dofs on the function f
+  virtual void evaluate_dofs(double* values,
+                             const ufc::function& f,
+                             const ufc::cell& c) const;
+
+  /// Interpolate vertex values from dof values
+  virtual void interpolate_vertex_values(double* vertex_values,
+                                         const double* dof_values,
+                                         const ufc::cell& c) const;
+
+  /// Return the number of sub elements (for a mixed element)
+  virtual unsigned int num_sub_elements() const;
+
+  /// Create a new finite element for sub element i (for a mixed element)
+  virtual ufc::finite_element* create_sub_element(unsigned int i) const;
+
+};
+
+/// This class defines the interface for a finite element.
+
+class magmaequations_0_finite_element_3: public ufc::finite_element
+{
+public:
+
+  /// Constructor
+  magmaequations_0_finite_element_3();
+
+  /// Destructor
+  virtual ~magmaequations_0_finite_element_3();
+
+  /// Return a string identifying the finite element
+  virtual const char* signature() const;
+
+  /// Return the cell shape
+  virtual ufc::shape cell_shape() const;
+
+  /// Return the dimension of the finite element function space
+  virtual unsigned int space_dimension() const;
+
+  /// Return the rank of the value space
+  virtual unsigned int value_rank() const;
+
+  /// Return the dimension of the value space for axis i
+  virtual unsigned int value_dimension(unsigned int i) const;
+
+  /// Evaluate basis function i at given point in cell
+  virtual void evaluate_basis(unsigned int i,
+                              double* values,
+                              const double* coordinates,
+                              const ufc::cell& c) const;
+
+  /// Evaluate all basis functions at given point in cell
+  virtual void evaluate_basis_all(double* values,
+                                  const double* coordinates,
+                                  const ufc::cell& c) const;
+
+  /// Evaluate order n derivatives of basis function i at given point in cell
+  virtual void evaluate_basis_derivatives(unsigned int i,
+                                          unsigned int n,
+                                          double* values,
+                                          const double* coordinates,
+                                          const ufc::cell& c) const;
+
+  /// Evaluate order n derivatives of all basis functions at given point in cell
+  virtual void evaluate_basis_derivatives_all(unsigned int n,
+                                              double* values,
+                                              const double* coordinates,
+                                              const ufc::cell& c) const;
+
+  /// Evaluate linear functional for dof i on the function f
+  virtual double evaluate_dof(unsigned int i,
+                              const ufc::function& f,
+                              const ufc::cell& c) const;
+
+  /// Evaluate linear functionals for all dofs on the function f
+  virtual void evaluate_dofs(double* values,
+                             const ufc::function& f,
+                             const ufc::cell& c) const;
+
+  /// Interpolate vertex values from dof values
+  virtual void interpolate_vertex_values(double* vertex_values,
+                                         const double* dof_values,
+                                         const ufc::cell& c) const;
+
+  /// Return the number of sub elements (for a mixed element)
+  virtual unsigned int num_sub_elements() const;
+
+  /// Create a new finite element for sub element i (for a mixed element)
+  virtual ufc::finite_element* create_sub_element(unsigned int i) const;
+
+};
+
+/// This class defines the interface for a finite element.
+
+class magmaequations_0_finite_element_4: public ufc::finite_element
+{
+public:
+
+  /// Constructor
+  magmaequations_0_finite_element_4();
+
+  /// Destructor
+  virtual ~magmaequations_0_finite_element_4();
+
+  /// Return a string identifying the finite element
+  virtual const char* signature() const;
+
+  /// Return the cell shape
+  virtual ufc::shape cell_shape() const;
+
+  /// Return the dimension of the finite element function space
+  virtual unsigned int space_dimension() const;
+
+  /// Return the rank of the value space
+  virtual unsigned int value_rank() const;
+
+  /// Return the dimension of the value space for axis i
+  virtual unsigned int value_dimension(unsigned int i) const;
+
+  /// Evaluate basis function i at given point in cell
+  virtual void evaluate_basis(unsigned int i,
+                              double* values,
+                              const double* coordinates,
+                              const ufc::cell& c) const;
+
+  /// Evaluate all basis functions at given point in cell
+  virtual void evaluate_basis_all(double* values,
+                                  const double* coordinates,
+                                  const ufc::cell& c) const;
+
+  /// Evaluate order n derivatives of basis function i at given point in cell
+  virtual void evaluate_basis_derivatives(unsigned int i,
+                                          unsigned int n,
+                                          double* values,
+                                          const double* coordinates,
+                                          const ufc::cell& c) const;
+
+  /// Evaluate order n derivatives of all basis functions at given point in cell
+  virtual void evaluate_basis_derivatives_all(unsigned int n,
+                                              double* values,
+                                              const double* coordinates,
+                                              const ufc::cell& c) const;
+
+  /// Evaluate linear functional for dof i on the function f
+  virtual double evaluate_dof(unsigned int i,
+                              const ufc::function& f,
+                              const ufc::cell& c) const;
+
+  /// Evaluate linear functionals for all dofs on the function f
+  virtual void evaluate_dofs(double* values,
+                             const ufc::function& f,
+                             const ufc::cell& c) const;
+
+  /// Interpolate vertex values from dof values
+  virtual void interpolate_vertex_values(double* vertex_values,
+                                         const double* dof_values,
+                                         const ufc::cell& c) const;
+
+  /// Return the number of sub elements (for a mixed element)
+  virtual unsigned int num_sub_elements() const;
+
+  /// Create a new finite element for sub element i (for a mixed element)
+  virtual ufc::finite_element* create_sub_element(unsigned int i) const;
+
+};
+
+/// This class defines the interface for a finite element.
+
+class magmaequations_0_finite_element_5: public ufc::finite_element
+{
+public:
+
+  /// Constructor
+  magmaequations_0_finite_element_5();
+
+  /// Destructor
+  virtual ~magmaequations_0_finite_element_5();
+
+  /// Return a string identifying the finite element
+  virtual const char* signature() const;
+
+  /// Return the cell shape
+  virtual ufc::shape cell_shape() const;
+
+  /// Return the dimension of the finite element function space
+  virtual unsigned int space_dimension() const;
+
+  /// Return the rank of the value space
+  virtual unsigned int value_rank() const;
+
+  /// Return the dimension of the value space for axis i
+  virtual unsigned int value_dimension(unsigned int i) const;
+
+  /// Evaluate basis function i at given point in cell
+  virtual void evaluate_basis(unsigned int i,
+                              double* values,
+                              const double* coordinates,
+                              const ufc::cell& c) const;
+
+  /// Evaluate all basis functions at given point in cell
+  virtual void evaluate_basis_all(double* values,
+                                  const double* coordinates,
+                                  const ufc::cell& c) const;
+
+  /// Evaluate order n derivatives of basis function i at given point in cell
+  virtual void evaluate_basis_derivatives(unsigned int i,
+                                          unsigned int n,
+                                          double* values,
+                                          const double* coordinates,
+                                          const ufc::cell& c) const;
+
+  /// Evaluate order n derivatives of all basis functions at given point in cell
+  virtual void evaluate_basis_derivatives_all(unsigned int n,
+                                              double* values,
+                                              const double* coordinates,
+                                              const ufc::cell& c) const;
+
+  /// Evaluate linear functional for dof i on the function f
+  virtual double evaluate_dof(unsigned int i,
+                              const ufc::function& f,
+                              const ufc::cell& c) const;
+
+  /// Evaluate linear functionals for all dofs on the function f
+  virtual void evaluate_dofs(double* values,
+                             const ufc::function& f,
+                             const ufc::cell& c) const;
+
+  /// Interpolate vertex values from dof values
+  virtual void interpolate_vertex_values(double* vertex_values,
+                                         const double* dof_values,
+                                         const ufc::cell& c) const;
+
+  /// Return the number of sub elements (for a mixed element)
+  virtual unsigned int num_sub_elements() const;
+
+  /// Create a new finite element for sub element i (for a mixed element)
+  virtual ufc::finite_element* create_sub_element(unsigned int i) const;
+
+};
+
+/// This class defines the interface for a finite element.
+
+class magmaequations_0_finite_element_6: public ufc::finite_element
+{
+public:
+
+  /// Constructor
+  magmaequations_0_finite_element_6();
+
+  /// Destructor
+  virtual ~magmaequations_0_finite_element_6();
+
+  /// Return a string identifying the finite element
+  virtual const char* signature() const;
+
+  /// Return the cell shape
+  virtual ufc::shape cell_shape() const;
+
+  /// Return the dimension of the finite element function space
+  virtual unsigned int space_dimension() const;
+
+  /// Return the rank of the value space
+  virtual unsigned int value_rank() const;
+
+  /// Return the dimension of the value space for axis i
+  virtual unsigned int value_dimension(unsigned int i) const;
+
+  /// Evaluate basis function i at given point in cell
+  virtual void evaluate_basis(unsigned int i,
+                              double* values,
+                              const double* coordinates,
+                              const ufc::cell& c) const;
+
+  /// Evaluate all basis functions at given point in cell
+  virtual void evaluate_basis_all(double* values,
+                                  const double* coordinates,
+                                  const ufc::cell& c) const;
+
+  /// Evaluate order n derivatives of basis function i at given point in cell
+  virtual void evaluate_basis_derivatives(unsigned int i,
+                                          unsigned int n,
+                                          double* values,
+                                          const double* coordinates,
+                                          const ufc::cell& c) const;
+
+  /// Evaluate order n derivatives of all basis functions at given point in cell
+  virtual void evaluate_basis_derivatives_all(unsigned int n,
+                                              double* values,
+                                              const double* coordinates,
+                                              const ufc::cell& c) const;
+
+  /// Evaluate linear functional for dof i on the function f
+  virtual double evaluate_dof(unsigned int i,
+                              const ufc::function& f,
+                              const ufc::cell& c) const;
+
+  /// Evaluate linear functionals for all dofs on the function f
+  virtual void evaluate_dofs(double* values,
+                             const ufc::function& f,
+                             const ufc::cell& c) const;
+
+  /// Interpolate vertex values from dof values
+  virtual void interpolate_vertex_values(double* vertex_values,
+                                         const double* dof_values,
+                                         const ufc::cell& c) const;
+
+  /// Return the number of sub elements (for a mixed element)
+  virtual unsigned int num_sub_elements() const;
+
+  /// Create a new finite element for sub element i (for a mixed element)
+  virtual ufc::finite_element* create_sub_element(unsigned int i) const;
+
+};
+
+/// This class defines the interface for a finite element.
+
+class magmaequations_0_finite_element_7: public ufc::finite_element
+{
+public:
+
+  /// Constructor
+  magmaequations_0_finite_element_7();
+
+  /// Destructor
+  virtual ~magmaequations_0_finite_element_7();
+
+  /// Return a string identifying the finite element
+  virtual const char* signature() const;
+
+  /// Return the cell shape
+  virtual ufc::shape cell_shape() const;
+
+  /// Return the dimension of the finite element function space
+  virtual unsigned int space_dimension() const;
+
+  /// Return the rank of the value space
+  virtual unsigned int value_rank() const;
+
+  /// Return the dimension of the value space for axis i
+  virtual unsigned int value_dimension(unsigned int i) const;
+
+  /// Evaluate basis function i at given point in cell
+  virtual void evaluate_basis(unsigned int i,
+                              double* values,
+                              const double* coordinates,
+                              const ufc::cell& c) const;
+
+  /// Evaluate all basis functions at given point in cell
+  virtual void evaluate_basis_all(double* values,
+                                  const double* coordinates,
+                                  const ufc::cell& c) const;
+
+  /// Evaluate order n derivatives of basis function i at given point in cell
+  virtual void evaluate_basis_derivatives(unsigned int i,
+                                          unsigned int n,
+                                          double* values,
+                                          const double* coordinates,
+                                          const ufc::cell& c) const;
+
+  /// Evaluate order n derivatives of all basis functions at given point in cell
+  virtual void evaluate_basis_derivatives_all(unsigned int n,
+                                              double* values,
+                                              const double* coordinates,
+                                              const ufc::cell& c) const;
+
+  /// Evaluate linear functional for dof i on the function f
+  virtual double evaluate_dof(unsigned int i,
+                              const ufc::function& f,
+                              const ufc::cell& c) const;
+
+  /// Evaluate linear functionals for all dofs on the function f
+  virtual void evaluate_dofs(double* values,
+                             const ufc::function& f,
+                             const ufc::cell& c) const;
+
+  /// Interpolate vertex values from dof values
+  virtual void interpolate_vertex_values(double* vertex_values,
+                                         const double* dof_values,
+                                         const ufc::cell& c) const;
+
+  /// Return the number of sub elements (for a mixed element)
+  virtual unsigned int num_sub_elements() const;
+
+  /// Create a new finite element for sub element i (for a mixed element)
+  virtual ufc::finite_element* create_sub_element(unsigned int i) const;
+
+};
+
+/// This class defines the interface for a local-to-global mapping of
+/// degrees of freedom (dofs).
+
+class magmaequations_0_dof_map_0_0: public ufc::dof_map
+{
+private:
+
+  unsigned int __global_dimension;
+
+public:
+
+  /// Constructor
+  magmaequations_0_dof_map_0_0();
+
+  /// Destructor
+  virtual ~magmaequations_0_dof_map_0_0();
+
+  /// Return a string identifying the dof map
+  virtual const char* signature() const;
+
+  /// Return true iff mesh entities of topological dimension d are needed
+  virtual bool needs_mesh_entities(unsigned int d) const;
+
+  /// Initialize dof map for mesh (return true iff init_cell() is needed)
+  virtual bool init_mesh(const ufc::mesh& m);
+
+  /// Initialize dof map for given cell
+  virtual void init_cell(const ufc::mesh& m,
+                         const ufc::cell& c);
+
+  /// Finish initialization of dof map for cells
+  virtual void init_cell_finalize();
+
+  /// Return the dimension of the global finite element function space
+  virtual unsigned int global_dimension() const;
+
+  /// Return the dimension of the local finite element function space for a cell
+  virtual unsigned int local_dimension(const ufc::cell& c) const;
+
+  /// Return the maximum dimension of the local finite element function space
+  virtual unsigned int max_local_dimension() const;
+
+  // Return the geometric dimension of the coordinates this dof map provides
+  virtual unsigned int geometric_dimension() const;
+
+  /// Return the number of dofs on each cell facet
+  virtual unsigned int num_facet_dofs() const;
+
+  /// Return the number of dofs associated with each cell entity of dimension d
+  virtual unsigned int num_entity_dofs(unsigned int d) const;
+
+  /// Tabulate the local-to-global mapping of dofs on a cell
+  virtual void tabulate_dofs(unsigned int* dofs,
+                             const ufc::mesh& m,
+                             const ufc::cell& c) const;
+
+  /// Tabulate the local-to-local mapping from facet dofs to cell dofs
+  virtual void tabulate_facet_dofs(unsigned int* dofs,
+                                   unsigned int facet) const;
+
+  /// Tabulate the local-to-local mapping of dofs on entity (d, i)
+  virtual void tabulate_entity_dofs(unsigned int* dofs,
+                                    unsigned int d, unsigned int i) const;
+
+  /// Tabulate the coordinates of all dofs on a cell
+  virtual void tabulate_coordinates(double** coordinates,
+                                    const ufc::cell& c) const;
+
+  /// Return the number of sub dof maps (for a mixed element)
+  virtual unsigned int num_sub_dof_maps() const;
+
+  /// Create a new dof_map for sub dof map i (for a mixed element)
+  virtual ufc::dof_map* create_sub_dof_map(unsigned int i) const;
+
+};
+
+/// This class defines the interface for a local-to-global mapping of
+/// degrees of freedom (dofs).
+
+class magmaequations_0_dof_map_0_1: public ufc::dof_map
+{
+private:
+
+  unsigned int __global_dimension;
+
+public:
+
+  /// Constructor
+  magmaequations_0_dof_map_0_1();
+
+  /// Destructor
+  virtual ~magmaequations_0_dof_map_0_1();
+
+  /// Return a string identifying the dof map
+  virtual const char* signature() const;
+
+  /// Return true iff mesh entities of topological dimension d are needed
+  virtual bool needs_mesh_entities(unsigned int d) const;
+
+  /// Initialize dof map for mesh (return true iff init_cell() is needed)
+  virtual bool init_mesh(const ufc::mesh& m);
+
+  /// Initialize dof map for given cell
+  virtual void init_cell(const ufc::mesh& m,
+                         const ufc::cell& c);
+
+  /// Finish initialization of dof map for cells
+  virtual void init_cell_finalize();
+
+  /// Return the dimension of the global finite element function space
+  virtual unsigned int global_dimension() const;
+
+  /// Return the dimension of the local finite element function space for a cell
+  virtual unsigned int local_dimension(const ufc::cell& c) const;
+
+  /// Return the maximum dimension of the local finite element function space
+  virtual unsigned int max_local_dimension() const;
+
+  // Return the geometric dimension of the coordinates this dof map provides
+  virtual unsigned int geometric_dimension() const;
+
+  /// Return the number of dofs on each cell facet
+  virtual unsigned int num_facet_dofs() const;
+
+  /// Return the number of dofs associated with each cell entity of dimension d
+  virtual unsigned int num_entity_dofs(unsigned int d) const;
+
+  /// Tabulate the local-to-global mapping of dofs on a cell
+  virtual void tabulate_dofs(unsigned int* dofs,
+                             const ufc::mesh& m,
+                             const ufc::cell& c) const;
+
+  /// Tabulate the local-to-local mapping from facet dofs to cell dofs
+  virtual void tabulate_facet_dofs(unsigned int* dofs,
+                                   unsigned int facet) const;
+
+  /// Tabulate the local-to-local mapping of dofs on entity (d, i)
+  virtual void tabulate_entity_dofs(unsigned int* dofs,
+                                    unsigned int d, unsigned int i) const;
+
+  /// Tabulate the coordinates of all dofs on a cell
+  virtual void tabulate_coordinates(double** coordinates,
+                                    const ufc::cell& c) const;
+
+  /// Return the number of sub dof maps (for a mixed element)
+  virtual unsigned int num_sub_dof_maps() const;
+
+  /// Create a new dof_map for sub dof map i (for a mixed element)
+  virtual ufc::dof_map* create_sub_dof_map(unsigned int i) const;
+
+};
+
+/// This class defines the interface for a local-to-global mapping of
+/// degrees of freedom (dofs).
+
+class magmaequations_0_dof_map_0: public ufc::dof_map
+{
+private:
+
+  unsigned int __global_dimension;
+
+public:
+
+  /// Constructor
+  magmaequations_0_dof_map_0();
+
+  /// Destructor
+  virtual ~magmaequations_0_dof_map_0();
+
+  /// Return a string identifying the dof map
+  virtual const char* signature() const;
+
+  /// Return true iff mesh entities of topological dimension d are needed
+  virtual bool needs_mesh_entities(unsigned int d) const;
+
+  /// Initialize dof map for mesh (return true iff init_cell() is needed)
+  virtual bool init_mesh(const ufc::mesh& m);
+
+  /// Initialize dof map for given cell
+  virtual void init_cell(const ufc::mesh& m,
+                         const ufc::cell& c);
+
+  /// Finish initialization of dof map for cells
+  virtual void init_cell_finalize();
+
+  /// Return the dimension of the global finite element function space
+  virtual unsigned int global_dimension() const;
+
+  /// Return the dimension of the local finite element function space for a cell
+  virtual unsigned int local_dimension(const ufc::cell& c) const;
+
+  /// Return the maximum dimension of the local finite element function space
+  virtual unsigned int max_local_dimension() const;
+
+  // Return the geometric dimension of the coordinates this dof map provides
+  virtual unsigned int geometric_dimension() const;
+
+  /// Return the number of dofs on each cell facet
+  virtual unsigned int num_facet_dofs() const;
+
+  /// Return the number of dofs associated with each cell entity of dimension d
+  virtual unsigned int num_entity_dofs(unsigned int d) const;
+
+  /// Tabulate the local-to-global mapping of dofs on a cell
+  virtual void tabulate_dofs(unsigned int* dofs,
+                             const ufc::mesh& m,
+                             const ufc::cell& c) const;
+
+  /// Tabulate the local-to-local mapping from facet dofs to cell dofs
+  virtual void tabulate_facet_dofs(unsigned int* dofs,
+                                   unsigned int facet) const;
+
+  /// Tabulate the local-to-local mapping of dofs on entity (d, i)
+  virtual void tabulate_entity_dofs(unsigned int* dofs,
+                                    unsigned int d, unsigned int i) const;
+
+  /// Tabulate the coordinates of all dofs on a cell
+  virtual void tabulate_coordinates(double** coordinates,
+                                    const ufc::cell& c) const;
+
+  /// Return the number of sub dof maps (for a mixed element)
+  virtual unsigned int num_sub_dof_maps() const;
+
+  /// Create a new dof_map for sub dof map i (for a mixed element)
+  virtual ufc::dof_map* create_sub_dof_map(unsigned int i) const;
+
+};
+
+/// This class defines the interface for a local-to-global mapping of
+/// degrees of freedom (dofs).
+
+class magmaequations_0_dof_map_1_0: public ufc::dof_map
+{
+private:
+
+  unsigned int __global_dimension;
+
+public:
+
+  /// Constructor
+  magmaequations_0_dof_map_1_0();
+
+  /// Destructor
+  virtual ~magmaequations_0_dof_map_1_0();
+
+  /// Return a string identifying the dof map
+  virtual const char* signature() const;
+
+  /// Return true iff mesh entities of topological dimension d are needed
+  virtual bool needs_mesh_entities(unsigned int d) const;
+
+  /// Initialize dof map for mesh (return true iff init_cell() is needed)
+  virtual bool init_mesh(const ufc::mesh& m);
+
+  /// Initialize dof map for given cell
+  virtual void init_cell(const ufc::mesh& m,
+                         const ufc::cell& c);
+
+  /// Finish initialization of dof map for cells
+  virtual void init_cell_finalize();
+
+  /// Return the dimension of the global finite element function space
+  virtual unsigned int global_dimension() const;
+
+  /// Return the dimension of the local finite element function space for a cell
+  virtual unsigned int local_dimension(const ufc::cell& c) const;
+
+  /// Return the maximum dimension of the local finite element function space
+  virtual unsigned int max_local_dimension() const;
+
+  // Return the geometric dimension of the coordinates this dof map provides
+  virtual unsigned int geometric_dimension() const;
+
+  /// Return the number of dofs on each cell facet
+  virtual unsigned int num_facet_dofs() const;
+
+  /// Return the number of dofs associated with each cell entity of dimension d
+  virtual unsigned int num_entity_dofs(unsigned int d) const;
+
+  /// Tabulate the local-to-global mapping of dofs on a cell
+  virtual void tabulate_dofs(unsigned int* dofs,
+                             const ufc::mesh& m,
+                             const ufc::cell& c) const;
+
+  /// Tabulate the local-to-local mapping from facet dofs to cell dofs
+  virtual void tabulate_facet_dofs(unsigned int* dofs,
+                                   unsigned int facet) const;
+
+  /// Tabulate the local-to-local mapping of dofs on entity (d, i)
+  virtual void tabulate_entity_dofs(unsigned int* dofs,
+                                    unsigned int d, unsigned int i) const;
+
+  /// Tabulate the coordinates of all dofs on a cell
+  virtual void tabulate_coordinates(double** coordinates,
+                                    const ufc::cell& c) const;
+
+  /// Return the number of sub dof maps (for a mixed element)
+  virtual unsigned int num_sub_dof_maps() const;
+
+  /// Create a new dof_map for sub dof map i (for a mixed element)
+  virtual ufc::dof_map* create_sub_dof_map(unsigned int i) const;
+
+};
+
+/// This class defines the interface for a local-to-global mapping of
+/// degrees of freedom (dofs).
+
+class magmaequations_0_dof_map_1_1: public ufc::dof_map
+{
+private:
+
+  unsigned int __global_dimension;
+
+public:
+
+  /// Constructor
+  magmaequations_0_dof_map_1_1();
+
+  /// Destructor
+  virtual ~magmaequations_0_dof_map_1_1();
+
+  /// Return a string identifying the dof map
+  virtual const char* signature() const;
+
+  /// Return true iff mesh entities of topological dimension d are needed
+  virtual bool needs_mesh_entities(unsigned int d) const;
+
+  /// Initialize dof map for mesh (return true iff init_cell() is needed)
+  virtual bool init_mesh(const ufc::mesh& m);
+
+  /// Initialize dof map for given cell
+  virtual void init_cell(const ufc::mesh& m,
+                         const ufc::cell& c);
+
+  /// Finish initialization of dof map for cells
+  virtual void init_cell_finalize();
+
+  /// Return the dimension of the global finite element function space
+  virtual unsigned int global_dimension() const;
+
+  /// Return the dimension of the local finite element function space for a cell
+  virtual unsigned int local_dimension(const ufc::cell& c) const;
+
+  /// Return the maximum dimension of the local finite element function space
+  virtual unsigned int max_local_dimension() const;
+
+  // Return the geometric dimension of the coordinates this dof map provides
+  virtual unsigned int geometric_dimension() const;
+
+  /// Return the number of dofs on each cell facet
+  virtual unsigned int num_facet_dofs() const;
+
+  /// Return the number of dofs associated with each cell entity of dimension d
+  virtual unsigned int num_entity_dofs(unsigned int d) const;
+
+  /// Tabulate the local-to-global mapping of dofs on a cell
+  virtual void tabulate_dofs(unsigned int* dofs,
+                             const ufc::mesh& m,
+                             const ufc::cell& c) const;
+
+  /// Tabulate the local-to-local mapping from facet dofs to cell dofs
+  virtual void tabulate_facet_dofs(unsigned int* dofs,
+                                   unsigned int facet) const;
+
+  /// Tabulate the local-to-local mapping of dofs on entity (d, i)
+  virtual void tabulate_entity_dofs(unsigned int* dofs,
+                                    unsigned int d, unsigned int i) const;
+
+  /// Tabulate the coordinates of all dofs on a cell
+  virtual void tabulate_coordinates(double** coordinates,
+                                    const ufc::cell& c) const;
+
+  /// Return the number of sub dof maps (for a mixed element)
+  virtual unsigned int num_sub_dof_maps() const;
+
+  /// Create a new dof_map for sub dof map i (for a mixed element)
+  virtual ufc::dof_map* create_sub_dof_map(unsigned int i) const;
+
+};
+
+/// This class defines the interface for a local-to-global mapping of
+/// degrees of freedom (dofs).
+
+class magmaequations_0_dof_map_1: public ufc::dof_map
+{
+private:
+
+  unsigned int __global_dimension;
+
+public:
+
+  /// Constructor
+  magmaequations_0_dof_map_1();
+
+  /// Destructor
+  virtual ~magmaequations_0_dof_map_1();
+
+  /// Return a string identifying the dof map
+  virtual const char* signature() const;
+
+  /// Return true iff mesh entities of topological dimension d are needed
+  virtual bool needs_mesh_entities(unsigned int d) const;
+
+  /// Initialize dof map for mesh (return true iff init_cell() is needed)
+  virtual bool init_mesh(const ufc::mesh& m);
+
+  /// Initialize dof map for given cell
+  virtual void init_cell(const ufc::mesh& m,
+                         const ufc::cell& c);
+
+  /// Finish initialization of dof map for cells
+  virtual void init_cell_finalize();
+
+  /// Return the dimension of the global finite element function space
+  virtual unsigned int global_dimension() const;
+
+  /// Return the dimension of the local finite element function space for a cell
+  virtual unsigned int local_dimension(const ufc::cell& c) const;
+
+  /// Return the maximum dimension of the local finite element function space
+  virtual unsigned int max_local_dimension() const;
+
+  // Return the geometric dimension of the coordinates this dof map provides
+  virtual unsigned int geometric_dimension() const;
+
+  /// Return the number of dofs on each cell facet
+  virtual unsigned int num_facet_dofs() const;
+
+  /// Return the number of dofs associated with each cell entity of dimension d
+  virtual unsigned int num_entity_dofs(unsigned int d) const;
+
+  /// Tabulate the local-to-global mapping of dofs on a cell
+  virtual void tabulate_dofs(unsigned int* dofs,
+                             const ufc::mesh& m,
+                             const ufc::cell& c) const;
+
+  /// Tabulate the local-to-local mapping from facet dofs to cell dofs
+  virtual void tabulate_facet_dofs(unsigned int* dofs,
+                                   unsigned int facet) const;
+
+  /// Tabulate the local-to-local mapping of dofs on entity (d, i)
+  virtual void tabulate_entity_dofs(unsigned int* dofs,
+                                    unsigned int d, unsigned int i) const;
+
+  /// Tabulate the coordinates of all dofs on a cell
+  virtual void tabulate_coordinates(double** coordinates,
+                                    const ufc::cell& c) const;
+
+  /// Return the number of sub dof maps (for a mixed element)
+  virtual unsigned int num_sub_dof_maps() const;
+
+  /// Create a new dof_map for sub dof map i (for a mixed element)
+  virtual ufc::dof_map* create_sub_dof_map(unsigned int i) const;
+
+};
+
+/// This class defines the interface for a local-to-global mapping of
+/// degrees of freedom (dofs).
+
+class magmaequations_0_dof_map_2_0: public ufc::dof_map
+{
+private:
+
+  unsigned int __global_dimension;
+
+public:
+
+  /// Constructor
+  magmaequations_0_dof_map_2_0();
+
+  /// Destructor
+  virtual ~magmaequations_0_dof_map_2_0();
+
+  /// Return a string identifying the dof map
+  virtual const char* signature() const;
+
+  /// Return true iff mesh entities of topological dimension d are needed
+  virtual bool needs_mesh_entities(unsigned int d) const;
+
+  /// Initialize dof map for mesh (return true iff init_cell() is needed)
+  virtual bool init_mesh(const ufc::mesh& m);
+
+  /// Initialize dof map for given cell
+  virtual void init_cell(const ufc::mesh& m,
+                         const ufc::cell& c);
+
+  /// Finish initialization of dof map for cells
+  virtual void init_cell_finalize();
+
+  /// Return the dimension of the global finite element function space
+  virtual unsigned int global_dimension() const;
+
+  /// Return the dimension of the local finite element function space for a cell
+  virtual unsigned int local_dimension(const ufc::cell& c) const;
+
+  /// Return the maximum dimension of the local finite element function space
+  virtual unsigned int max_local_dimension() const;
+
+  // Return the geometric dimension of the coordinates this dof map provides
+  virtual unsigned int geometric_dimension() const;
+
+  /// Return the number of dofs on each cell facet
+  virtual unsigned int num_facet_dofs() const;
+
+  /// Return the number of dofs associated with each cell entity of dimension d
+  virtual unsigned int num_entity_dofs(unsigned int d) const;
+
+  /// Tabulate the local-to-global mapping of dofs on a cell
+  virtual void tabulate_dofs(unsigned int* dofs,
+                             const ufc::mesh& m,
+                             const ufc::cell& c) const;
+
+  /// Tabulate the local-to-local mapping from facet dofs to cell dofs
+  virtual void tabulate_facet_dofs(unsigned int* dofs,
+                                   unsigned int facet) const;
+
+  /// Tabulate the local-to-local mapping of dofs on entity (d, i)
+  virtual void tabulate_entity_dofs(unsigned int* dofs,
+                                    unsigned int d, unsigned int i) const;
+
+  /// Tabulate the coordinates of all dofs on a cell
+  virtual void tabulate_coordinates(double** coordinates,
+                                    const ufc::cell& c) const;
+
+  /// Return the number of sub dof maps (for a mixed element)
+  virtual unsigned int num_sub_dof_maps() const;
+
+  /// Create a new dof_map for sub dof map i (for a mixed element)
+  virtual ufc::dof_map* create_sub_dof_map(unsigned int i) const;
+
+};
+
+/// This class defines the interface for a local-to-global mapping of
+/// degrees of freedom (dofs).
+
+class magmaequations_0_dof_map_2_1: public ufc::dof_map
+{
+private:
+
+  unsigned int __global_dimension;
+
+public:
+
+  /// Constructor
+  magmaequations_0_dof_map_2_1();
+
+  /// Destructor
+  virtual ~magmaequations_0_dof_map_2_1();
+
+  /// Return a string identifying the dof map
+  virtual const char* signature() const;
+
+  /// Return true iff mesh entities of topological dimension d are needed
+  virtual bool needs_mesh_entities(unsigned int d) const;
+
+  /// Initialize dof map for mesh (return true iff init_cell() is needed)
+  virtual bool init_mesh(const ufc::mesh& m);
+
+  /// Initialize dof map for given cell
+  virtual void init_cell(const ufc::mesh& m,
+                         const ufc::cell& c);
+
+  /// Finish initialization of dof map for cells
+  virtual void init_cell_finalize();
+
+  /// Return the dimension of the global finite element function space
+  virtual unsigned int global_dimension() const;
+
+  /// Return the dimension of the local finite element function space for a cell
+  virtual unsigned int local_dimension(const ufc::cell& c) const;
+
+  /// Return the maximum dimension of the local finite element function space
+  virtual unsigned int max_local_dimension() const;
+
+  // Return the geometric dimension of the coordinates this dof map provides
+  virtual unsigned int geometric_dimension() const;
+
+  /// Return the number of dofs on each cell facet
+  virtual unsigned int num_facet_dofs() const;
+
+  /// Return the number of dofs associated with each cell entity of dimension d
+  virtual unsigned int num_entity_dofs(unsigned int d) const;
+
+  /// Tabulate the local-to-global mapping of dofs on a cell
+  virtual void tabulate_dofs(unsigned int* dofs,
+                             const ufc::mesh& m,
+                             const ufc::cell& c) const;
+
+  /// Tabulate the local-to-local mapping from facet dofs to cell dofs
+  virtual void tabulate_facet_dofs(unsigned int* dofs,
+                                   unsigned int facet) const;
+
+  /// Tabulate the local-to-local mapping of dofs on entity (d, i)
+  virtual void tabulate_entity_dofs(unsigned int* dofs,
+                                    unsigned int d, unsigned int i) const;
+
+  /// Tabulate the coordinates of all dofs on a cell
+  virtual void tabulate_coordinates(double** coordinates,
+                                    const ufc::cell& c) const;
+
+  /// Return the number of sub dof maps (for a mixed element)
+  virtual unsigned int num_sub_dof_maps() const;
+
+  /// Create a new dof_map for sub dof map i (for a mixed element)
+  virtual ufc::dof_map* create_sub_dof_map(unsigned int i) const;
+
+};
+
+/// This class defines the interface for a local-to-global mapping of
+/// degrees of freedom (dofs).
+
+class magmaequations_0_dof_map_2: public ufc::dof_map
+{
+private:
+
+  unsigned int __global_dimension;
+
+public:
+
+  /// Constructor
+  magmaequations_0_dof_map_2();
+
+  /// Destructor
+  virtual ~magmaequations_0_dof_map_2();
+
+  /// Return a string identifying the dof map
+  virtual const char* signature() const;
+
+  /// Return true iff mesh entities of topological dimension d are needed
+  virtual bool needs_mesh_entities(unsigned int d) const;
+
+  /// Initialize dof map for mesh (return true iff init_cell() is needed)
+  virtual bool init_mesh(const ufc::mesh& m);
+
+  /// Initialize dof map for given cell
+  virtual void init_cell(const ufc::mesh& m,
+                         const ufc::cell& c);
+
+  /// Finish initialization of dof map for cells
+  virtual void init_cell_finalize();
+
+  /// Return the dimension of the global finite element function space
+  virtual unsigned int global_dimension() const;
+
+  /// Return the dimension of the local finite element function space for a cell
+  virtual unsigned int local_dimension(const ufc::cell& c) const;
+
+  /// Return the maximum dimension of the local finite element function space
+  virtual unsigned int max_local_dimension() const;
+
+  // Return the geometric dimension of the coordinates this dof map provides
+  virtual unsigned int geometric_dimension() const;
+
+  /// Return the number of dofs on each cell facet
+  virtual unsigned int num_facet_dofs() const;
+
+  /// Return the number of dofs associated with each cell entity of dimension d
+  virtual unsigned int num_entity_dofs(unsigned int d) const;
+
+  /// Tabulate the local-to-global mapping of dofs on a cell
+  virtual void tabulate_dofs(unsigned int* dofs,
+                             const ufc::mesh& m,
+                             const ufc::cell& c) const;
+
+  /// Tabulate the local-to-local mapping from facet dofs to cell dofs
+  virtual void tabulate_facet_dofs(unsigned int* dofs,
+                                   unsigned int facet) const;
+
+  /// Tabulate the local-to-local mapping of dofs on entity (d, i)
+  virtual void tabulate_entity_dofs(unsigned int* dofs,
+                                    unsigned int d, unsigned int i) const;
+
+  /// Tabulate the coordinates of all dofs on a cell
+  virtual void tabulate_coordinates(double** coordinates,
+                                    const ufc::cell& c) const;
+
+  /// Return the number of sub dof maps (for a mixed element)
+  virtual unsigned int num_sub_dof_maps() const;
+
+  /// Create a new dof_map for sub dof map i (for a mixed element)
+  virtual ufc::dof_map* create_sub_dof_map(unsigned int i) const;
+
+};
+
+/// This class defines the interface for a local-to-global mapping of
+/// degrees of freedom (dofs).
+
+class magmaequations_0_dof_map_3: public ufc::dof_map
+{
+private:
+
+  unsigned int __global_dimension;
+
+public:
+
+  /// Constructor
+  magmaequations_0_dof_map_3();
+
+  /// Destructor
+  virtual ~magmaequations_0_dof_map_3();
+
+  /// Return a string identifying the dof map
+  virtual const char* signature() const;
+
+  /// Return true iff mesh entities of topological dimension d are needed
+  virtual bool needs_mesh_entities(unsigned int d) const;
+
+  /// Initialize dof map for mesh (return true iff init_cell() is needed)
+  virtual bool init_mesh(const ufc::mesh& m);
+
+  /// Initialize dof map for given cell
+  virtual void init_cell(const ufc::mesh& m,
+                         const ufc::cell& c);
+
+  /// Finish initialization of dof map for cells
+  virtual void init_cell_finalize();
+
+  /// Return the dimension of the global finite element function space
+  virtual unsigned int global_dimension() const;
+
+  /// Return the dimension of the local finite element function space for a cell
+  virtual unsigned int local_dimension(const ufc::cell& c) const;
+
+  /// Return the maximum dimension of the local finite element function space
+  virtual unsigned int max_local_dimension() const;
+
+  // Return the geometric dimension of the coordinates this dof map provides
+  virtual unsigned int geometric_dimension() const;
+
+  /// Return the number of dofs on each cell facet
+  virtual unsigned int num_facet_dofs() const;
+
+  /// Return the number of dofs associated with each cell entity of dimension d
+  virtual unsigned int num_entity_dofs(unsigned int d) const;
+
+  /// Tabulate the local-to-global mapping of dofs on a cell
+  virtual void tabulate_dofs(unsigned int* dofs,
+                             const ufc::mesh& m,
+                             const ufc::cell& c) const;
+
+  /// Tabulate the local-to-local mapping from facet dofs to cell dofs
+  virtual void tabulate_facet_dofs(unsigned int* dofs,
+                                   unsigned int facet) const;
+
+  /// Tabulate the local-to-local mapping of dofs on entity (d, i)
+  virtual void tabulate_entity_dofs(unsigned int* dofs,
+                                    unsigned int d, unsigned int i) const;
+
+  /// Tabulate the coordinates of all dofs on a cell
+  virtual void tabulate_coordinates(double** coordinates,
+                                    const ufc::cell& c) const;
+
+  /// Return the number of sub dof maps (for a mixed element)
+  virtual unsigned int num_sub_dof_maps() const;
+
+  /// Create a new dof_map for sub dof map i (for a mixed element)
+  virtual ufc::dof_map* create_sub_dof_map(unsigned int i) const;
+
+};
+
+/// This class defines the interface for a local-to-global mapping of
+/// degrees of freedom (dofs).
+
+class magmaequations_0_dof_map_4: public ufc::dof_map
+{
+private:
+
+  unsigned int __global_dimension;
+
+public:
+
+  /// Constructor
+  magmaequations_0_dof_map_4();
+
+  /// Destructor
+  virtual ~magmaequations_0_dof_map_4();
+
+  /// Return a string identifying the dof map
+  virtual const char* signature() const;
+
+  /// Return true iff mesh entities of topological dimension d are needed
+  virtual bool needs_mesh_entities(unsigned int d) const;
+
+  /// Initialize dof map for mesh (return true iff init_cell() is needed)
+  virtual bool init_mesh(const ufc::mesh& m);
+
+  /// Initialize dof map for given cell
+  virtual void init_cell(const ufc::mesh& m,
+                         const ufc::cell& c);
+
+  /// Finish initialization of dof map for cells
+  virtual void init_cell_finalize();
+
+  /// Return the dimension of the global finite element function space
+  virtual unsigned int global_dimension() const;
+
+  /// Return the dimension of the local finite element function space for a cell
+  virtual unsigned int local_dimension(const ufc::cell& c) const;
+
+  /// Return the maximum dimension of the local finite element function space
+  virtual unsigned int max_local_dimension() const;
+
+  // Return the geometric dimension of the coordinates this dof map provides
+  virtual unsigned int geometric_dimension() const;
+
+  /// Return the number of dofs on each cell facet
+  virtual unsigned int num_facet_dofs() const;
+
+  /// Return the number of dofs associated with each cell entity of dimension d
+  virtual unsigned int num_entity_dofs(unsigned int d) const;
+
+  /// Tabulate the local-to-global mapping of dofs on a cell
+  virtual void tabulate_dofs(unsigned int* dofs,
+                             const ufc::mesh& m,
+                             const ufc::cell& c) const;
+
+  /// Tabulate the local-to-local mapping from facet dofs to cell dofs
+  virtual void tabulate_facet_dofs(unsigned int* dofs,
+                                   unsigned int facet) const;
+
+  /// Tabulate the local-to-local mapping of dofs on entity (d, i)
+  virtual void tabulate_entity_dofs(unsigned int* dofs,
+                                    unsigned int d, unsigned int i) const;
+
+  /// Tabulate the coordinates of all dofs on a cell
+  virtual void tabulate_coordinates(double** coordinates,
+                                    const ufc::cell& c) const;
+
+  /// Return the number of sub dof maps (for a mixed element)
+  virtual unsigned int num_sub_dof_maps() const;
+
+  /// Create a new dof_map for sub dof map i (for a mixed element)
+  virtual ufc::dof_map* create_sub_dof_map(unsigned int i) const;
+
+};
+
+/// This class defines the interface for a local-to-global mapping of
+/// degrees of freedom (dofs).
+
+class magmaequations_0_dof_map_5: public ufc::dof_map
+{
+private:
+
+  unsigned int __global_dimension;
+
+public:
+
+  /// Constructor
+  magmaequations_0_dof_map_5();
+
+  /// Destructor
+  virtual ~magmaequations_0_dof_map_5();
+
+  /// Return a string identifying the dof map
+  virtual const char* signature() const;
+
+  /// Return true iff mesh entities of topological dimension d are needed
+  virtual bool needs_mesh_entities(unsigned int d) const;
+
+  /// Initialize dof map for mesh (return true iff init_cell() is needed)
+  virtual bool init_mesh(const ufc::mesh& m);
+
+  /// Initialize dof map for given cell
+  virtual void init_cell(const ufc::mesh& m,
+                         const ufc::cell& c);
+
+  /// Finish initialization of dof map for cells
+  virtual void init_cell_finalize();
+
+  /// Return the dimension of the global finite element function space
+  virtual unsigned int global_dimension() const;
+
+  /// Return the dimension of the local finite element function space for a cell
+  virtual unsigned int local_dimension(const ufc::cell& c) const;
+
+  /// Return the maximum dimension of the local finite element function space
+  virtual unsigned int max_local_dimension() const;
+
+  // Return the geometric dimension of the coordinates this dof map provides
+  virtual unsigned int geometric_dimension() const;
+
+  /// Return the number of dofs on each cell facet
+  virtual unsigned int num_facet_dofs() const;
+
+  /// Return the number of dofs associated with each cell entity of dimension d
+  virtual unsigned int num_entity_dofs(unsigned int d) const;
+
+  /// Tabulate the local-to-global mapping of dofs on a cell
+  virtual void tabulate_dofs(unsigned int* dofs,
+                             const ufc::mesh& m,
+                             const ufc::cell& c) const;
+
+  /// Tabulate the local-to-local mapping from facet dofs to cell dofs
+  virtual void tabulate_facet_dofs(unsigned int* dofs,
+                                   unsigned int facet) const;
+
+  /// Tabulate the local-to-local mapping of dofs on entity (d, i)
+  virtual void tabulate_entity_dofs(unsigned int* dofs,
+                                    unsigned int d, unsigned int i) const;
+
+  /// Tabulate the coordinates of all dofs on a cell
+  virtual void tabulate_coordinates(double** coordinates,
+                                    const ufc::cell& c) const;
+
+  /// Return the number of sub dof maps (for a mixed element)
+  virtual unsigned int num_sub_dof_maps() const;
+
+  /// Create a new dof_map for sub dof map i (for a mixed element)
+  virtual ufc::dof_map* create_sub_dof_map(unsigned int i) const;
+
+};
+
+/// This class defines the interface for a local-to-global mapping of
+/// degrees of freedom (dofs).
+
+class magmaequations_0_dof_map_6: public ufc::dof_map
+{
+private:
+
+  unsigned int __global_dimension;
+
+public:
+
+  /// Constructor
+  magmaequations_0_dof_map_6();
+
+  /// Destructor
+  virtual ~magmaequations_0_dof_map_6();
+
+  /// Return a string identifying the dof map
+  virtual const char* signature() const;
+
+  /// Return true iff mesh entities of topological dimension d are needed
+  virtual bool needs_mesh_entities(unsigned int d) const;
+
+  /// Initialize dof map for mesh (return true iff init_cell() is needed)
+  virtual bool init_mesh(const ufc::mesh& m);
+
+  /// Initialize dof map for given cell
+  virtual void init_cell(const ufc::mesh& m,
+                         const ufc::cell& c);
+
+  /// Finish initialization of dof map for cells
+  virtual void init_cell_finalize();
+
+  /// Return the dimension of the global finite element function space
+  virtual unsigned int global_dimension() const;
+
+  /// Return the dimension of the local finite element function space for a cell
+  virtual unsigned int local_dimension(const ufc::cell& c) const;
+
+  /// Return the maximum dimension of the local finite element function space
+  virtual unsigned int max_local_dimension() const;
+
+  // Return the geometric dimension of the coordinates this dof map provides
+  virtual unsigned int geometric_dimension() const;
+
+  /// Return the number of dofs on each cell facet
+  virtual unsigned int num_facet_dofs() const;
+
+  /// Return the number of dofs associated with each cell entity of dimension d
+  virtual unsigned int num_entity_dofs(unsigned int d) const;
+
+  /// Tabulate the local-to-global mapping of dofs on a cell
+  virtual void tabulate_dofs(unsigned int* dofs,
+                             const ufc::mesh& m,
+                             const ufc::cell& c) const;
+
+  /// Tabulate the local-to-local mapping from facet dofs to cell dofs
+  virtual void tabulate_facet_dofs(unsigned int* dofs,
+                                   unsigned int facet) const;
+
+  /// Tabulate the local-to-local mapping of dofs on entity (d, i)
+  virtual void tabulate_entity_dofs(unsigned int* dofs,
+                                    unsigned int d, unsigned int i) const;
+
+  /// Tabulate the coordinates of all dofs on a cell
+  virtual void tabulate_coordinates(double** coordinates,
+                                    const ufc::cell& c) const;
+
+  /// Return the number of sub dof maps (for a mixed element)
+  virtual unsigned int num_sub_dof_maps() const;
+
+  /// Create a new dof_map for sub dof map i (for a mixed element)
+  virtual ufc::dof_map* create_sub_dof_map(unsigned int i) const;
+
+};
+
+/// This class defines the interface for a local-to-global mapping of
+/// degrees of freedom (dofs).
+
+class magmaequations_0_dof_map_7: public ufc::dof_map
+{
+private:
+
+  unsigned int __global_dimension;
+
+public:
+
+  /// Constructor
+  magmaequations_0_dof_map_7();
+
+  /// Destructor
+  virtual ~magmaequations_0_dof_map_7();
+
+  /// Return a string identifying the dof map
+  virtual const char* signature() const;
+
+  /// Return true iff mesh entities of topological dimension d are needed
+  virtual bool needs_mesh_entities(unsigned int d) const;
+
+  /// Initialize dof map for mesh (return true iff init_cell() is needed)
+  virtual bool init_mesh(const ufc::mesh& m);
+
+  /// Initialize dof map for given cell
+  virtual void init_cell(const ufc::mesh& m,
+                         const ufc::cell& c);
+
+  /// Finish initialization of dof map for cells
+  virtual void init_cell_finalize();
+
+  /// Return the dimension of the global finite element function space
+  virtual unsigned int global_dimension() const;
+
+  /// Return the dimension of the local finite element function space for a cell
+  virtual unsigned int local_dimension(const ufc::cell& c) const;
+
+  /// Return the maximum dimension of the local finite element function space
+  virtual unsigned int max_local_dimension() const;
 
   // Return the geometric dimension of the coordinates this dof map provides
   virtual unsigned int geometric_dimension() const;
@@ -2515,15 +2116,15 @@ public:
 /// tensor corresponding to the local contribution to a form from
 /// the integral over a cell.
 
-class UFC_MagmaEquationsBilinearForm_cell_integral_0_quadrature: public ufc::cell_integral
-{
-public:
-
-  /// Constructor
-  UFC_MagmaEquationsBilinearForm_cell_integral_0_quadrature();
-
-  /// Destructor
-  virtual ~UFC_MagmaEquationsBilinearForm_cell_integral_0_quadrature();
+class magmaequations_0_cell_integral_0_quadrature: public ufc::cell_integral
+{
+public:
+
+  /// Constructor
+  magmaequations_0_cell_integral_0_quadrature();
+
+  /// Destructor
+  virtual ~magmaequations_0_cell_integral_0_quadrature();
 
   /// Tabulate the tensor for the contribution from a local cell
   virtual void tabulate_tensor(double* A,
@@ -2536,19 +2137,19 @@ public:
 /// tensor corresponding to the local contribution to a form from
 /// the integral over a cell.
 
-class UFC_MagmaEquationsBilinearForm_cell_integral_0: public ufc::cell_integral
-{
-private:
-
-  UFC_MagmaEquationsBilinearForm_cell_integral_0_quadrature integral_0_quadrature;
-
-public:
-
-  /// Constructor
-  UFC_MagmaEquationsBilinearForm_cell_integral_0();
-
-  /// Destructor
-  virtual ~UFC_MagmaEquationsBilinearForm_cell_integral_0();
+class magmaequations_0_cell_integral_0: public ufc::cell_integral
+{
+private:
+
+  magmaequations_0_cell_integral_0_quadrature integral_0_quadrature;
+
+public:
+
+  /// Constructor
+  magmaequations_0_cell_integral_0();
+
+  /// Destructor
+  virtual ~magmaequations_0_cell_integral_0();
 
   /// Tabulate the tensor for the contribution from a local cell
   virtual void tabulate_tensor(double* A,
@@ -2561,15 +2162,15 @@ public:
 /// exterior facet tensor corresponding to the local contribution to
 /// a form from the integral over an exterior facet.
 
-class UFC_MagmaEquationsBilinearForm_exterior_facet_integral_0_quadrature: public ufc::exterior_facet_integral
-{
-public:
-
-  /// Constructor
-  UFC_MagmaEquationsBilinearForm_exterior_facet_integral_0_quadrature();
-
-  /// Destructor
-  virtual ~UFC_MagmaEquationsBilinearForm_exterior_facet_integral_0_quadrature();
+class magmaequations_0_exterior_facet_integral_0_quadrature: public ufc::exterior_facet_integral
+{
+public:
+
+  /// Constructor
+  magmaequations_0_exterior_facet_integral_0_quadrature();
+
+  /// Destructor
+  virtual ~magmaequations_0_exterior_facet_integral_0_quadrature();
 
   /// Tabulate the tensor for the contribution from a local exterior facet
   virtual void tabulate_tensor(double* A,
@@ -2583,19 +2184,19 @@ public:
 /// exterior facet tensor corresponding to the local contribution to
 /// a form from the integral over an exterior facet.
 
-class UFC_MagmaEquationsBilinearForm_exterior_facet_integral_0: public ufc::exterior_facet_integral
-{
-private:
-
-  UFC_MagmaEquationsBilinearForm_exterior_facet_integral_0_quadrature integral_0_quadrature;
-
-public:
-
-  /// Constructor
-  UFC_MagmaEquationsBilinearForm_exterior_facet_integral_0();
-
-  /// Destructor
-  virtual ~UFC_MagmaEquationsBilinearForm_exterior_facet_integral_0();
+class magmaequations_0_exterior_facet_integral_0: public ufc::exterior_facet_integral
+{
+private:
+
+  magmaequations_0_exterior_facet_integral_0_quadrature integral_0_quadrature;
+
+public:
+
+  /// Constructor
+  magmaequations_0_exterior_facet_integral_0();
+
+  /// Destructor
+  virtual ~magmaequations_0_exterior_facet_integral_0();
 
   /// Tabulate the tensor for the contribution from a local exterior facet
   virtual void tabulate_tensor(double* A,
@@ -2620,15 +2221,15 @@ public:
 /// sequence of basis functions of Vj and w1, w2, ..., wn are given
 /// fixed functions (coefficients).
 
-class UFC_MagmaEquationsBilinearForm: public ufc::form
-{
-public:
-
-  /// Constructor
-  UFC_MagmaEquationsBilinearForm();
-
-  /// Destructor
-  virtual ~UFC_MagmaEquationsBilinearForm();
+class magmaequations_form_0: public ufc::form
+{
+public:
+
+  /// Constructor
+  magmaequations_form_0();
+
+  /// Destructor
+  virtual ~magmaequations_form_0();
 
   /// Return a string identifying the form
   virtual const char* signature() const;
@@ -2641,10 +2242,10 @@ public:
 
   /// Return the number of cell integrals
   virtual unsigned int num_cell_integrals() const;
-  
+
   /// Return the number of exterior facet integrals
   virtual unsigned int num_exterior_facet_integrals() const;
-  
+
   /// Return the number of interior facet integrals
   virtual unsigned int num_interior_facet_integrals() const;
 
@@ -2667,2174 +2268,1769 @@ public:
 
 /// This class defines the interface for a finite element.
 
-class UFC_MagmaEquationsLinearForm_finite_element_0_0: public ufc::finite_element
-{
-public:
-
-  /// Constructor
-  UFC_MagmaEquationsLinearForm_finite_element_0_0();
-
-  /// Destructor
-  virtual ~UFC_MagmaEquationsLinearForm_finite_element_0_0();
-
-  /// Return a string identifying the finite element
-  virtual const char* signature() const;
-
-  /// Return the cell shape
-  virtual ufc::shape cell_shape() const;
-
-  /// Return the dimension of the finite element function space
-  virtual unsigned int space_dimension() const;
-
-  /// Return the rank of the value space
-  virtual unsigned int value_rank() const;
-
-  /// Return the dimension of the value space for axis i
-  virtual unsigned int value_dimension(unsigned int i) const;
-
-  /// Evaluate basis function i at given point in cell
-  virtual void evaluate_basis(unsigned int i,
-                              double* values,
-                              const double* coordinates,
-                              const ufc::cell& c) const;
-
-  /// Evaluate all basis functions at given point in cell
-  virtual void evaluate_basis_all(double* values,
-                                  const double* coordinates,
-                                  const ufc::cell& c) const;
-
-  /// Evaluate order n derivatives of basis function i at given point in cell
-  virtual void evaluate_basis_derivatives(unsigned int i,
-                                          unsigned int n,
-                                          double* values,
-                                          const double* coordinates,
-                                          const ufc::cell& c) const;
-  
-  /// Evaluate order n derivatives of all basis functions at given point in cell
-  virtual void evaluate_basis_derivatives_all(unsigned int n,
-                                              double* values,
-                                              const double* coordinates,
-                                              const ufc::cell& c) const;
-
-  /// Evaluate linear functional for dof i on the function f
-  virtual double evaluate_dof(unsigned int i,
-                              const ufc::function& f,
-                              const ufc::cell& c) const;
-
-  /// Evaluate linear functionals for all dofs on the function f
-  virtual void evaluate_dofs(double* values,
-                             const ufc::function& f,
-                             const ufc::cell& c) const;
-
-  /// Interpolate vertex values from dof values
-  virtual void interpolate_vertex_values(double* vertex_values,
-                                         const double* dof_values,
-                                         const ufc::cell& c) const;
-
-  /// Return the number of sub elements (for a mixed element)
-  virtual unsigned int num_sub_elements() const;
-
-  /// Create a new finite element for sub element i (for a mixed element)
-  virtual ufc::finite_element* create_sub_element(unsigned int i) const;
-
-};
-
-/// This class defines the interface for a finite element.
-
-class UFC_MagmaEquationsLinearForm_finite_element_0_1: public ufc::finite_element
-{
-public:
-
-  /// Constructor
-  UFC_MagmaEquationsLinearForm_finite_element_0_1();
-
-  /// Destructor
-  virtual ~UFC_MagmaEquationsLinearForm_finite_element_0_1();
-
-  /// Return a string identifying the finite element
-  virtual const char* signature() const;
-
-  /// Return the cell shape
-  virtual ufc::shape cell_shape() const;
-
-  /// Return the dimension of the finite element function space
-  virtual unsigned int space_dimension() const;
-
-  /// Return the rank of the value space
-  virtual unsigned int value_rank() const;
-
-  /// Return the dimension of the value space for axis i
-  virtual unsigned int value_dimension(unsigned int i) const;
-
-  /// Evaluate basis function i at given point in cell
-  virtual void evaluate_basis(unsigned int i,
-                              double* values,
-                              const double* coordinates,
-                              const ufc::cell& c) const;
-
-  /// Evaluate all basis functions at given point in cell
-  virtual void evaluate_basis_all(double* values,
-                                  const double* coordinates,
-                                  const ufc::cell& c) const;
-
-  /// Evaluate order n derivatives of basis function i at given point in cell
-  virtual void evaluate_basis_derivatives(unsigned int i,
-                                          unsigned int n,
-                                          double* values,
-                                          const double* coordinates,
-                                          const ufc::cell& c) const;
-  
-  /// Evaluate order n derivatives of all basis functions at given point in cell
-  virtual void evaluate_basis_derivatives_all(unsigned int n,
-                                              double* values,
-                                              const double* coordinates,
-                                              const ufc::cell& c) const;
-
-  /// Evaluate linear functional for dof i on the function f
-  virtual double evaluate_dof(unsigned int i,
-                              const ufc::function& f,
-                              const ufc::cell& c) const;
-
-  /// Evaluate linear functionals for all dofs on the function f
-  virtual void evaluate_dofs(double* values,
-                             const ufc::function& f,
-                             const ufc::cell& c) const;
-
-  /// Interpolate vertex values from dof values
-  virtual void interpolate_vertex_values(double* vertex_values,
-                                         const double* dof_values,
-                                         const ufc::cell& c) const;
-
-  /// Return the number of sub elements (for a mixed element)
-  virtual unsigned int num_sub_elements() const;
-
-  /// Create a new finite element for sub element i (for a mixed element)
-  virtual ufc::finite_element* create_sub_element(unsigned int i) const;
-
-};
-
-/// This class defines the interface for a finite element.
-
-class UFC_MagmaEquationsLinearForm_finite_element_0: public ufc::finite_element
-{
-public:
-
-  /// Constructor
-  UFC_MagmaEquationsLinearForm_finite_element_0();
-
-  /// Destructor
-  virtual ~UFC_MagmaEquationsLinearForm_finite_element_0();
-
-  /// Return a string identifying the finite element
-  virtual const char* signature() const;
-
-  /// Return the cell shape
-  virtual ufc::shape cell_shape() const;
-
-  /// Return the dimension of the finite element function space
-  virtual unsigned int space_dimension() const;
-
-  /// Return the rank of the value space
-  virtual unsigned int value_rank() const;
-
-  /// Return the dimension of the value space for axis i
-  virtual unsigned int value_dimension(unsigned int i) const;
-
-  /// Evaluate basis function i at given point in cell
-  virtual void evaluate_basis(unsigned int i,
-                              double* values,
-                              const double* coordinates,
-                              const ufc::cell& c) const;
-
-  /// Evaluate all basis functions at given point in cell
-  virtual void evaluate_basis_all(double* values,
-                                  const double* coordinates,
-                                  const ufc::cell& c) const;
-
-  /// Evaluate order n derivatives of basis function i at given point in cell
-  virtual void evaluate_basis_derivatives(unsigned int i,
-                                          unsigned int n,
-                                          double* values,
-                                          const double* coordinates,
-                                          const ufc::cell& c) const;
-  
-  /// Evaluate order n derivatives of all basis functions at given point in cell
-  virtual void evaluate_basis_derivatives_all(unsigned int n,
-                                              double* values,
-                                              const double* coordinates,
-                                              const ufc::cell& c) const;
-
-  /// Evaluate linear functional for dof i on the function f
-  virtual double evaluate_dof(unsigned int i,
-                              const ufc::function& f,
-                              const ufc::cell& c) const;
-
-  /// Evaluate linear functionals for all dofs on the function f
-  virtual void evaluate_dofs(double* values,
-                             const ufc::function& f,
-                             const ufc::cell& c) const;
-
-  /// Interpolate vertex values from dof values
-  virtual void interpolate_vertex_values(double* vertex_values,
-                                         const double* dof_values,
-                                         const ufc::cell& c) const;
-
-  /// Return the number of sub elements (for a mixed element)
-  virtual unsigned int num_sub_elements() const;
-
-  /// Create a new finite element for sub element i (for a mixed element)
-  virtual ufc::finite_element* create_sub_element(unsigned int i) const;
-
-};
-
-/// This class defines the interface for a finite element.
-
-class UFC_MagmaEquationsLinearForm_finite_element_1_0: public ufc::finite_element
-{
-public:
-
-  /// Constructor
-  UFC_MagmaEquationsLinearForm_finite_element_1_0();
-
-  /// Destructor
-  virtual ~UFC_MagmaEquationsLinearForm_finite_element_1_0();
-
-  /// Return a string identifying the finite element
-  virtual const char* signature() const;
-
-  /// Return the cell shape
-  virtual ufc::shape cell_shape() const;
-
-  /// Return the dimension of the finite element function space
-  virtual unsigned int space_dimension() const;
-
-  /// Return the rank of the value space
-  virtual unsigned int value_rank() const;
-
-  /// Return the dimension of the value space for axis i
-  virtual unsigned int value_dimension(unsigned int i) const;
-
-  /// Evaluate basis function i at given point in cell
-  virtual void evaluate_basis(unsigned int i,
-                              double* values,
-                              const double* coordinates,
-                              const ufc::cell& c) const;
-
-  /// Evaluate all basis functions at given point in cell
-  virtual void evaluate_basis_all(double* values,
-                                  const double* coordinates,
-                                  const ufc::cell& c) const;
-
-  /// Evaluate order n derivatives of basis function i at given point in cell
-  virtual void evaluate_basis_derivatives(unsigned int i,
-                                          unsigned int n,
-                                          double* values,
-                                          const double* coordinates,
-                                          const ufc::cell& c) const;
-  
-  /// Evaluate order n derivatives of all basis functions at given point in cell
-  virtual void evaluate_basis_derivatives_all(unsigned int n,
-                                              double* values,
-                                              const double* coordinates,
-                                              const ufc::cell& c) const;
-
-  /// Evaluate linear functional for dof i on the function f
-  virtual double evaluate_dof(unsigned int i,
-                              const ufc::function& f,
-                              const ufc::cell& c) const;
-
-  /// Evaluate linear functionals for all dofs on the function f
-  virtual void evaluate_dofs(double* values,
-                             const ufc::function& f,
-                             const ufc::cell& c) const;
-
-  /// Interpolate vertex values from dof values
-  virtual void interpolate_vertex_values(double* vertex_values,
-                                         const double* dof_values,
-                                         const ufc::cell& c) const;
-
-  /// Return the number of sub elements (for a mixed element)
-  virtual unsigned int num_sub_elements() const;
-
-  /// Create a new finite element for sub element i (for a mixed element)
-  virtual ufc::finite_element* create_sub_element(unsigned int i) const;
-
-};
-
-/// This class defines the interface for a finite element.
-
-class UFC_MagmaEquationsLinearForm_finite_element_1_1: public ufc::finite_element
-{
-public:
-
-  /// Constructor
-  UFC_MagmaEquationsLinearForm_finite_element_1_1();
-
-  /// Destructor
-  virtual ~UFC_MagmaEquationsLinearForm_finite_element_1_1();
-
-  /// Return a string identifying the finite element
-  virtual const char* signature() const;
-
-  /// Return the cell shape
-  virtual ufc::shape cell_shape() const;
-
-  /// Return the dimension of the finite element function space
-  virtual unsigned int space_dimension() const;
-
-  /// Return the rank of the value space
-  virtual unsigned int value_rank() const;
-
-  /// Return the dimension of the value space for axis i
-  virtual unsigned int value_dimension(unsigned int i) const;
-
-  /// Evaluate basis function i at given point in cell
-  virtual void evaluate_basis(unsigned int i,
-                              double* values,
-                              const double* coordinates,
-                              const ufc::cell& c) const;
-
-  /// Evaluate all basis functions at given point in cell
-  virtual void evaluate_basis_all(double* values,
-                                  const double* coordinates,
-                                  const ufc::cell& c) const;
-
-  /// Evaluate order n derivatives of basis function i at given point in cell
-  virtual void evaluate_basis_derivatives(unsigned int i,
-                                          unsigned int n,
-                                          double* values,
-                                          const double* coordinates,
-                                          const ufc::cell& c) const;
-  
-  /// Evaluate order n derivatives of all basis functions at given point in cell
-  virtual void evaluate_basis_derivatives_all(unsigned int n,
-                                              double* values,
-                                              const double* coordinates,
-                                              const ufc::cell& c) const;
-
-  /// Evaluate linear functional for dof i on the function f
-  virtual double evaluate_dof(unsigned int i,
-                              const ufc::function& f,
-                              const ufc::cell& c) const;
-
-  /// Evaluate linear functionals for all dofs on the function f
-  virtual void evaluate_dofs(double* values,
-                             const ufc::function& f,
-                             const ufc::cell& c) const;
-
-  /// Interpolate vertex values from dof values
-  virtual void interpolate_vertex_values(double* vertex_values,
-                                         const double* dof_values,
-                                         const ufc::cell& c) const;
-
-  /// Return the number of sub elements (for a mixed element)
-  virtual unsigned int num_sub_elements() const;
-
-  /// Create a new finite element for sub element i (for a mixed element)
-  virtual ufc::finite_element* create_sub_element(unsigned int i) const;
-
-};
-
-/// This class defines the interface for a finite element.
-
-class UFC_MagmaEquationsLinearForm_finite_element_1: public ufc::finite_element
-{
-public:
-
-  /// Constructor
-  UFC_MagmaEquationsLinearForm_finite_element_1();
-
-  /// Destructor
-  virtual ~UFC_MagmaEquationsLinearForm_finite_element_1();
-
-  /// Return a string identifying the finite element
-  virtual const char* signature() const;
-
-  /// Return the cell shape
-  virtual ufc::shape cell_shape() const;
-
-  /// Return the dimension of the finite element function space
-  virtual unsigned int space_dimension() const;
-
-  /// Return the rank of the value space
-  virtual unsigned int value_rank() const;
-
-  /// Return the dimension of the value space for axis i
-  virtual unsigned int value_dimension(unsigned int i) const;
-
-  /// Evaluate basis function i at given point in cell
-  virtual void evaluate_basis(unsigned int i,
-                              double* values,
-                              const double* coordinates,
-                              const ufc::cell& c) const;
-
-  /// Evaluate all basis functions at given point in cell
-  virtual void evaluate_basis_all(double* values,
-                                  const double* coordinates,
-                                  const ufc::cell& c) const;
-
-  /// Evaluate order n derivatives of basis function i at given point in cell
-  virtual void evaluate_basis_derivatives(unsigned int i,
-                                          unsigned int n,
-                                          double* values,
-                                          const double* coordinates,
-                                          const ufc::cell& c) const;
-  
-  /// Evaluate order n derivatives of all basis functions at given point in cell
-  virtual void evaluate_basis_derivatives_all(unsigned int n,
-                                              double* values,
-                                              const double* coordinates,
-                                              const ufc::cell& c) const;
-
-  /// Evaluate linear functional for dof i on the function f
-  virtual double evaluate_dof(unsigned int i,
-                              const ufc::function& f,
-                              const ufc::cell& c) const;
-
-  /// Evaluate linear functionals for all dofs on the function f
-  virtual void evaluate_dofs(double* values,
-                             const ufc::function& f,
-                             const ufc::cell& c) const;
-
-  /// Interpolate vertex values from dof values
-  virtual void interpolate_vertex_values(double* vertex_values,
-                                         const double* dof_values,
-                                         const ufc::cell& c) const;
-
-  /// Return the number of sub elements (for a mixed element)
-  virtual unsigned int num_sub_elements() const;
-
-  /// Create a new finite element for sub element i (for a mixed element)
-  virtual ufc::finite_element* create_sub_element(unsigned int i) const;
-
-};
-
-/// This class defines the interface for a finite element.
-
-class UFC_MagmaEquationsLinearForm_finite_element_2: public ufc::finite_element
-{
-public:
-
-  /// Constructor
-  UFC_MagmaEquationsLinearForm_finite_element_2();
-
-  /// Destructor
-  virtual ~UFC_MagmaEquationsLinearForm_finite_element_2();
-
-  /// Return a string identifying the finite element
-  virtual const char* signature() const;
-
-  /// Return the cell shape
-  virtual ufc::shape cell_shape() const;
-
-  /// Return the dimension of the finite element function space
-  virtual unsigned int space_dimension() const;
-
-  /// Return the rank of the value space
-  virtual unsigned int value_rank() const;
-
-  /// Return the dimension of the value space for axis i
-  virtual unsigned int value_dimension(unsigned int i) const;
-
-  /// Evaluate basis function i at given point in cell
-  virtual void evaluate_basis(unsigned int i,
-                              double* values,
-                              const double* coordinates,
-                              const ufc::cell& c) const;
-
-  /// Evaluate all basis functions at given point in cell
-  virtual void evaluate_basis_all(double* values,
-                                  const double* coordinates,
-                                  const ufc::cell& c) const;
-
-  /// Evaluate order n derivatives of basis function i at given point in cell
-  virtual void evaluate_basis_derivatives(unsigned int i,
-                                          unsigned int n,
-                                          double* values,
-                                          const double* coordinates,
-                                          const ufc::cell& c) const;
-  
-  /// Evaluate order n derivatives of all basis functions at given point in cell
-  virtual void evaluate_basis_derivatives_all(unsigned int n,
-                                              double* values,
-                                              const double* coordinates,
-                                              const ufc::cell& c) const;
-
-  /// Evaluate linear functional for dof i on the function f
-  virtual double evaluate_dof(unsigned int i,
-                              const ufc::function& f,
-                              const ufc::cell& c) const;
-
-  /// Evaluate linear functionals for all dofs on the function f
-  virtual void evaluate_dofs(double* values,
-                             const ufc::function& f,
-                             const ufc::cell& c) const;
-
-  /// Interpolate vertex values from dof values
-  virtual void interpolate_vertex_values(double* vertex_values,
-                                         const double* dof_values,
-                                         const ufc::cell& c) const;
-
-  /// Return the number of sub elements (for a mixed element)
-  virtual unsigned int num_sub_elements() const;
-
-  /// Create a new finite element for sub element i (for a mixed element)
-  virtual ufc::finite_element* create_sub_element(unsigned int i) const;
-
-};
-
-/// This class defines the interface for a finite element.
-
-class UFC_MagmaEquationsLinearForm_finite_element_3: public ufc::finite_element
-{
-public:
-
-  /// Constructor
-  UFC_MagmaEquationsLinearForm_finite_element_3();
-
-  /// Destructor
-  virtual ~UFC_MagmaEquationsLinearForm_finite_element_3();
-
-  /// Return a string identifying the finite element
-  virtual const char* signature() const;
-
-  /// Return the cell shape
-  virtual ufc::shape cell_shape() const;
-
-  /// Return the dimension of the finite element function space
-  virtual unsigned int space_dimension() const;
-
-  /// Return the rank of the value space
-  virtual unsigned int value_rank() const;
-
-  /// Return the dimension of the value space for axis i
-  virtual unsigned int value_dimension(unsigned int i) const;
-
-  /// Evaluate basis function i at given point in cell
-  virtual void evaluate_basis(unsigned int i,
-                              double* values,
-                              const double* coordinates,
-                              const ufc::cell& c) const;
-
-  /// Evaluate all basis functions at given point in cell
-  virtual void evaluate_basis_all(double* values,
-                                  const double* coordinates,
-                                  const ufc::cell& c) const;
-
-  /// Evaluate order n derivatives of basis function i at given point in cell
-  virtual void evaluate_basis_derivatives(unsigned int i,
-                                          unsigned int n,
-                                          double* values,
-                                          const double* coordinates,
-                                          const ufc::cell& c) const;
-  
-  /// Evaluate order n derivatives of all basis functions at given point in cell
-  virtual void evaluate_basis_derivatives_all(unsigned int n,
-                                              double* values,
-                                              const double* coordinates,
-                                              const ufc::cell& c) const;
-
-  /// Evaluate linear functional for dof i on the function f
-  virtual double evaluate_dof(unsigned int i,
-                              const ufc::function& f,
-                              const ufc::cell& c) const;
-
-  /// Evaluate linear functionals for all dofs on the function f
-  virtual void evaluate_dofs(double* values,
-                             const ufc::function& f,
-                             const ufc::cell& c) const;
-
-  /// Interpolate vertex values from dof values
-  virtual void interpolate_vertex_values(double* vertex_values,
-                                         const double* dof_values,
-                                         const ufc::cell& c) const;
-
-  /// Return the number of sub elements (for a mixed element)
-  virtual unsigned int num_sub_elements() const;
-
-  /// Create a new finite element for sub element i (for a mixed element)
-  virtual ufc::finite_element* create_sub_element(unsigned int i) const;
-
-};
-
-/// This class defines the interface for a finite element.
-
-class UFC_MagmaEquationsLinearForm_finite_element_4_0: public ufc::finite_element
-{
-public:
-
-  /// Constructor
-  UFC_MagmaEquationsLinearForm_finite_element_4_0();
-
-  /// Destructor
-  virtual ~UFC_MagmaEquationsLinearForm_finite_element_4_0();
-
-  /// Return a string identifying the finite element
-  virtual const char* signature() const;
-
-  /// Return the cell shape
-  virtual ufc::shape cell_shape() const;
-
-  /// Return the dimension of the finite element function space
-  virtual unsigned int space_dimension() const;
-
-  /// Return the rank of the value space
-  virtual unsigned int value_rank() const;
-
-  /// Return the dimension of the value space for axis i
-  virtual unsigned int value_dimension(unsigned int i) const;
-
-  /// Evaluate basis function i at given point in cell
-  virtual void evaluate_basis(unsigned int i,
-                              double* values,
-                              const double* coordinates,
-                              const ufc::cell& c) const;
-
-  /// Evaluate all basis functions at given point in cell
-  virtual void evaluate_basis_all(double* values,
-                                  const double* coordinates,
-                                  const ufc::cell& c) const;
-
-  /// Evaluate order n derivatives of basis function i at given point in cell
-  virtual void evaluate_basis_derivatives(unsigned int i,
-                                          unsigned int n,
-                                          double* values,
-                                          const double* coordinates,
-                                          const ufc::cell& c) const;
-  
-  /// Evaluate order n derivatives of all basis functions at given point in cell
-  virtual void evaluate_basis_derivatives_all(unsigned int n,
-                                              double* values,
-                                              const double* coordinates,
-                                              const ufc::cell& c) const;
-
-  /// Evaluate linear functional for dof i on the function f
-  virtual double evaluate_dof(unsigned int i,
-                              const ufc::function& f,
-                              const ufc::cell& c) const;
-
-  /// Evaluate linear functionals for all dofs on the function f
-  virtual void evaluate_dofs(double* values,
-                             const ufc::function& f,
-                             const ufc::cell& c) const;
-
-  /// Interpolate vertex values from dof values
-  virtual void interpolate_vertex_values(double* vertex_values,
-                                         const double* dof_values,
-                                         const ufc::cell& c) const;
-
-  /// Return the number of sub elements (for a mixed element)
-  virtual unsigned int num_sub_elements() const;
-
-  /// Create a new finite element for sub element i (for a mixed element)
-  virtual ufc::finite_element* create_sub_element(unsigned int i) const;
-
-};
-
-/// This class defines the interface for a finite element.
-
-class UFC_MagmaEquationsLinearForm_finite_element_4_1: public ufc::finite_element
-{
-public:
-
-  /// Constructor
-  UFC_MagmaEquationsLinearForm_finite_element_4_1();
-
-  /// Destructor
-  virtual ~UFC_MagmaEquationsLinearForm_finite_element_4_1();
-
-  /// Return a string identifying the finite element
-  virtual const char* signature() const;
-
-  /// Return the cell shape
-  virtual ufc::shape cell_shape() const;
-
-  /// Return the dimension of the finite element function space
-  virtual unsigned int space_dimension() const;
-
-  /// Return the rank of the value space
-  virtual unsigned int value_rank() const;
-
-  /// Return the dimension of the value space for axis i
-  virtual unsigned int value_dimension(unsigned int i) const;
-
-  /// Evaluate basis function i at given point in cell
-  virtual void evaluate_basis(unsigned int i,
-                              double* values,
-                              const double* coordinates,
-                              const ufc::cell& c) const;
-
-  /// Evaluate all basis functions at given point in cell
-  virtual void evaluate_basis_all(double* values,
-                                  const double* coordinates,
-                                  const ufc::cell& c) const;
-
-  /// Evaluate order n derivatives of basis function i at given point in cell
-  virtual void evaluate_basis_derivatives(unsigned int i,
-                                          unsigned int n,
-                                          double* values,
-                                          const double* coordinates,
-                                          const ufc::cell& c) const;
-  
-  /// Evaluate order n derivatives of all basis functions at given point in cell
-  virtual void evaluate_basis_derivatives_all(unsigned int n,
-                                              double* values,
-                                              const double* coordinates,
-                                              const ufc::cell& c) const;
-
-  /// Evaluate linear functional for dof i on the function f
-  virtual double evaluate_dof(unsigned int i,
-                              const ufc::function& f,
-                              const ufc::cell& c) const;
-
-  /// Evaluate linear functionals for all dofs on the function f
-  virtual void evaluate_dofs(double* values,
-                             const ufc::function& f,
-                             const ufc::cell& c) const;
-
-  /// Interpolate vertex values from dof values
-  virtual void interpolate_vertex_values(double* vertex_values,
-                                         const double* dof_values,
-                                         const ufc::cell& c) const;
-
-  /// Return the number of sub elements (for a mixed element)
-  virtual unsigned int num_sub_elements() const;
-
-  /// Create a new finite element for sub element i (for a mixed element)
-  virtual ufc::finite_element* create_sub_element(unsigned int i) const;
-
-};
-
-/// This class defines the interface for a finite element.
-
-class UFC_MagmaEquationsLinearForm_finite_element_4: public ufc::finite_element
-{
-public:
-
-  /// Constructor
-  UFC_MagmaEquationsLinearForm_finite_element_4();
-
-  /// Destructor
-  virtual ~UFC_MagmaEquationsLinearForm_finite_element_4();
-
-  /// Return a string identifying the finite element
-  virtual const char* signature() const;
-
-  /// Return the cell shape
-  virtual ufc::shape cell_shape() const;
-
-  /// Return the dimension of the finite element function space
-  virtual unsigned int space_dimension() const;
-
-  /// Return the rank of the value space
-  virtual unsigned int value_rank() const;
-
-  /// Return the dimension of the value space for axis i
-  virtual unsigned int value_dimension(unsigned int i) const;
-
-  /// Evaluate basis function i at given point in cell
-  virtual void evaluate_basis(unsigned int i,
-                              double* values,
-                              const double* coordinates,
-                              const ufc::cell& c) const;
-
-  /// Evaluate all basis functions at given point in cell
-  virtual void evaluate_basis_all(double* values,
-                                  const double* coordinates,
-                                  const ufc::cell& c) const;
-
-  /// Evaluate order n derivatives of basis function i at given point in cell
-  virtual void evaluate_basis_derivatives(unsigned int i,
-                                          unsigned int n,
-                                          double* values,
-                                          const double* coordinates,
-                                          const ufc::cell& c) const;
-  
-  /// Evaluate order n derivatives of all basis functions at given point in cell
-  virtual void evaluate_basis_derivatives_all(unsigned int n,
-                                              double* values,
-                                              const double* coordinates,
-                                              const ufc::cell& c) const;
-
-  /// Evaluate linear functional for dof i on the function f
-  virtual double evaluate_dof(unsigned int i,
-                              const ufc::function& f,
-                              const ufc::cell& c) const;
-
-  /// Evaluate linear functionals for all dofs on the function f
-  virtual void evaluate_dofs(double* values,
-                             const ufc::function& f,
-                             const ufc::cell& c) const;
-
-  /// Interpolate vertex values from dof values
-  virtual void interpolate_vertex_values(double* vertex_values,
-                                         const double* dof_values,
-                                         const ufc::cell& c) const;
-
-  /// Return the number of sub elements (for a mixed element)
-  virtual unsigned int num_sub_elements() const;
-
-  /// Create a new finite element for sub element i (for a mixed element)
-  virtual ufc::finite_element* create_sub_element(unsigned int i) const;
-
-};
-
-/// This class defines the interface for a finite element.
-
-class UFC_MagmaEquationsLinearForm_finite_element_5: public ufc::finite_element
-{
-public:
-
-  /// Constructor
-  UFC_MagmaEquationsLinearForm_finite_element_5();
-
-  /// Destructor
-  virtual ~UFC_MagmaEquationsLinearForm_finite_element_5();
-
-  /// Return a string identifying the finite element
-  virtual const char* signature() const;
-
-  /// Return the cell shape
-  virtual ufc::shape cell_shape() const;
-
-  /// Return the dimension of the finite element function space
-  virtual unsigned int space_dimension() const;
-
-  /// Return the rank of the value space
-  virtual unsigned int value_rank() const;
-
-  /// Return the dimension of the value space for axis i
-  virtual unsigned int value_dimension(unsigned int i) const;
-
-  /// Evaluate basis function i at given point in cell
-  virtual void evaluate_basis(unsigned int i,
-                              double* values,
-                              const double* coordinates,
-                              const ufc::cell& c) const;
-
-  /// Evaluate all basis functions at given point in cell
-  virtual void evaluate_basis_all(double* values,
-                                  const double* coordinates,
-                                  const ufc::cell& c) const;
-
-  /// Evaluate order n derivatives of basis function i at given point in cell
-  virtual void evaluate_basis_derivatives(unsigned int i,
-                                          unsigned int n,
-                                          double* values,
-                                          const double* coordinates,
-                                          const ufc::cell& c) const;
-  
-  /// Evaluate order n derivatives of all basis functions at given point in cell
-  virtual void evaluate_basis_derivatives_all(unsigned int n,
-                                              double* values,
-                                              const double* coordinates,
-                                              const ufc::cell& c) const;
-
-  /// Evaluate linear functional for dof i on the function f
-  virtual double evaluate_dof(unsigned int i,
-                              const ufc::function& f,
-                              const ufc::cell& c) const;
-
-  /// Evaluate linear functionals for all dofs on the function f
-  virtual void evaluate_dofs(double* values,
-                             const ufc::function& f,
-                             const ufc::cell& c) const;
-
-  /// Interpolate vertex values from dof values
-  virtual void interpolate_vertex_values(double* vertex_values,
-                                         const double* dof_values,
-                                         const ufc::cell& c) const;
-
-  /// Return the number of sub elements (for a mixed element)
-  virtual unsigned int num_sub_elements() const;
-
-  /// Create a new finite element for sub element i (for a mixed element)
-  virtual ufc::finite_element* create_sub_element(unsigned int i) const;
-
-};
-
-/// This class defines the interface for a finite element.
-
-class UFC_MagmaEquationsLinearForm_finite_element_6: public ufc::finite_element
-{
-public:
-
-  /// Constructor
-  UFC_MagmaEquationsLinearForm_finite_element_6();
-
-  /// Destructor
-  virtual ~UFC_MagmaEquationsLinearForm_finite_element_6();
-
-  /// Return a string identifying the finite element
-  virtual const char* signature() const;
-
-  /// Return the cell shape
-  virtual ufc::shape cell_shape() const;
-
-  /// Return the dimension of the finite element function space
-  virtual unsigned int space_dimension() const;
-
-  /// Return the rank of the value space
-  virtual unsigned int value_rank() const;
-
-  /// Return the dimension of the value space for axis i
-  virtual unsigned int value_dimension(unsigned int i) const;
-
-  /// Evaluate basis function i at given point in cell
-  virtual void evaluate_basis(unsigned int i,
-                              double* values,
-                              const double* coordinates,
-                              const ufc::cell& c) const;
-
-  /// Evaluate all basis functions at given point in cell
-  virtual void evaluate_basis_all(double* values,
-                                  const double* coordinates,
-                                  const ufc::cell& c) const;
-
-  /// Evaluate order n derivatives of basis function i at given point in cell
-  virtual void evaluate_basis_derivatives(unsigned int i,
-                                          unsigned int n,
-                                          double* values,
-                                          const double* coordinates,
-                                          const ufc::cell& c) const;
-  
-  /// Evaluate order n derivatives of all basis functions at given point in cell
-  virtual void evaluate_basis_derivatives_all(unsigned int n,
-                                              double* values,
-                                              const double* coordinates,
-                                              const ufc::cell& c) const;
-
-  /// Evaluate linear functional for dof i on the function f
-  virtual double evaluate_dof(unsigned int i,
-                              const ufc::function& f,
-                              const ufc::cell& c) const;
-
-  /// Evaluate linear functionals for all dofs on the function f
-  virtual void evaluate_dofs(double* values,
-                             const ufc::function& f,
-                             const ufc::cell& c) const;
-
-  /// Interpolate vertex values from dof values
-  virtual void interpolate_vertex_values(double* vertex_values,
-                                         const double* dof_values,
-                                         const ufc::cell& c) const;
-
-  /// Return the number of sub elements (for a mixed element)
-  virtual unsigned int num_sub_elements() const;
-
-  /// Create a new finite element for sub element i (for a mixed element)
-  virtual ufc::finite_element* create_sub_element(unsigned int i) const;
-
-};
-
-/// This class defines the interface for a finite element.
-
-class UFC_MagmaEquationsLinearForm_finite_element_7: public ufc::finite_element
-{
-public:
-
-  /// Constructor
-  UFC_MagmaEquationsLinearForm_finite_element_7();
-
-  /// Destructor
-  virtual ~UFC_MagmaEquationsLinearForm_finite_element_7();
-
-  /// Return a string identifying the finite element
-  virtual const char* signature() const;
-
-  /// Return the cell shape
-  virtual ufc::shape cell_shape() const;
-
-  /// Return the dimension of the finite element function space
-  virtual unsigned int space_dimension() const;
-
-  /// Return the rank of the value space
-  virtual unsigned int value_rank() const;
-
-  /// Return the dimension of the value space for axis i
-  virtual unsigned int value_dimension(unsigned int i) const;
-
-  /// Evaluate basis function i at given point in cell
-  virtual void evaluate_basis(unsigned int i,
-                              double* values,
-                              const double* coordinates,
-                              const ufc::cell& c) const;
-
-  /// Evaluate all basis functions at given point in cell
-  virtual void evaluate_basis_all(double* values,
-                                  const double* coordinates,
-                                  const ufc::cell& c) const;
-
-  /// Evaluate order n derivatives of basis function i at given point in cell
-  virtual void evaluate_basis_derivatives(unsigned int i,
-                                          unsigned int n,
-                                          double* values,
-                                          const double* coordinates,
-                                          const ufc::cell& c) const;
-  
-  /// Evaluate order n derivatives of all basis functions at given point in cell
-  virtual void evaluate_basis_derivatives_all(unsigned int n,
-                                              double* values,
-                                              const double* coordinates,
-                                              const ufc::cell& c) const;
-
-  /// Evaluate linear functional for dof i on the function f
-  virtual double evaluate_dof(unsigned int i,
-                              const ufc::function& f,
-                              const ufc::cell& c) const;
-
-  /// Evaluate linear functionals for all dofs on the function f
-  virtual void evaluate_dofs(double* values,
-                             const ufc::function& f,
-                             const ufc::cell& c) const;
-
-  /// Interpolate vertex values from dof values
-  virtual void interpolate_vertex_values(double* vertex_values,
-                                         const double* dof_values,
-                                         const ufc::cell& c) const;
-
-  /// Return the number of sub elements (for a mixed element)
-  virtual unsigned int num_sub_elements() const;
-
-  /// Create a new finite element for sub element i (for a mixed element)
-  virtual ufc::finite_element* create_sub_element(unsigned int i) const;
-
-};
-
-/// This class defines the interface for a finite element.
-
-class UFC_MagmaEquationsLinearForm_finite_element_8: public ufc::finite_element
-{
-public:
-
-  /// Constructor
-  UFC_MagmaEquationsLinearForm_finite_element_8();
-
-  /// Destructor
-  virtual ~UFC_MagmaEquationsLinearForm_finite_element_8();
-
-  /// Return a string identifying the finite element
-  virtual const char* signature() const;
-
-  /// Return the cell shape
-  virtual ufc::shape cell_shape() const;
-
-  /// Return the dimension of the finite element function space
-  virtual unsigned int space_dimension() const;
-
-  /// Return the rank of the value space
-  virtual unsigned int value_rank() const;
-
-  /// Return the dimension of the value space for axis i
-  virtual unsigned int value_dimension(unsigned int i) const;
-
-  /// Evaluate basis function i at given point in cell
-  virtual void evaluate_basis(unsigned int i,
-                              double* values,
-                              const double* coordinates,
-                              const ufc::cell& c) const;
-
-  /// Evaluate all basis functions at given point in cell
-  virtual void evaluate_basis_all(double* values,
-                                  const double* coordinates,
-                                  const ufc::cell& c) const;
-
-  /// Evaluate order n derivatives of basis function i at given point in cell
-  virtual void evaluate_basis_derivatives(unsigned int i,
-                                          unsigned int n,
-                                          double* values,
-                                          const double* coordinates,
-                                          const ufc::cell& c) const;
-  
-  /// Evaluate order n derivatives of all basis functions at given point in cell
-  virtual void evaluate_basis_derivatives_all(unsigned int n,
-                                              double* values,
-                                              const double* coordinates,
-                                              const ufc::cell& c) const;
-
-  /// Evaluate linear functional for dof i on the function f
-  virtual double evaluate_dof(unsigned int i,
-                              const ufc::function& f,
-                              const ufc::cell& c) const;
-
-  /// Evaluate linear functionals for all dofs on the function f
-  virtual void evaluate_dofs(double* values,
-                             const ufc::function& f,
-                             const ufc::cell& c) const;
-
-  /// Interpolate vertex values from dof values
-  virtual void interpolate_vertex_values(double* vertex_values,
-                                         const double* dof_values,
-                                         const ufc::cell& c) const;
-
-  /// Return the number of sub elements (for a mixed element)
-  virtual unsigned int num_sub_elements() const;
-
-  /// Create a new finite element for sub element i (for a mixed element)
-  virtual ufc::finite_element* create_sub_element(unsigned int i) const;
-
-};
-
-/// This class defines the interface for a local-to-global mapping of
-/// degrees of freedom (dofs).
-
-class UFC_MagmaEquationsLinearForm_dof_map_0_0: public ufc::dof_map
-{
-private:
-
-  unsigned int __global_dimension;
-
-public:
-
-  /// Constructor
-  UFC_MagmaEquationsLinearForm_dof_map_0_0();
-
-  /// Destructor
-  virtual ~UFC_MagmaEquationsLinearForm_dof_map_0_0();
-
-  /// Return a string identifying the dof map
-  virtual const char* signature() const;
-
-  /// Return true iff mesh entities of topological dimension d are needed
-  virtual bool needs_mesh_entities(unsigned int d) const;
-
-  /// Initialize dof map for mesh (return true iff init_cell() is needed)
-  virtual bool init_mesh(const ufc::mesh& m);
-
-  /// Initialize dof map for given cell
-  virtual void init_cell(const ufc::mesh& m,
-                         const ufc::cell& c);
-
-  /// Finish initialization of dof map for cells
-  virtual void init_cell_finalize();
-
-  /// Return the dimension of the global finite element function space
-  virtual unsigned int global_dimension() const;
-
-  /// Return the dimension of the local finite element function space
-  virtual unsigned int local_dimension() const;
-
-  // Return the geometric dimension of the coordinates this dof map provides
-  virtual unsigned int geometric_dimension() const;
-
-  /// Return the number of dofs on each cell facet
-  virtual unsigned int num_facet_dofs() const;
-
-  /// Return the number of dofs associated with each cell entity of dimension d
-  virtual unsigned int num_entity_dofs(unsigned int d) const;
-
-  /// Tabulate the local-to-global mapping of dofs on a cell
-  virtual void tabulate_dofs(unsigned int* dofs,
-                             const ufc::mesh& m,
-                             const ufc::cell& c) const;
-
-  /// Tabulate the local-to-local mapping from facet dofs to cell dofs
-  virtual void tabulate_facet_dofs(unsigned int* dofs,
-                                   unsigned int facet) const;
-
-  /// Tabulate the local-to-local mapping of dofs on entity (d, i)
-  virtual void tabulate_entity_dofs(unsigned int* dofs,
-                                    unsigned int d, unsigned int i) const;
-
-  /// Tabulate the coordinates of all dofs on a cell
-  virtual void tabulate_coordinates(double** coordinates,
-                                    const ufc::cell& c) const;
-
-  /// Return the number of sub dof maps (for a mixed element)
-  virtual unsigned int num_sub_dof_maps() const;
-
-  /// Create a new dof_map for sub dof map i (for a mixed element)
-  virtual ufc::dof_map* create_sub_dof_map(unsigned int i) const;
-
-};
-
-/// This class defines the interface for a local-to-global mapping of
-/// degrees of freedom (dofs).
-
-class UFC_MagmaEquationsLinearForm_dof_map_0_1: public ufc::dof_map
-{
-private:
-
-  unsigned int __global_dimension;
-
-public:
-
-  /// Constructor
-  UFC_MagmaEquationsLinearForm_dof_map_0_1();
-
-  /// Destructor
-  virtual ~UFC_MagmaEquationsLinearForm_dof_map_0_1();
-
-  /// Return a string identifying the dof map
-  virtual const char* signature() const;
-
-  /// Return true iff mesh entities of topological dimension d are needed
-  virtual bool needs_mesh_entities(unsigned int d) const;
-
-  /// Initialize dof map for mesh (return true iff init_cell() is needed)
-  virtual bool init_mesh(const ufc::mesh& m);
-
-  /// Initialize dof map for given cell
-  virtual void init_cell(const ufc::mesh& m,
-                         const ufc::cell& c);
-
-  /// Finish initialization of dof map for cells
-  virtual void init_cell_finalize();
-
-  /// Return the dimension of the global finite element function space
-  virtual unsigned int global_dimension() const;
-
-  /// Return the dimension of the local finite element function space
-  virtual unsigned int local_dimension() const;
-
-  // Return the geometric dimension of the coordinates this dof map provides
-  virtual unsigned int geometric_dimension() const;
-
-  /// Return the number of dofs on each cell facet
-  virtual unsigned int num_facet_dofs() const;
-
-  /// Return the number of dofs associated with each cell entity of dimension d
-  virtual unsigned int num_entity_dofs(unsigned int d) const;
-
-  /// Tabulate the local-to-global mapping of dofs on a cell
-  virtual void tabulate_dofs(unsigned int* dofs,
-                             const ufc::mesh& m,
-                             const ufc::cell& c) const;
-
-  /// Tabulate the local-to-local mapping from facet dofs to cell dofs
-  virtual void tabulate_facet_dofs(unsigned int* dofs,
-                                   unsigned int facet) const;
-
-  /// Tabulate the local-to-local mapping of dofs on entity (d, i)
-  virtual void tabulate_entity_dofs(unsigned int* dofs,
-                                    unsigned int d, unsigned int i) const;
-
-  /// Tabulate the coordinates of all dofs on a cell
-  virtual void tabulate_coordinates(double** coordinates,
-                                    const ufc::cell& c) const;
-
-  /// Return the number of sub dof maps (for a mixed element)
-  virtual unsigned int num_sub_dof_maps() const;
-
-  /// Create a new dof_map for sub dof map i (for a mixed element)
-  virtual ufc::dof_map* create_sub_dof_map(unsigned int i) const;
-
-};
-
-/// This class defines the interface for a local-to-global mapping of
-/// degrees of freedom (dofs).
-
-class UFC_MagmaEquationsLinearForm_dof_map_0: public ufc::dof_map
-{
-private:
-
-  unsigned int __global_dimension;
-
-public:
-
-  /// Constructor
-  UFC_MagmaEquationsLinearForm_dof_map_0();
-
-  /// Destructor
-  virtual ~UFC_MagmaEquationsLinearForm_dof_map_0();
-
-  /// Return a string identifying the dof map
-  virtual const char* signature() const;
-
-  /// Return true iff mesh entities of topological dimension d are needed
-  virtual bool needs_mesh_entities(unsigned int d) const;
-
-  /// Initialize dof map for mesh (return true iff init_cell() is needed)
-  virtual bool init_mesh(const ufc::mesh& m);
-
-  /// Initialize dof map for given cell
-  virtual void init_cell(const ufc::mesh& m,
-                         const ufc::cell& c);
-
-  /// Finish initialization of dof map for cells
-  virtual void init_cell_finalize();
-
-  /// Return the dimension of the global finite element function space
-  virtual unsigned int global_dimension() const;
-
-  /// Return the dimension of the local finite element function space
-  virtual unsigned int local_dimension() const;
-
-  // Return the geometric dimension of the coordinates this dof map provides
-  virtual unsigned int geometric_dimension() const;
-
-  /// Return the number of dofs on each cell facet
-  virtual unsigned int num_facet_dofs() const;
-
-  /// Return the number of dofs associated with each cell entity of dimension d
-  virtual unsigned int num_entity_dofs(unsigned int d) const;
-
-  /// Tabulate the local-to-global mapping of dofs on a cell
-  virtual void tabulate_dofs(unsigned int* dofs,
-                             const ufc::mesh& m,
-                             const ufc::cell& c) const;
-
-  /// Tabulate the local-to-local mapping from facet dofs to cell dofs
-  virtual void tabulate_facet_dofs(unsigned int* dofs,
-                                   unsigned int facet) const;
-
-  /// Tabulate the local-to-local mapping of dofs on entity (d, i)
-  virtual void tabulate_entity_dofs(unsigned int* dofs,
-                                    unsigned int d, unsigned int i) const;
-
-  /// Tabulate the coordinates of all dofs on a cell
-  virtual void tabulate_coordinates(double** coordinates,
-                                    const ufc::cell& c) const;
-
-  /// Return the number of sub dof maps (for a mixed element)
-  virtual unsigned int num_sub_dof_maps() const;
-
-  /// Create a new dof_map for sub dof map i (for a mixed element)
-  virtual ufc::dof_map* create_sub_dof_map(unsigned int i) const;
-
-};
-
-/// This class defines the interface for a local-to-global mapping of
-/// degrees of freedom (dofs).
-
-class UFC_MagmaEquationsLinearForm_dof_map_1_0: public ufc::dof_map
-{
-private:
-
-  unsigned int __global_dimension;
-
-public:
-
-  /// Constructor
-  UFC_MagmaEquationsLinearForm_dof_map_1_0();
-
-  /// Destructor
-  virtual ~UFC_MagmaEquationsLinearForm_dof_map_1_0();
-
-  /// Return a string identifying the dof map
-  virtual const char* signature() const;
-
-  /// Return true iff mesh entities of topological dimension d are needed
-  virtual bool needs_mesh_entities(unsigned int d) const;
-
-  /// Initialize dof map for mesh (return true iff init_cell() is needed)
-  virtual bool init_mesh(const ufc::mesh& m);
-
-  /// Initialize dof map for given cell
-  virtual void init_cell(const ufc::mesh& m,
-                         const ufc::cell& c);
-
-  /// Finish initialization of dof map for cells
-  virtual void init_cell_finalize();
-
-  /// Return the dimension of the global finite element function space
-  virtual unsigned int global_dimension() const;
-
-  /// Return the dimension of the local finite element function space
-  virtual unsigned int local_dimension() const;
-
-  // Return the geometric dimension of the coordinates this dof map provides
-  virtual unsigned int geometric_dimension() const;
-
-  /// Return the number of dofs on each cell facet
-  virtual unsigned int num_facet_dofs() const;
-
-  /// Return the number of dofs associated with each cell entity of dimension d
-  virtual unsigned int num_entity_dofs(unsigned int d) const;
-
-  /// Tabulate the local-to-global mapping of dofs on a cell
-  virtual void tabulate_dofs(unsigned int* dofs,
-                             const ufc::mesh& m,
-                             const ufc::cell& c) const;
-
-  /// Tabulate the local-to-local mapping from facet dofs to cell dofs
-  virtual void tabulate_facet_dofs(unsigned int* dofs,
-                                   unsigned int facet) const;
-
-  /// Tabulate the local-to-local mapping of dofs on entity (d, i)
-  virtual void tabulate_entity_dofs(unsigned int* dofs,
-                                    unsigned int d, unsigned int i) const;
-
-  /// Tabulate the coordinates of all dofs on a cell
-  virtual void tabulate_coordinates(double** coordinates,
-                                    const ufc::cell& c) const;
-
-  /// Return the number of sub dof maps (for a mixed element)
-  virtual unsigned int num_sub_dof_maps() const;
-
-  /// Create a new dof_map for sub dof map i (for a mixed element)
-  virtual ufc::dof_map* create_sub_dof_map(unsigned int i) const;
-
-};
-
-/// This class defines the interface for a local-to-global mapping of
-/// degrees of freedom (dofs).
-
-class UFC_MagmaEquationsLinearForm_dof_map_1_1: public ufc::dof_map
-{
-private:
-
-  unsigned int __global_dimension;
-
-public:
-
-  /// Constructor
-  UFC_MagmaEquationsLinearForm_dof_map_1_1();
-
-  /// Destructor
-  virtual ~UFC_MagmaEquationsLinearForm_dof_map_1_1();
-
-  /// Return a string identifying the dof map
-  virtual const char* signature() const;
-
-  /// Return true iff mesh entities of topological dimension d are needed
-  virtual bool needs_mesh_entities(unsigned int d) const;
-
-  /// Initialize dof map for mesh (return true iff init_cell() is needed)
-  virtual bool init_mesh(const ufc::mesh& m);
-
-  /// Initialize dof map for given cell
-  virtual void init_cell(const ufc::mesh& m,
-                         const ufc::cell& c);
-
-  /// Finish initialization of dof map for cells
-  virtual void init_cell_finalize();
-
-  /// Return the dimension of the global finite element function space
-  virtual unsigned int global_dimension() const;
-
-  /// Return the dimension of the local finite element function space
-  virtual unsigned int local_dimension() const;
-
-  // Return the geometric dimension of the coordinates this dof map provides
-  virtual unsigned int geometric_dimension() const;
-
-  /// Return the number of dofs on each cell facet
-  virtual unsigned int num_facet_dofs() const;
-
-  /// Return the number of dofs associated with each cell entity of dimension d
-  virtual unsigned int num_entity_dofs(unsigned int d) const;
-
-  /// Tabulate the local-to-global mapping of dofs on a cell
-  virtual void tabulate_dofs(unsigned int* dofs,
-                             const ufc::mesh& m,
-                             const ufc::cell& c) const;
-
-  /// Tabulate the local-to-local mapping from facet dofs to cell dofs
-  virtual void tabulate_facet_dofs(unsigned int* dofs,
-                                   unsigned int facet) const;
-
-  /// Tabulate the local-to-local mapping of dofs on entity (d, i)
-  virtual void tabulate_entity_dofs(unsigned int* dofs,
-                                    unsigned int d, unsigned int i) const;
-
-  /// Tabulate the coordinates of all dofs on a cell
-  virtual void tabulate_coordinates(double** coordinates,
-                                    const ufc::cell& c) const;
-
-  /// Return the number of sub dof maps (for a mixed element)
-  virtual unsigned int num_sub_dof_maps() const;
-
-  /// Create a new dof_map for sub dof map i (for a mixed element)
-  virtual ufc::dof_map* create_sub_dof_map(unsigned int i) const;
-
-};
-
-/// This class defines the interface for a local-to-global mapping of
-/// degrees of freedom (dofs).
-
-class UFC_MagmaEquationsLinearForm_dof_map_1: public ufc::dof_map
-{
-private:
-
-  unsigned int __global_dimension;
-
-public:
-
-  /// Constructor
-  UFC_MagmaEquationsLinearForm_dof_map_1();
-
-  /// Destructor
-  virtual ~UFC_MagmaEquationsLinearForm_dof_map_1();
-
-  /// Return a string identifying the dof map
-  virtual const char* signature() const;
-
-  /// Return true iff mesh entities of topological dimension d are needed
-  virtual bool needs_mesh_entities(unsigned int d) const;
-
-  /// Initialize dof map for mesh (return true iff init_cell() is needed)
-  virtual bool init_mesh(const ufc::mesh& m);
-
-  /// Initialize dof map for given cell
-  virtual void init_cell(const ufc::mesh& m,
-                         const ufc::cell& c);
-
-  /// Finish initialization of dof map for cells
-  virtual void init_cell_finalize();
-
-  /// Return the dimension of the global finite element function space
-  virtual unsigned int global_dimension() const;
-
-  /// Return the dimension of the local finite element function space
-  virtual unsigned int local_dimension() const;
-
-  // Return the geometric dimension of the coordinates this dof map provides
-  virtual unsigned int geometric_dimension() const;
-
-  /// Return the number of dofs on each cell facet
-  virtual unsigned int num_facet_dofs() const;
-
-  /// Return the number of dofs associated with each cell entity of dimension d
-  virtual unsigned int num_entity_dofs(unsigned int d) const;
-
-  /// Tabulate the local-to-global mapping of dofs on a cell
-  virtual void tabulate_dofs(unsigned int* dofs,
-                             const ufc::mesh& m,
-                             const ufc::cell& c) const;
-
-  /// Tabulate the local-to-local mapping from facet dofs to cell dofs
-  virtual void tabulate_facet_dofs(unsigned int* dofs,
-                                   unsigned int facet) const;
-
-  /// Tabulate the local-to-local mapping of dofs on entity (d, i)
-  virtual void tabulate_entity_dofs(unsigned int* dofs,
-                                    unsigned int d, unsigned int i) const;
-
-  /// Tabulate the coordinates of all dofs on a cell
-  virtual void tabulate_coordinates(double** coordinates,
-                                    const ufc::cell& c) const;
-
-  /// Return the number of sub dof maps (for a mixed element)
-  virtual unsigned int num_sub_dof_maps() const;
-
-  /// Create a new dof_map for sub dof map i (for a mixed element)
-  virtual ufc::dof_map* create_sub_dof_map(unsigned int i) const;
-
-};
-
-/// This class defines the interface for a local-to-global mapping of
-/// degrees of freedom (dofs).
-
-class UFC_MagmaEquationsLinearForm_dof_map_2: public ufc::dof_map
-{
-private:
-
-  unsigned int __global_dimension;
-
-public:
-
-  /// Constructor
-  UFC_MagmaEquationsLinearForm_dof_map_2();
-
-  /// Destructor
-  virtual ~UFC_MagmaEquationsLinearForm_dof_map_2();
-
-  /// Return a string identifying the dof map
-  virtual const char* signature() const;
-
-  /// Return true iff mesh entities of topological dimension d are needed
-  virtual bool needs_mesh_entities(unsigned int d) const;
-
-  /// Initialize dof map for mesh (return true iff init_cell() is needed)
-  virtual bool init_mesh(const ufc::mesh& m);
-
-  /// Initialize dof map for given cell
-  virtual void init_cell(const ufc::mesh& m,
-                         const ufc::cell& c);
-
-  /// Finish initialization of dof map for cells
-  virtual void init_cell_finalize();
-
-  /// Return the dimension of the global finite element function space
-  virtual unsigned int global_dimension() const;
-
-  /// Return the dimension of the local finite element function space
-  virtual unsigned int local_dimension() const;
-
-  // Return the geometric dimension of the coordinates this dof map provides
-  virtual unsigned int geometric_dimension() const;
-
-  /// Return the number of dofs on each cell facet
-  virtual unsigned int num_facet_dofs() const;
-
-  /// Return the number of dofs associated with each cell entity of dimension d
-  virtual unsigned int num_entity_dofs(unsigned int d) const;
-
-  /// Tabulate the local-to-global mapping of dofs on a cell
-  virtual void tabulate_dofs(unsigned int* dofs,
-                             const ufc::mesh& m,
-                             const ufc::cell& c) const;
-
-  /// Tabulate the local-to-local mapping from facet dofs to cell dofs
-  virtual void tabulate_facet_dofs(unsigned int* dofs,
-                                   unsigned int facet) const;
-
-  /// Tabulate the local-to-local mapping of dofs on entity (d, i)
-  virtual void tabulate_entity_dofs(unsigned int* dofs,
-                                    unsigned int d, unsigned int i) const;
-
-  /// Tabulate the coordinates of all dofs on a cell
-  virtual void tabulate_coordinates(double** coordinates,
-                                    const ufc::cell& c) const;
-
-  /// Return the number of sub dof maps (for a mixed element)
-  virtual unsigned int num_sub_dof_maps() const;
-
-  /// Create a new dof_map for sub dof map i (for a mixed element)
-  virtual ufc::dof_map* create_sub_dof_map(unsigned int i) const;
-
-};
-
-/// This class defines the interface for a local-to-global mapping of
-/// degrees of freedom (dofs).
-
-class UFC_MagmaEquationsLinearForm_dof_map_3: public ufc::dof_map
-{
-private:
-
-  unsigned int __global_dimension;
-
-public:
-
-  /// Constructor
-  UFC_MagmaEquationsLinearForm_dof_map_3();
-
-  /// Destructor
-  virtual ~UFC_MagmaEquationsLinearForm_dof_map_3();
-
-  /// Return a string identifying the dof map
-  virtual const char* signature() const;
-
-  /// Return true iff mesh entities of topological dimension d are needed
-  virtual bool needs_mesh_entities(unsigned int d) const;
-
-  /// Initialize dof map for mesh (return true iff init_cell() is needed)
-  virtual bool init_mesh(const ufc::mesh& m);
-
-  /// Initialize dof map for given cell
-  virtual void init_cell(const ufc::mesh& m,
-                         const ufc::cell& c);
-
-  /// Finish initialization of dof map for cells
-  virtual void init_cell_finalize();
-
-  /// Return the dimension of the global finite element function space
-  virtual unsigned int global_dimension() const;
-
-  /// Return the dimension of the local finite element function space
-  virtual unsigned int local_dimension() const;
-
-  // Return the geometric dimension of the coordinates this dof map provides
-  virtual unsigned int geometric_dimension() const;
-
-  /// Return the number of dofs on each cell facet
-  virtual unsigned int num_facet_dofs() const;
-
-  /// Return the number of dofs associated with each cell entity of dimension d
-  virtual unsigned int num_entity_dofs(unsigned int d) const;
-
-  /// Tabulate the local-to-global mapping of dofs on a cell
-  virtual void tabulate_dofs(unsigned int* dofs,
-                             const ufc::mesh& m,
-                             const ufc::cell& c) const;
-
-  /// Tabulate the local-to-local mapping from facet dofs to cell dofs
-  virtual void tabulate_facet_dofs(unsigned int* dofs,
-                                   unsigned int facet) const;
-
-  /// Tabulate the local-to-local mapping of dofs on entity (d, i)
-  virtual void tabulate_entity_dofs(unsigned int* dofs,
-                                    unsigned int d, unsigned int i) const;
-
-  /// Tabulate the coordinates of all dofs on a cell
-  virtual void tabulate_coordinates(double** coordinates,
-                                    const ufc::cell& c) const;
-
-  /// Return the number of sub dof maps (for a mixed element)
-  virtual unsigned int num_sub_dof_maps() const;
-
-  /// Create a new dof_map for sub dof map i (for a mixed element)
-  virtual ufc::dof_map* create_sub_dof_map(unsigned int i) const;
-
-};
-
-/// This class defines the interface for a local-to-global mapping of
-/// degrees of freedom (dofs).
-
-class UFC_MagmaEquationsLinearForm_dof_map_4_0: public ufc::dof_map
-{
-private:
-
-  unsigned int __global_dimension;
-
-public:
-
-  /// Constructor
-  UFC_MagmaEquationsLinearForm_dof_map_4_0();
-
-  /// Destructor
-  virtual ~UFC_MagmaEquationsLinearForm_dof_map_4_0();
-
-  /// Return a string identifying the dof map
-  virtual const char* signature() const;
-
-  /// Return true iff mesh entities of topological dimension d are needed
-  virtual bool needs_mesh_entities(unsigned int d) const;
-
-  /// Initialize dof map for mesh (return true iff init_cell() is needed)
-  virtual bool init_mesh(const ufc::mesh& m);
-
-  /// Initialize dof map for given cell
-  virtual void init_cell(const ufc::mesh& m,
-                         const ufc::cell& c);
-
-  /// Finish initialization of dof map for cells
-  virtual void init_cell_finalize();
-
-  /// Return the dimension of the global finite element function space
-  virtual unsigned int global_dimension() const;
-
-  /// Return the dimension of the local finite element function space
-  virtual unsigned int local_dimension() const;
-
-  // Return the geometric dimension of the coordinates this dof map provides
-  virtual unsigned int geometric_dimension() const;
-
-  /// Return the number of dofs on each cell facet
-  virtual unsigned int num_facet_dofs() const;
-
-  /// Return the number of dofs associated with each cell entity of dimension d
-  virtual unsigned int num_entity_dofs(unsigned int d) const;
-
-  /// Tabulate the local-to-global mapping of dofs on a cell
-  virtual void tabulate_dofs(unsigned int* dofs,
-                             const ufc::mesh& m,
-                             const ufc::cell& c) const;
-
-  /// Tabulate the local-to-local mapping from facet dofs to cell dofs
-  virtual void tabulate_facet_dofs(unsigned int* dofs,
-                                   unsigned int facet) const;
-
-  /// Tabulate the local-to-local mapping of dofs on entity (d, i)
-  virtual void tabulate_entity_dofs(unsigned int* dofs,
-                                    unsigned int d, unsigned int i) const;
-
-  /// Tabulate the coordinates of all dofs on a cell
-  virtual void tabulate_coordinates(double** coordinates,
-                                    const ufc::cell& c) const;
-
-  /// Return the number of sub dof maps (for a mixed element)
-  virtual unsigned int num_sub_dof_maps() const;
-
-  /// Create a new dof_map for sub dof map i (for a mixed element)
-  virtual ufc::dof_map* create_sub_dof_map(unsigned int i) const;
-
-};
-
-/// This class defines the interface for a local-to-global mapping of
-/// degrees of freedom (dofs).
-
-class UFC_MagmaEquationsLinearForm_dof_map_4_1: public ufc::dof_map
-{
-private:
-
-  unsigned int __global_dimension;
-
-public:
-
-  /// Constructor
-  UFC_MagmaEquationsLinearForm_dof_map_4_1();
-
-  /// Destructor
-  virtual ~UFC_MagmaEquationsLinearForm_dof_map_4_1();
-
-  /// Return a string identifying the dof map
-  virtual const char* signature() const;
-
-  /// Return true iff mesh entities of topological dimension d are needed
-  virtual bool needs_mesh_entities(unsigned int d) const;
-
-  /// Initialize dof map for mesh (return true iff init_cell() is needed)
-  virtual bool init_mesh(const ufc::mesh& m);
-
-  /// Initialize dof map for given cell
-  virtual void init_cell(const ufc::mesh& m,
-                         const ufc::cell& c);
-
-  /// Finish initialization of dof map for cells
-  virtual void init_cell_finalize();
-
-  /// Return the dimension of the global finite element function space
-  virtual unsigned int global_dimension() const;
-
-  /// Return the dimension of the local finite element function space
-  virtual unsigned int local_dimension() const;
-
-  // Return the geometric dimension of the coordinates this dof map provides
-  virtual unsigned int geometric_dimension() const;
-
-  /// Return the number of dofs on each cell facet
-  virtual unsigned int num_facet_dofs() const;
-
-  /// Return the number of dofs associated with each cell entity of dimension d
-  virtual unsigned int num_entity_dofs(unsigned int d) const;
-
-  /// Tabulate the local-to-global mapping of dofs on a cell
-  virtual void tabulate_dofs(unsigned int* dofs,
-                             const ufc::mesh& m,
-                             const ufc::cell& c) const;
-
-  /// Tabulate the local-to-local mapping from facet dofs to cell dofs
-  virtual void tabulate_facet_dofs(unsigned int* dofs,
-                                   unsigned int facet) const;
-
-  /// Tabulate the local-to-local mapping of dofs on entity (d, i)
-  virtual void tabulate_entity_dofs(unsigned int* dofs,
-                                    unsigned int d, unsigned int i) const;
-
-  /// Tabulate the coordinates of all dofs on a cell
-  virtual void tabulate_coordinates(double** coordinates,
-                                    const ufc::cell& c) const;
-
-  /// Return the number of sub dof maps (for a mixed element)
-  virtual unsigned int num_sub_dof_maps() const;
-
-  /// Create a new dof_map for sub dof map i (for a mixed element)
-  virtual ufc::dof_map* create_sub_dof_map(unsigned int i) const;
-
-};
-
-/// This class defines the interface for a local-to-global mapping of
-/// degrees of freedom (dofs).
-
-class UFC_MagmaEquationsLinearForm_dof_map_4: public ufc::dof_map
-{
-private:
-
-  unsigned int __global_dimension;
-
-public:
-
-  /// Constructor
-  UFC_MagmaEquationsLinearForm_dof_map_4();
-
-  /// Destructor
-  virtual ~UFC_MagmaEquationsLinearForm_dof_map_4();
-
-  /// Return a string identifying the dof map
-  virtual const char* signature() const;
-
-  /// Return true iff mesh entities of topological dimension d are needed
-  virtual bool needs_mesh_entities(unsigned int d) const;
-
-  /// Initialize dof map for mesh (return true iff init_cell() is needed)
-  virtual bool init_mesh(const ufc::mesh& m);
-
-  /// Initialize dof map for given cell
-  virtual void init_cell(const ufc::mesh& m,
-                         const ufc::cell& c);
-
-  /// Finish initialization of dof map for cells
-  virtual void init_cell_finalize();
-
-  /// Return the dimension of the global finite element function space
-  virtual unsigned int global_dimension() const;
-
-  /// Return the dimension of the local finite element function space
-  virtual unsigned int local_dimension() const;
-
-  // Return the geometric dimension of the coordinates this dof map provides
-  virtual unsigned int geometric_dimension() const;
-
-  /// Return the number of dofs on each cell facet
-  virtual unsigned int num_facet_dofs() const;
-
-  /// Return the number of dofs associated with each cell entity of dimension d
-  virtual unsigned int num_entity_dofs(unsigned int d) const;
-
-  /// Tabulate the local-to-global mapping of dofs on a cell
-  virtual void tabulate_dofs(unsigned int* dofs,
-                             const ufc::mesh& m,
-                             const ufc::cell& c) const;
-
-  /// Tabulate the local-to-local mapping from facet dofs to cell dofs
-  virtual void tabulate_facet_dofs(unsigned int* dofs,
-                                   unsigned int facet) const;
-
-  /// Tabulate the local-to-local mapping of dofs on entity (d, i)
-  virtual void tabulate_entity_dofs(unsigned int* dofs,
-                                    unsigned int d, unsigned int i) const;
-
-  /// Tabulate the coordinates of all dofs on a cell
-  virtual void tabulate_coordinates(double** coordinates,
-                                    const ufc::cell& c) const;
-
-  /// Return the number of sub dof maps (for a mixed element)
-  virtual unsigned int num_sub_dof_maps() const;
-
-  /// Create a new dof_map for sub dof map i (for a mixed element)
-  virtual ufc::dof_map* create_sub_dof_map(unsigned int i) const;
-
-};
-
-/// This class defines the interface for a local-to-global mapping of
-/// degrees of freedom (dofs).
-
-class UFC_MagmaEquationsLinearForm_dof_map_5: public ufc::dof_map
-{
-private:
-
-  unsigned int __global_dimension;
-
-public:
-
-  /// Constructor
-  UFC_MagmaEquationsLinearForm_dof_map_5();
-
-  /// Destructor
-  virtual ~UFC_MagmaEquationsLinearForm_dof_map_5();
-
-  /// Return a string identifying the dof map
-  virtual const char* signature() const;
-
-  /// Return true iff mesh entities of topological dimension d are needed
-  virtual bool needs_mesh_entities(unsigned int d) const;
-
-  /// Initialize dof map for mesh (return true iff init_cell() is needed)
-  virtual bool init_mesh(const ufc::mesh& m);
-
-  /// Initialize dof map for given cell
-  virtual void init_cell(const ufc::mesh& m,
-                         const ufc::cell& c);
-
-  /// Finish initialization of dof map for cells
-  virtual void init_cell_finalize();
-
-  /// Return the dimension of the global finite element function space
-  virtual unsigned int global_dimension() const;
-
-  /// Return the dimension of the local finite element function space
-  virtual unsigned int local_dimension() const;
-
-  // Return the geometric dimension of the coordinates this dof map provides
-  virtual unsigned int geometric_dimension() const;
-
-  /// Return the number of dofs on each cell facet
-  virtual unsigned int num_facet_dofs() const;
-
-  /// Return the number of dofs associated with each cell entity of dimension d
-  virtual unsigned int num_entity_dofs(unsigned int d) const;
-
-  /// Tabulate the local-to-global mapping of dofs on a cell
-  virtual void tabulate_dofs(unsigned int* dofs,
-                             const ufc::mesh& m,
-                             const ufc::cell& c) const;
-
-  /// Tabulate the local-to-local mapping from facet dofs to cell dofs
-  virtual void tabulate_facet_dofs(unsigned int* dofs,
-                                   unsigned int facet) const;
-
-  /// Tabulate the local-to-local mapping of dofs on entity (d, i)
-  virtual void tabulate_entity_dofs(unsigned int* dofs,
-                                    unsigned int d, unsigned int i) const;
-
-  /// Tabulate the coordinates of all dofs on a cell
-  virtual void tabulate_coordinates(double** coordinates,
-                                    const ufc::cell& c) const;
-
-  /// Return the number of sub dof maps (for a mixed element)
-  virtual unsigned int num_sub_dof_maps() const;
-
-  /// Create a new dof_map for sub dof map i (for a mixed element)
-  virtual ufc::dof_map* create_sub_dof_map(unsigned int i) const;
-
-};
-
-/// This class defines the interface for a local-to-global mapping of
-/// degrees of freedom (dofs).
-
-class UFC_MagmaEquationsLinearForm_dof_map_6: public ufc::dof_map
-{
-private:
-
-  unsigned int __global_dimension;
-
-public:
-
-  /// Constructor
-  UFC_MagmaEquationsLinearForm_dof_map_6();
-
-  /// Destructor
-  virtual ~UFC_MagmaEquationsLinearForm_dof_map_6();
-
-  /// Return a string identifying the dof map
-  virtual const char* signature() const;
-
-  /// Return true iff mesh entities of topological dimension d are needed
-  virtual bool needs_mesh_entities(unsigned int d) const;
-
-  /// Initialize dof map for mesh (return true iff init_cell() is needed)
-  virtual bool init_mesh(const ufc::mesh& m);
-
-  /// Initialize dof map for given cell
-  virtual void init_cell(const ufc::mesh& m,
-                         const ufc::cell& c);
-
-  /// Finish initialization of dof map for cells
-  virtual void init_cell_finalize();
-
-  /// Return the dimension of the global finite element function space
-  virtual unsigned int global_dimension() const;
-
-  /// Return the dimension of the local finite element function space
-  virtual unsigned int local_dimension() const;
-
-  // Return the geometric dimension of the coordinates this dof map provides
-  virtual unsigned int geometric_dimension() const;
-
-  /// Return the number of dofs on each cell facet
-  virtual unsigned int num_facet_dofs() const;
-
-  /// Return the number of dofs associated with each cell entity of dimension d
-  virtual unsigned int num_entity_dofs(unsigned int d) const;
-
-  /// Tabulate the local-to-global mapping of dofs on a cell
-  virtual void tabulate_dofs(unsigned int* dofs,
-                             const ufc::mesh& m,
-                             const ufc::cell& c) const;
-
-  /// Tabulate the local-to-local mapping from facet dofs to cell dofs
-  virtual void tabulate_facet_dofs(unsigned int* dofs,
-                                   unsigned int facet) const;
-
-  /// Tabulate the local-to-local mapping of dofs on entity (d, i)
-  virtual void tabulate_entity_dofs(unsigned int* dofs,
-                                    unsigned int d, unsigned int i) const;
-
-  /// Tabulate the coordinates of all dofs on a cell
-  virtual void tabulate_coordinates(double** coordinates,
-                                    const ufc::cell& c) const;
-
-  /// Return the number of sub dof maps (for a mixed element)
-  virtual unsigned int num_sub_dof_maps() const;
-
-  /// Create a new dof_map for sub dof map i (for a mixed element)
-  virtual ufc::dof_map* create_sub_dof_map(unsigned int i) const;
-
-};
-
-/// This class defines the interface for a local-to-global mapping of
-/// degrees of freedom (dofs).
-
-class UFC_MagmaEquationsLinearForm_dof_map_7: public ufc::dof_map
-{
-private:
-
-  unsigned int __global_dimension;
-
-public:
-
-  /// Constructor
-  UFC_MagmaEquationsLinearForm_dof_map_7();
-
-  /// Destructor
-  virtual ~UFC_MagmaEquationsLinearForm_dof_map_7();
-
-  /// Return a string identifying the dof map
-  virtual const char* signature() const;
-
-  /// Return true iff mesh entities of topological dimension d are needed
-  virtual bool needs_mesh_entities(unsigned int d) const;
-
-  /// Initialize dof map for mesh (return true iff init_cell() is needed)
-  virtual bool init_mesh(const ufc::mesh& m);
-
-  /// Initialize dof map for given cell
-  virtual void init_cell(const ufc::mesh& m,
-                         const ufc::cell& c);
-
-  /// Finish initialization of dof map for cells
-  virtual void init_cell_finalize();
-
-  /// Return the dimension of the global finite element function space
-  virtual unsigned int global_dimension() const;
-
-  /// Return the dimension of the local finite element function space
-  virtual unsigned int local_dimension() const;
-
-  // Return the geometric dimension of the coordinates this dof map provides
-  virtual unsigned int geometric_dimension() const;
-
-  /// Return the number of dofs on each cell facet
-  virtual unsigned int num_facet_dofs() const;
-
-  /// Return the number of dofs associated with each cell entity of dimension d
-  virtual unsigned int num_entity_dofs(unsigned int d) const;
-
-  /// Tabulate the local-to-global mapping of dofs on a cell
-  virtual void tabulate_dofs(unsigned int* dofs,
-                             const ufc::mesh& m,
-                             const ufc::cell& c) const;
-
-  /// Tabulate the local-to-local mapping from facet dofs to cell dofs
-  virtual void tabulate_facet_dofs(unsigned int* dofs,
-                                   unsigned int facet) const;
-
-  /// Tabulate the local-to-local mapping of dofs on entity (d, i)
-  virtual void tabulate_entity_dofs(unsigned int* dofs,
-                                    unsigned int d, unsigned int i) const;
-
-  /// Tabulate the coordinates of all dofs on a cell
-  virtual void tabulate_coordinates(double** coordinates,
-                                    const ufc::cell& c) const;
-
-  /// Return the number of sub dof maps (for a mixed element)
-  virtual unsigned int num_sub_dof_maps() const;
-
-  /// Create a new dof_map for sub dof map i (for a mixed element)
-  virtual ufc::dof_map* create_sub_dof_map(unsigned int i) const;
-
-};
-
-/// This class defines the interface for a local-to-global mapping of
-/// degrees of freedom (dofs).
-
-class UFC_MagmaEquationsLinearForm_dof_map_8: public ufc::dof_map
-{
-private:
-
-  unsigned int __global_dimension;
-
-public:
-
-  /// Constructor
-  UFC_MagmaEquationsLinearForm_dof_map_8();
-
-  /// Destructor
-  virtual ~UFC_MagmaEquationsLinearForm_dof_map_8();
-
-  /// Return a string identifying the dof map
-  virtual const char* signature() const;
-
-  /// Return true iff mesh entities of topological dimension d are needed
-  virtual bool needs_mesh_entities(unsigned int d) const;
-
-  /// Initialize dof map for mesh (return true iff init_cell() is needed)
-  virtual bool init_mesh(const ufc::mesh& m);
-
-  /// Initialize dof map for given cell
-  virtual void init_cell(const ufc::mesh& m,
-                         const ufc::cell& c);
-
-  /// Finish initialization of dof map for cells
-  virtual void init_cell_finalize();
-
-  /// Return the dimension of the global finite element function space
-  virtual unsigned int global_dimension() const;
-
-  /// Return the dimension of the local finite element function space
-  virtual unsigned int local_dimension() const;
+class magmaequations_1_finite_element_0_0: public ufc::finite_element
+{
+public:
+
+  /// Constructor
+  magmaequations_1_finite_element_0_0();
+
+  /// Destructor
+  virtual ~magmaequations_1_finite_element_0_0();
+
+  /// Return a string identifying the finite element
+  virtual const char* signature() const;
+
+  /// Return the cell shape
+  virtual ufc::shape cell_shape() const;
+
+  /// Return the dimension of the finite element function space
+  virtual unsigned int space_dimension() const;
+
+  /// Return the rank of the value space
+  virtual unsigned int value_rank() const;
+
+  /// Return the dimension of the value space for axis i
+  virtual unsigned int value_dimension(unsigned int i) const;
+
+  /// Evaluate basis function i at given point in cell
+  virtual void evaluate_basis(unsigned int i,
+                              double* values,
+                              const double* coordinates,
+                              const ufc::cell& c) const;
+
+  /// Evaluate all basis functions at given point in cell
+  virtual void evaluate_basis_all(double* values,
+                                  const double* coordinates,
+                                  const ufc::cell& c) const;
+
+  /// Evaluate order n derivatives of basis function i at given point in cell
+  virtual void evaluate_basis_derivatives(unsigned int i,
+                                          unsigned int n,
+                                          double* values,
+                                          const double* coordinates,
+                                          const ufc::cell& c) const;
+
+  /// Evaluate order n derivatives of all basis functions at given point in cell
+  virtual void evaluate_basis_derivatives_all(unsigned int n,
+                                              double* values,
+                                              const double* coordinates,
+                                              const ufc::cell& c) const;
+
+  /// Evaluate linear functional for dof i on the function f
+  virtual double evaluate_dof(unsigned int i,
+                              const ufc::function& f,
+                              const ufc::cell& c) const;
+
+  /// Evaluate linear functionals for all dofs on the function f
+  virtual void evaluate_dofs(double* values,
+                             const ufc::function& f,
+                             const ufc::cell& c) const;
+
+  /// Interpolate vertex values from dof values
+  virtual void interpolate_vertex_values(double* vertex_values,
+                                         const double* dof_values,
+                                         const ufc::cell& c) const;
+
+  /// Return the number of sub elements (for a mixed element)
+  virtual unsigned int num_sub_elements() const;
+
+  /// Create a new finite element for sub element i (for a mixed element)
+  virtual ufc::finite_element* create_sub_element(unsigned int i) const;
+
+};
+
+/// This class defines the interface for a finite element.
+
+class magmaequations_1_finite_element_0_1: public ufc::finite_element
+{
+public:
+
+  /// Constructor
+  magmaequations_1_finite_element_0_1();
+
+  /// Destructor
+  virtual ~magmaequations_1_finite_element_0_1();
+
+  /// Return a string identifying the finite element
+  virtual const char* signature() const;
+
+  /// Return the cell shape
+  virtual ufc::shape cell_shape() const;
+
+  /// Return the dimension of the finite element function space
+  virtual unsigned int space_dimension() const;
+
+  /// Return the rank of the value space
+  virtual unsigned int value_rank() const;
+
+  /// Return the dimension of the value space for axis i
+  virtual unsigned int value_dimension(unsigned int i) const;
+
+  /// Evaluate basis function i at given point in cell
+  virtual void evaluate_basis(unsigned int i,
+                              double* values,
+                              const double* coordinates,
+                              const ufc::cell& c) const;
+
+  /// Evaluate all basis functions at given point in cell
+  virtual void evaluate_basis_all(double* values,
+                                  const double* coordinates,
+                                  const ufc::cell& c) const;
+
+  /// Evaluate order n derivatives of basis function i at given point in cell
+  virtual void evaluate_basis_derivatives(unsigned int i,
+                                          unsigned int n,
+                                          double* values,
+                                          const double* coordinates,
+                                          const ufc::cell& c) const;
+
+  /// Evaluate order n derivatives of all basis functions at given point in cell
+  virtual void evaluate_basis_derivatives_all(unsigned int n,
+                                              double* values,
+                                              const double* coordinates,
+                                              const ufc::cell& c) const;
+
+  /// Evaluate linear functional for dof i on the function f
+  virtual double evaluate_dof(unsigned int i,
+                              const ufc::function& f,
+                              const ufc::cell& c) const;
+
+  /// Evaluate linear functionals for all dofs on the function f
+  virtual void evaluate_dofs(double* values,
+                             const ufc::function& f,
+                             const ufc::cell& c) const;
+
+  /// Interpolate vertex values from dof values
+  virtual void interpolate_vertex_values(double* vertex_values,
+                                         const double* dof_values,
+                                         const ufc::cell& c) const;
+
+  /// Return the number of sub elements (for a mixed element)
+  virtual unsigned int num_sub_elements() const;
+
+  /// Create a new finite element for sub element i (for a mixed element)
+  virtual ufc::finite_element* create_sub_element(unsigned int i) const;
+
+};
+
+/// This class defines the interface for a finite element.
+
+class magmaequations_1_finite_element_0: public ufc::finite_element
+{
+public:
+
+  /// Constructor
+  magmaequations_1_finite_element_0();
+
+  /// Destructor
+  virtual ~magmaequations_1_finite_element_0();
+
+  /// Return a string identifying the finite element
+  virtual const char* signature() const;
+
+  /// Return the cell shape
+  virtual ufc::shape cell_shape() const;
+
+  /// Return the dimension of the finite element function space
+  virtual unsigned int space_dimension() const;
+
+  /// Return the rank of the value space
+  virtual unsigned int value_rank() const;
+
+  /// Return the dimension of the value space for axis i
+  virtual unsigned int value_dimension(unsigned int i) const;
+
+  /// Evaluate basis function i at given point in cell
+  virtual void evaluate_basis(unsigned int i,
+                              double* values,
+                              const double* coordinates,
+                              const ufc::cell& c) const;
+
+  /// Evaluate all basis functions at given point in cell
+  virtual void evaluate_basis_all(double* values,
+                                  const double* coordinates,
+                                  const ufc::cell& c) const;
+
+  /// Evaluate order n derivatives of basis function i at given point in cell
+  virtual void evaluate_basis_derivatives(unsigned int i,
+                                          unsigned int n,
+                                          double* values,
+                                          const double* coordinates,
+                                          const ufc::cell& c) const;
+
+  /// Evaluate order n derivatives of all basis functions at given point in cell
+  virtual void evaluate_basis_derivatives_all(unsigned int n,
+                                              double* values,
+                                              const double* coordinates,
+                                              const ufc::cell& c) const;
+
+  /// Evaluate linear functional for dof i on the function f
+  virtual double evaluate_dof(unsigned int i,
+                              const ufc::function& f,
+                              const ufc::cell& c) const;
+
+  /// Evaluate linear functionals for all dofs on the function f
+  virtual void evaluate_dofs(double* values,
+                             const ufc::function& f,
+                             const ufc::cell& c) const;
+
+  /// Interpolate vertex values from dof values
+  virtual void interpolate_vertex_values(double* vertex_values,
+                                         const double* dof_values,
+                                         const ufc::cell& c) const;
+
+  /// Return the number of sub elements (for a mixed element)
+  virtual unsigned int num_sub_elements() const;
+
+  /// Create a new finite element for sub element i (for a mixed element)
+  virtual ufc::finite_element* create_sub_element(unsigned int i) const;
+
+};
+
+/// This class defines the interface for a finite element.
+
+class magmaequations_1_finite_element_1_0: public ufc::finite_element
+{
+public:
+
+  /// Constructor
+  magmaequations_1_finite_element_1_0();
+
+  /// Destructor
+  virtual ~magmaequations_1_finite_element_1_0();
+
+  /// Return a string identifying the finite element
+  virtual const char* signature() const;
+
+  /// Return the cell shape
+  virtual ufc::shape cell_shape() const;
+
+  /// Return the dimension of the finite element function space
+  virtual unsigned int space_dimension() const;
+
+  /// Return the rank of the value space
+  virtual unsigned int value_rank() const;
+
+  /// Return the dimension of the value space for axis i
+  virtual unsigned int value_dimension(unsigned int i) const;
+
+  /// Evaluate basis function i at given point in cell
+  virtual void evaluate_basis(unsigned int i,
+                              double* values,
+                              const double* coordinates,
+                              const ufc::cell& c) const;
+
+  /// Evaluate all basis functions at given point in cell
+  virtual void evaluate_basis_all(double* values,
+                                  const double* coordinates,
+                                  const ufc::cell& c) const;
+
+  /// Evaluate order n derivatives of basis function i at given point in cell
+  virtual void evaluate_basis_derivatives(unsigned int i,
+                                          unsigned int n,
+                                          double* values,
+                                          const double* coordinates,
+                                          const ufc::cell& c) const;
+
+  /// Evaluate order n derivatives of all basis functions at given point in cell
+  virtual void evaluate_basis_derivatives_all(unsigned int n,
+                                              double* values,
+                                              const double* coordinates,
+                                              const ufc::cell& c) const;
+
+  /// Evaluate linear functional for dof i on the function f
+  virtual double evaluate_dof(unsigned int i,
+                              const ufc::function& f,
+                              const ufc::cell& c) const;
+
+  /// Evaluate linear functionals for all dofs on the function f
+  virtual void evaluate_dofs(double* values,
+                             const ufc::function& f,
+                             const ufc::cell& c) const;
+
+  /// Interpolate vertex values from dof values
+  virtual void interpolate_vertex_values(double* vertex_values,
+                                         const double* dof_values,
+                                         const ufc::cell& c) const;
+
+  /// Return the number of sub elements (for a mixed element)
+  virtual unsigned int num_sub_elements() const;
+
+  /// Create a new finite element for sub element i (for a mixed element)
+  virtual ufc::finite_element* create_sub_element(unsigned int i) const;
+
+};
+
+/// This class defines the interface for a finite element.
+
+class magmaequations_1_finite_element_1_1: public ufc::finite_element
+{
+public:
+
+  /// Constructor
+  magmaequations_1_finite_element_1_1();
+
+  /// Destructor
+  virtual ~magmaequations_1_finite_element_1_1();
+
+  /// Return a string identifying the finite element
+  virtual const char* signature() const;
+
+  /// Return the cell shape
+  virtual ufc::shape cell_shape() const;
+
+  /// Return the dimension of the finite element function space
+  virtual unsigned int space_dimension() const;
+
+  /// Return the rank of the value space
+  virtual unsigned int value_rank() const;
+
+  /// Return the dimension of the value space for axis i
+  virtual unsigned int value_dimension(unsigned int i) const;
+
+  /// Evaluate basis function i at given point in cell
+  virtual void evaluate_basis(unsigned int i,
+                              double* values,
+                              const double* coordinates,
+                              const ufc::cell& c) const;
+
+  /// Evaluate all basis functions at given point in cell
+  virtual void evaluate_basis_all(double* values,
+                                  const double* coordinates,
+                                  const ufc::cell& c) const;
+
+  /// Evaluate order n derivatives of basis function i at given point in cell
+  virtual void evaluate_basis_derivatives(unsigned int i,
+                                          unsigned int n,
+                                          double* values,
+                                          const double* coordinates,
+                                          const ufc::cell& c) const;
+
+  /// Evaluate order n derivatives of all basis functions at given point in cell
+  virtual void evaluate_basis_derivatives_all(unsigned int n,
+                                              double* values,
+                                              const double* coordinates,
+                                              const ufc::cell& c) const;
+
+  /// Evaluate linear functional for dof i on the function f
+  virtual double evaluate_dof(unsigned int i,
+                              const ufc::function& f,
+                              const ufc::cell& c) const;
+
+  /// Evaluate linear functionals for all dofs on the function f
+  virtual void evaluate_dofs(double* values,
+                             const ufc::function& f,
+                             const ufc::cell& c) const;
+
+  /// Interpolate vertex values from dof values
+  virtual void interpolate_vertex_values(double* vertex_values,
+                                         const double* dof_values,
+                                         const ufc::cell& c) const;
+
+  /// Return the number of sub elements (for a mixed element)
+  virtual unsigned int num_sub_elements() const;
+
+  /// Create a new finite element for sub element i (for a mixed element)
+  virtual ufc::finite_element* create_sub_element(unsigned int i) const;
+
+};
+
+/// This class defines the interface for a finite element.
+
+class magmaequations_1_finite_element_1: public ufc::finite_element
+{
+public:
+
+  /// Constructor
+  magmaequations_1_finite_element_1();
+
+  /// Destructor
+  virtual ~magmaequations_1_finite_element_1();
+
+  /// Return a string identifying the finite element
+  virtual const char* signature() const;
+
+  /// Return the cell shape
+  virtual ufc::shape cell_shape() const;
+
+  /// Return the dimension of the finite element function space
+  virtual unsigned int space_dimension() const;
+
+  /// Return the rank of the value space
+  virtual unsigned int value_rank() const;
+
+  /// Return the dimension of the value space for axis i
+  virtual unsigned int value_dimension(unsigned int i) const;
+
+  /// Evaluate basis function i at given point in cell
+  virtual void evaluate_basis(unsigned int i,
+                              double* values,
+                              const double* coordinates,
+                              const ufc::cell& c) const;
+
+  /// Evaluate all basis functions at given point in cell
+  virtual void evaluate_basis_all(double* values,
+                                  const double* coordinates,
+                                  const ufc::cell& c) const;
+
+  /// Evaluate order n derivatives of basis function i at given point in cell
+  virtual void evaluate_basis_derivatives(unsigned int i,
+                                          unsigned int n,
+                                          double* values,
+                                          const double* coordinates,
+                                          const ufc::cell& c) const;
+
+  /// Evaluate order n derivatives of all basis functions at given point in cell
+  virtual void evaluate_basis_derivatives_all(unsigned int n,
+                                              double* values,
+                                              const double* coordinates,
+                                              const ufc::cell& c) const;
+
+  /// Evaluate linear functional for dof i on the function f
+  virtual double evaluate_dof(unsigned int i,
+                              const ufc::function& f,
+                              const ufc::cell& c) const;
+
+  /// Evaluate linear functionals for all dofs on the function f
+  virtual void evaluate_dofs(double* values,
+                             const ufc::function& f,
+                             const ufc::cell& c) const;
+
+  /// Interpolate vertex values from dof values
+  virtual void interpolate_vertex_values(double* vertex_values,
+                                         const double* dof_values,
+                                         const ufc::cell& c) const;
+
+  /// Return the number of sub elements (for a mixed element)
+  virtual unsigned int num_sub_elements() const;
+
+  /// Create a new finite element for sub element i (for a mixed element)
+  virtual ufc::finite_element* create_sub_element(unsigned int i) const;
+
+};
+
+/// This class defines the interface for a finite element.
+
+class magmaequations_1_finite_element_2: public ufc::finite_element
+{
+public:
+
+  /// Constructor
+  magmaequations_1_finite_element_2();
+
+  /// Destructor
+  virtual ~magmaequations_1_finite_element_2();
+
+  /// Return a string identifying the finite element
+  virtual const char* signature() const;
+
+  /// Return the cell shape
+  virtual ufc::shape cell_shape() const;
+
+  /// Return the dimension of the finite element function space
+  virtual unsigned int space_dimension() const;
+
+  /// Return the rank of the value space
+  virtual unsigned int value_rank() const;
+
+  /// Return the dimension of the value space for axis i
+  virtual unsigned int value_dimension(unsigned int i) const;
+
+  /// Evaluate basis function i at given point in cell
+  virtual void evaluate_basis(unsigned int i,
+                              double* values,
+                              const double* coordinates,
+                              const ufc::cell& c) const;
+
+  /// Evaluate all basis functions at given point in cell
+  virtual void evaluate_basis_all(double* values,
+                                  const double* coordinates,
+                                  const ufc::cell& c) const;
+
+  /// Evaluate order n derivatives of basis function i at given point in cell
+  virtual void evaluate_basis_derivatives(unsigned int i,
+                                          unsigned int n,
+                                          double* values,
+                                          const double* coordinates,
+                                          const ufc::cell& c) const;
+
+  /// Evaluate order n derivatives of all basis functions at given point in cell
+  virtual void evaluate_basis_derivatives_all(unsigned int n,
+                                              double* values,
+                                              const double* coordinates,
+                                              const ufc::cell& c) const;
+
+  /// Evaluate linear functional for dof i on the function f
+  virtual double evaluate_dof(unsigned int i,
+                              const ufc::function& f,
+                              const ufc::cell& c) const;
+
+  /// Evaluate linear functionals for all dofs on the function f
+  virtual void evaluate_dofs(double* values,
+                             const ufc::function& f,
+                             const ufc::cell& c) const;
+
+  /// Interpolate vertex values from dof values
+  virtual void interpolate_vertex_values(double* vertex_values,
+                                         const double* dof_values,
+                                         const ufc::cell& c) const;
+
+  /// Return the number of sub elements (for a mixed element)
+  virtual unsigned int num_sub_elements() const;
+
+  /// Create a new finite element for sub element i (for a mixed element)
+  virtual ufc::finite_element* create_sub_element(unsigned int i) const;
+
+};
+
+/// This class defines the interface for a finite element.
+
+class magmaequations_1_finite_element_3: public ufc::finite_element
+{
+public:
+
+  /// Constructor
+  magmaequations_1_finite_element_3();
+
+  /// Destructor
+  virtual ~magmaequations_1_finite_element_3();
+
+  /// Return a string identifying the finite element
+  virtual const char* signature() const;
+
+  /// Return the cell shape
+  virtual ufc::shape cell_shape() const;
+
+  /// Return the dimension of the finite element function space
+  virtual unsigned int space_dimension() const;
+
+  /// Return the rank of the value space
+  virtual unsigned int value_rank() const;
+
+  /// Return the dimension of the value space for axis i
+  virtual unsigned int value_dimension(unsigned int i) const;
+
+  /// Evaluate basis function i at given point in cell
+  virtual void evaluate_basis(unsigned int i,
+                              double* values,
+                              const double* coordinates,
+                              const ufc::cell& c) const;
+
+  /// Evaluate all basis functions at given point in cell
+  virtual void evaluate_basis_all(double* values,
+                                  const double* coordinates,
+                                  const ufc::cell& c) const;
+
+  /// Evaluate order n derivatives of basis function i at given point in cell
+  virtual void evaluate_basis_derivatives(unsigned int i,
+                                          unsigned int n,
+                                          double* values,
+                                          const double* coordinates,
+                                          const ufc::cell& c) const;
+
+  /// Evaluate order n derivatives of all basis functions at given point in cell
+  virtual void evaluate_basis_derivatives_all(unsigned int n,
+                                              double* values,
+                                              const double* coordinates,
+                                              const ufc::cell& c) const;
+
+  /// Evaluate linear functional for dof i on the function f
+  virtual double evaluate_dof(unsigned int i,
+                              const ufc::function& f,
+                              const ufc::cell& c) const;
+
+  /// Evaluate linear functionals for all dofs on the function f
+  virtual void evaluate_dofs(double* values,
+                             const ufc::function& f,
+                             const ufc::cell& c) const;
+
+  /// Interpolate vertex values from dof values
+  virtual void interpolate_vertex_values(double* vertex_values,
+                                         const double* dof_values,
+                                         const ufc::cell& c) const;
+
+  /// Return the number of sub elements (for a mixed element)
+  virtual unsigned int num_sub_elements() const;
+
+  /// Create a new finite element for sub element i (for a mixed element)
+  virtual ufc::finite_element* create_sub_element(unsigned int i) const;
+
+};
+
+/// This class defines the interface for a finite element.
+
+class magmaequations_1_finite_element_4: public ufc::finite_element
+{
+public:
+
+  /// Constructor
+  magmaequations_1_finite_element_4();
+
+  /// Destructor
+  virtual ~magmaequations_1_finite_element_4();
+
+  /// Return a string identifying the finite element
+  virtual const char* signature() const;
+
+  /// Return the cell shape
+  virtual ufc::shape cell_shape() const;
+
+  /// Return the dimension of the finite element function space
+  virtual unsigned int space_dimension() const;
+
+  /// Return the rank of the value space
+  virtual unsigned int value_rank() const;
+
+  /// Return the dimension of the value space for axis i
+  virtual unsigned int value_dimension(unsigned int i) const;
+
+  /// Evaluate basis function i at given point in cell
+  virtual void evaluate_basis(unsigned int i,
+                              double* values,
+                              const double* coordinates,
+                              const ufc::cell& c) const;
+
+  /// Evaluate all basis functions at given point in cell
+  virtual void evaluate_basis_all(double* values,
+                                  const double* coordinates,
+                                  const ufc::cell& c) const;
+
+  /// Evaluate order n derivatives of basis function i at given point in cell
+  virtual void evaluate_basis_derivatives(unsigned int i,
+                                          unsigned int n,
+                                          double* values,
+                                          const double* coordinates,
+                                          const ufc::cell& c) const;
+
+  /// Evaluate order n derivatives of all basis functions at given point in cell
+  virtual void evaluate_basis_derivatives_all(unsigned int n,
+                                              double* values,
+                                              const double* coordinates,
+                                              const ufc::cell& c) const;
+
+  /// Evaluate linear functional for dof i on the function f
+  virtual double evaluate_dof(unsigned int i,
+                              const ufc::function& f,
+                              const ufc::cell& c) const;
+
+  /// Evaluate linear functionals for all dofs on the function f
+  virtual void evaluate_dofs(double* values,
+                             const ufc::function& f,
+                             const ufc::cell& c) const;
+
+  /// Interpolate vertex values from dof values
+  virtual void interpolate_vertex_values(double* vertex_values,
+                                         const double* dof_values,
+                                         const ufc::cell& c) const;
+
+  /// Return the number of sub elements (for a mixed element)
+  virtual unsigned int num_sub_elements() const;
+
+  /// Create a new finite element for sub element i (for a mixed element)
+  virtual ufc::finite_element* create_sub_element(unsigned int i) const;
+
+};
+
+/// This class defines the interface for a finite element.
+
+class magmaequations_1_finite_element_5: public ufc::finite_element
+{
+public:
+
+  /// Constructor
+  magmaequations_1_finite_element_5();
+
+  /// Destructor
+  virtual ~magmaequations_1_finite_element_5();
+
+  /// Return a string identifying the finite element
+  virtual const char* signature() const;
+
+  /// Return the cell shape
+  virtual ufc::shape cell_shape() const;
+
+  /// Return the dimension of the finite element function space
+  virtual unsigned int space_dimension() const;
+
+  /// Return the rank of the value space
+  virtual unsigned int value_rank() const;
+
+  /// Return the dimension of the value space for axis i
+  virtual unsigned int value_dimension(unsigned int i) const;
+
+  /// Evaluate basis function i at given point in cell
+  virtual void evaluate_basis(unsigned int i,
+                              double* values,
+                              const double* coordinates,
+                              const ufc::cell& c) const;
+
+  /// Evaluate all basis functions at given point in cell
+  virtual void evaluate_basis_all(double* values,
+                                  const double* coordinates,
+                                  const ufc::cell& c) const;
+
+  /// Evaluate order n derivatives of basis function i at given point in cell
+  virtual void evaluate_basis_derivatives(unsigned int i,
+                                          unsigned int n,
+                                          double* values,
+                                          const double* coordinates,
+                                          const ufc::cell& c) const;
+
+  /// Evaluate order n derivatives of all basis functions at given point in cell
+  virtual void evaluate_basis_derivatives_all(unsigned int n,
+                                              double* values,
+                                              const double* coordinates,
+                                              const ufc::cell& c) const;
+
+  /// Evaluate linear functional for dof i on the function f
+  virtual double evaluate_dof(unsigned int i,
+                              const ufc::function& f,
+                              const ufc::cell& c) const;
+
+  /// Evaluate linear functionals for all dofs on the function f
+  virtual void evaluate_dofs(double* values,
+                             const ufc::function& f,
+                             const ufc::cell& c) const;
+
+  /// Interpolate vertex values from dof values
+  virtual void interpolate_vertex_values(double* vertex_values,
+                                         const double* dof_values,
+                                         const ufc::cell& c) const;
+
+  /// Return the number of sub elements (for a mixed element)
+  virtual unsigned int num_sub_elements() const;
+
+  /// Create a new finite element for sub element i (for a mixed element)
+  virtual ufc::finite_element* create_sub_element(unsigned int i) const;
+
+};
+
+/// This class defines the interface for a finite element.
+
+class magmaequations_1_finite_element_6: public ufc::finite_element
+{
+public:
+
+  /// Constructor
+  magmaequations_1_finite_element_6();
+
+  /// Destructor
+  virtual ~magmaequations_1_finite_element_6();
+
+  /// Return a string identifying the finite element
+  virtual const char* signature() const;
+
+  /// Return the cell shape
+  virtual ufc::shape cell_shape() const;
+
+  /// Return the dimension of the finite element function space
+  virtual unsigned int space_dimension() const;
+
+  /// Return the rank of the value space
+  virtual unsigned int value_rank() const;
+
+  /// Return the dimension of the value space for axis i
+  virtual unsigned int value_dimension(unsigned int i) const;
+
+  /// Evaluate basis function i at given point in cell
+  virtual void evaluate_basis(unsigned int i,
+                              double* values,
+                              const double* coordinates,
+                              const ufc::cell& c) const;
+
+  /// Evaluate all basis functions at given point in cell
+  virtual void evaluate_basis_all(double* values,
+                                  const double* coordinates,
+                                  const ufc::cell& c) const;
+
+  /// Evaluate order n derivatives of basis function i at given point in cell
+  virtual void evaluate_basis_derivatives(unsigned int i,
+                                          unsigned int n,
+                                          double* values,
+                                          const double* coordinates,
+                                          const ufc::cell& c) const;
+
+  /// Evaluate order n derivatives of all basis functions at given point in cell
+  virtual void evaluate_basis_derivatives_all(unsigned int n,
+                                              double* values,
+                                              const double* coordinates,
+                                              const ufc::cell& c) const;
+
+  /// Evaluate linear functional for dof i on the function f
+  virtual double evaluate_dof(unsigned int i,
+                              const ufc::function& f,
+                              const ufc::cell& c) const;
+
+  /// Evaluate linear functionals for all dofs on the function f
+  virtual void evaluate_dofs(double* values,
+                             const ufc::function& f,
+                             const ufc::cell& c) const;
+
+  /// Interpolate vertex values from dof values
+  virtual void interpolate_vertex_values(double* vertex_values,
+                                         const double* dof_values,
+                                         const ufc::cell& c) const;
+
+  /// Return the number of sub elements (for a mixed element)
+  virtual unsigned int num_sub_elements() const;
+
+  /// Create a new finite element for sub element i (for a mixed element)
+  virtual ufc::finite_element* create_sub_element(unsigned int i) const;
+
+};
+
+/// This class defines the interface for a finite element.
+
+class magmaequations_1_finite_element_7: public ufc::finite_element
+{
+public:
+
+  /// Constructor
+  magmaequations_1_finite_element_7();
+
+  /// Destructor
+  virtual ~magmaequations_1_finite_element_7();
+
+  /// Return a string identifying the finite element
+  virtual const char* signature() const;
+
+  /// Return the cell shape
+  virtual ufc::shape cell_shape() const;
+
+  /// Return the dimension of the finite element function space
+  virtual unsigned int space_dimension() const;
+
+  /// Return the rank of the value space
+  virtual unsigned int value_rank() const;
+
+  /// Return the dimension of the value space for axis i
+  virtual unsigned int value_dimension(unsigned int i) const;
+
+  /// Evaluate basis function i at given point in cell
+  virtual void evaluate_basis(unsigned int i,
+                              double* values,
+                              const double* coordinates,
+                              const ufc::cell& c) const;
+
+  /// Evaluate all basis functions at given point in cell
+  virtual void evaluate_basis_all(double* values,
+                                  const double* coordinates,
+                                  const ufc::cell& c) const;
+
+  /// Evaluate order n derivatives of basis function i at given point in cell
+  virtual void evaluate_basis_derivatives(unsigned int i,
+                                          unsigned int n,
+                                          double* values,
+                                          const double* coordinates,
+                                          const ufc::cell& c) const;
+
+  /// Evaluate order n derivatives of all basis functions at given point in cell
+  virtual void evaluate_basis_derivatives_all(unsigned int n,
+                                              double* values,
+                                              const double* coordinates,
+                                              const ufc::cell& c) const;
+
+  /// Evaluate linear functional for dof i on the function f
+  virtual double evaluate_dof(unsigned int i,
+                              const ufc::function& f,
+                              const ufc::cell& c) const;
+
+  /// Evaluate linear functionals for all dofs on the function f
+  virtual void evaluate_dofs(double* values,
+                             const ufc::function& f,
+                             const ufc::cell& c) const;
+
+  /// Interpolate vertex values from dof values
+  virtual void interpolate_vertex_values(double* vertex_values,
+                                         const double* dof_values,
+                                         const ufc::cell& c) const;
+
+  /// Return the number of sub elements (for a mixed element)
+  virtual unsigned int num_sub_elements() const;
+
+  /// Create a new finite element for sub element i (for a mixed element)
+  virtual ufc::finite_element* create_sub_element(unsigned int i) const;
+
+};
+
+/// This class defines the interface for a local-to-global mapping of
+/// degrees of freedom (dofs).
+
+class magmaequations_1_dof_map_0_0: public ufc::dof_map
+{
+private:
+
+  unsigned int __global_dimension;
+
+public:
+
+  /// Constructor
+  magmaequations_1_dof_map_0_0();
+
+  /// Destructor
+  virtual ~magmaequations_1_dof_map_0_0();
+
+  /// Return a string identifying the dof map
+  virtual const char* signature() const;
+
+  /// Return true iff mesh entities of topological dimension d are needed
+  virtual bool needs_mesh_entities(unsigned int d) const;
+
+  /// Initialize dof map for mesh (return true iff init_cell() is needed)
+  virtual bool init_mesh(const ufc::mesh& m);
+
+  /// Initialize dof map for given cell
+  virtual void init_cell(const ufc::mesh& m,
+                         const ufc::cell& c);
+
+  /// Finish initialization of dof map for cells
+  virtual void init_cell_finalize();
+
+  /// Return the dimension of the global finite element function space
+  virtual unsigned int global_dimension() const;
+
+  /// Return the dimension of the local finite element function space for a cell
+  virtual unsigned int local_dimension(const ufc::cell& c) const;
+
+  /// Return the maximum dimension of the local finite element function space
+  virtual unsigned int max_local_dimension() const;
+
+  // Return the geometric dimension of the coordinates this dof map provides
+  virtual unsigned int geometric_dimension() const;
+
+  /// Return the number of dofs on each cell facet
+  virtual unsigned int num_facet_dofs() const;
+
+  /// Return the number of dofs associated with each cell entity of dimension d
+  virtual unsigned int num_entity_dofs(unsigned int d) const;
+
+  /// Tabulate the local-to-global mapping of dofs on a cell
+  virtual void tabulate_dofs(unsigned int* dofs,
+                             const ufc::mesh& m,
+                             const ufc::cell& c) const;
+
+  /// Tabulate the local-to-local mapping from facet dofs to cell dofs
+  virtual void tabulate_facet_dofs(unsigned int* dofs,
+                                   unsigned int facet) const;
+
+  /// Tabulate the local-to-local mapping of dofs on entity (d, i)
+  virtual void tabulate_entity_dofs(unsigned int* dofs,
+                                    unsigned int d, unsigned int i) const;
+
+  /// Tabulate the coordinates of all dofs on a cell
+  virtual void tabulate_coordinates(double** coordinates,
+                                    const ufc::cell& c) const;
+
+  /// Return the number of sub dof maps (for a mixed element)
+  virtual unsigned int num_sub_dof_maps() const;
+
+  /// Create a new dof_map for sub dof map i (for a mixed element)
+  virtual ufc::dof_map* create_sub_dof_map(unsigned int i) const;
+
+};
+
+/// This class defines the interface for a local-to-global mapping of
+/// degrees of freedom (dofs).
+
+class magmaequations_1_dof_map_0_1: public ufc::dof_map
+{
+private:
+
+  unsigned int __global_dimension;
+
+public:
+
+  /// Constructor
+  magmaequations_1_dof_map_0_1();
+
+  /// Destructor
+  virtual ~magmaequations_1_dof_map_0_1();
+
+  /// Return a string identifying the dof map
+  virtual const char* signature() const;
+
+  /// Return true iff mesh entities of topological dimension d are needed
+  virtual bool needs_mesh_entities(unsigned int d) const;
+
+  /// Initialize dof map for mesh (return true iff init_cell() is needed)
+  virtual bool init_mesh(const ufc::mesh& m);
+
+  /// Initialize dof map for given cell
+  virtual void init_cell(const ufc::mesh& m,
+                         const ufc::cell& c);
+
+  /// Finish initialization of dof map for cells
+  virtual void init_cell_finalize();
+
+  /// Return the dimension of the global finite element function space
+  virtual unsigned int global_dimension() const;
+
+  /// Return the dimension of the local finite element function space for a cell
+  virtual unsigned int local_dimension(const ufc::cell& c) const;
+
+  /// Return the maximum dimension of the local finite element function space
+  virtual unsigned int max_local_dimension() const;
+
+  // Return the geometric dimension of the coordinates this dof map provides
+  virtual unsigned int geometric_dimension() const;
+
+  /// Return the number of dofs on each cell facet
+  virtual unsigned int num_facet_dofs() const;
+
+  /// Return the number of dofs associated with each cell entity of dimension d
+  virtual unsigned int num_entity_dofs(unsigned int d) const;
+
+  /// Tabulate the local-to-global mapping of dofs on a cell
+  virtual void tabulate_dofs(unsigned int* dofs,
+                             const ufc::mesh& m,
+                             const ufc::cell& c) const;
+
+  /// Tabulate the local-to-local mapping from facet dofs to cell dofs
+  virtual void tabulate_facet_dofs(unsigned int* dofs,
+                                   unsigned int facet) const;
+
+  /// Tabulate the local-to-local mapping of dofs on entity (d, i)
+  virtual void tabulate_entity_dofs(unsigned int* dofs,
+                                    unsigned int d, unsigned int i) const;
+
+  /// Tabulate the coordinates of all dofs on a cell
+  virtual void tabulate_coordinates(double** coordinates,
+                                    const ufc::cell& c) const;
+
+  /// Return the number of sub dof maps (for a mixed element)
+  virtual unsigned int num_sub_dof_maps() const;
+
+  /// Create a new dof_map for sub dof map i (for a mixed element)
+  virtual ufc::dof_map* create_sub_dof_map(unsigned int i) const;
+
+};
+
+/// This class defines the interface for a local-to-global mapping of
+/// degrees of freedom (dofs).
+
+class magmaequations_1_dof_map_0: public ufc::dof_map
+{
+private:
+
+  unsigned int __global_dimension;
+
+public:
+
+  /// Constructor
+  magmaequations_1_dof_map_0();
+
+  /// Destructor
+  virtual ~magmaequations_1_dof_map_0();
+
+  /// Return a string identifying the dof map
+  virtual const char* signature() const;
+
+  /// Return true iff mesh entities of topological dimension d are needed
+  virtual bool needs_mesh_entities(unsigned int d) const;
+
+  /// Initialize dof map for mesh (return true iff init_cell() is needed)
+  virtual bool init_mesh(const ufc::mesh& m);
+
+  /// Initialize dof map for given cell
+  virtual void init_cell(const ufc::mesh& m,
+                         const ufc::cell& c);
+
+  /// Finish initialization of dof map for cells
+  virtual void init_cell_finalize();
+
+  /// Return the dimension of the global finite element function space
+  virtual unsigned int global_dimension() const;
+
+  /// Return the dimension of the local finite element function space for a cell
+  virtual unsigned int local_dimension(const ufc::cell& c) const;
+
+  /// Return the maximum dimension of the local finite element function space
+  virtual unsigned int max_local_dimension() const;
+
+  // Return the geometric dimension of the coordinates this dof map provides
+  virtual unsigned int geometric_dimension() const;
+
+  /// Return the number of dofs on each cell facet
+  virtual unsigned int num_facet_dofs() const;
+
+  /// Return the number of dofs associated with each cell entity of dimension d
+  virtual unsigned int num_entity_dofs(unsigned int d) const;
+
+  /// Tabulate the local-to-global mapping of dofs on a cell
+  virtual void tabulate_dofs(unsigned int* dofs,
+                             const ufc::mesh& m,
+                             const ufc::cell& c) const;
+
+  /// Tabulate the local-to-local mapping from facet dofs to cell dofs
+  virtual void tabulate_facet_dofs(unsigned int* dofs,
+                                   unsigned int facet) const;
+
+  /// Tabulate the local-to-local mapping of dofs on entity (d, i)
+  virtual void tabulate_entity_dofs(unsigned int* dofs,
+                                    unsigned int d, unsigned int i) const;
+
+  /// Tabulate the coordinates of all dofs on a cell
+  virtual void tabulate_coordinates(double** coordinates,
+                                    const ufc::cell& c) const;
+
+  /// Return the number of sub dof maps (for a mixed element)
+  virtual unsigned int num_sub_dof_maps() const;
+
+  /// Create a new dof_map for sub dof map i (for a mixed element)
+  virtual ufc::dof_map* create_sub_dof_map(unsigned int i) const;
+
+};
+
+/// This class defines the interface for a local-to-global mapping of
+/// degrees of freedom (dofs).
+
+class magmaequations_1_dof_map_1_0: public ufc::dof_map
+{
+private:
+
+  unsigned int __global_dimension;
+
+public:
+
+  /// Constructor
+  magmaequations_1_dof_map_1_0();
+
+  /// Destructor
+  virtual ~magmaequations_1_dof_map_1_0();
+
+  /// Return a string identifying the dof map
+  virtual const char* signature() const;
+
+  /// Return true iff mesh entities of topological dimension d are needed
+  virtual bool needs_mesh_entities(unsigned int d) const;
+
+  /// Initialize dof map for mesh (return true iff init_cell() is needed)
+  virtual bool init_mesh(const ufc::mesh& m);
+
+  /// Initialize dof map for given cell
+  virtual void init_cell(const ufc::mesh& m,
+                         const ufc::cell& c);
+
+  /// Finish initialization of dof map for cells
+  virtual void init_cell_finalize();
+
+  /// Return the dimension of the global finite element function space
+  virtual unsigned int global_dimension() const;
+
+  /// Return the dimension of the local finite element function space for a cell
+  virtual unsigned int local_dimension(const ufc::cell& c) const;
+
+  /// Return the maximum dimension of the local finite element function space
+  virtual unsigned int max_local_dimension() const;
+
+  // Return the geometric dimension of the coordinates this dof map provides
+  virtual unsigned int geometric_dimension() const;
+
+  /// Return the number of dofs on each cell facet
+  virtual unsigned int num_facet_dofs() const;
+
+  /// Return the number of dofs associated with each cell entity of dimension d
+  virtual unsigned int num_entity_dofs(unsigned int d) const;
+
+  /// Tabulate the local-to-global mapping of dofs on a cell
+  virtual void tabulate_dofs(unsigned int* dofs,
+                             const ufc::mesh& m,
+                             const ufc::cell& c) const;
+
+  /// Tabulate the local-to-local mapping from facet dofs to cell dofs
+  virtual void tabulate_facet_dofs(unsigned int* dofs,
+                                   unsigned int facet) const;
+
+  /// Tabulate the local-to-local mapping of dofs on entity (d, i)
+  virtual void tabulate_entity_dofs(unsigned int* dofs,
+                                    unsigned int d, unsigned int i) const;
+
+  /// Tabulate the coordinates of all dofs on a cell
+  virtual void tabulate_coordinates(double** coordinates,
+                                    const ufc::cell& c) const;
+
+  /// Return the number of sub dof maps (for a mixed element)
+  virtual unsigned int num_sub_dof_maps() const;
+
+  /// Create a new dof_map for sub dof map i (for a mixed element)
+  virtual ufc::dof_map* create_sub_dof_map(unsigned int i) const;
+
+};
+
+/// This class defines the interface for a local-to-global mapping of
+/// degrees of freedom (dofs).
+
+class magmaequations_1_dof_map_1_1: public ufc::dof_map
+{
+private:
+
+  unsigned int __global_dimension;
+
+public:
+
+  /// Constructor
+  magmaequations_1_dof_map_1_1();
+
+  /// Destructor
+  virtual ~magmaequations_1_dof_map_1_1();
+
+  /// Return a string identifying the dof map
+  virtual const char* signature() const;
+
+  /// Return true iff mesh entities of topological dimension d are needed
+  virtual bool needs_mesh_entities(unsigned int d) const;
+
+  /// Initialize dof map for mesh (return true iff init_cell() is needed)
+  virtual bool init_mesh(const ufc::mesh& m);
+
+  /// Initialize dof map for given cell
+  virtual void init_cell(const ufc::mesh& m,
+                         const ufc::cell& c);
+
+  /// Finish initialization of dof map for cells
+  virtual void init_cell_finalize();
+
+  /// Return the dimension of the global finite element function space
+  virtual unsigned int global_dimension() const;
+
+  /// Return the dimension of the local finite element function space for a cell
+  virtual unsigned int local_dimension(const ufc::cell& c) const;
+
+  /// Return the maximum dimension of the local finite element function space
+  virtual unsigned int max_local_dimension() const;
+
+  // Return the geometric dimension of the coordinates this dof map provides
+  virtual unsigned int geometric_dimension() const;
+
+  /// Return the number of dofs on each cell facet
+  virtual unsigned int num_facet_dofs() const;
+
+  /// Return the number of dofs associated with each cell entity of dimension d
+  virtual unsigned int num_entity_dofs(unsigned int d) const;
+
+  /// Tabulate the local-to-global mapping of dofs on a cell
+  virtual void tabulate_dofs(unsigned int* dofs,
+                             const ufc::mesh& m,
+                             const ufc::cell& c) const;
+
+  /// Tabulate the local-to-local mapping from facet dofs to cell dofs
+  virtual void tabulate_facet_dofs(unsigned int* dofs,
+                                   unsigned int facet) const;
+
+  /// Tabulate the local-to-local mapping of dofs on entity (d, i)
+  virtual void tabulate_entity_dofs(unsigned int* dofs,
+                                    unsigned int d, unsigned int i) const;
+
+  /// Tabulate the coordinates of all dofs on a cell
+  virtual void tabulate_coordinates(double** coordinates,
+                                    const ufc::cell& c) const;
+
+  /// Return the number of sub dof maps (for a mixed element)
+  virtual unsigned int num_sub_dof_maps() const;
+
+  /// Create a new dof_map for sub dof map i (for a mixed element)
+  virtual ufc::dof_map* create_sub_dof_map(unsigned int i) const;
+
+};
+
+/// This class defines the interface for a local-to-global mapping of
+/// degrees of freedom (dofs).
+
+class magmaequations_1_dof_map_1: public ufc::dof_map
+{
+private:
+
+  unsigned int __global_dimension;
+
+public:
+
+  /// Constructor
+  magmaequations_1_dof_map_1();
+
+  /// Destructor
+  virtual ~magmaequations_1_dof_map_1();
+
+  /// Return a string identifying the dof map
+  virtual const char* signature() const;
+
+  /// Return true iff mesh entities of topological dimension d are needed
+  virtual bool needs_mesh_entities(unsigned int d) const;
+
+  /// Initialize dof map for mesh (return true iff init_cell() is needed)
+  virtual bool init_mesh(const ufc::mesh& m);
+
+  /// Initialize dof map for given cell
+  virtual void init_cell(const ufc::mesh& m,
+                         const ufc::cell& c);
+
+  /// Finish initialization of dof map for cells
+  virtual void init_cell_finalize();
+
+  /// Return the dimension of the global finite element function space
+  virtual unsigned int global_dimension() const;
+
+  /// Return the dimension of the local finite element function space for a cell
+  virtual unsigned int local_dimension(const ufc::cell& c) const;
+
+  /// Return the maximum dimension of the local finite element function space
+  virtual unsigned int max_local_dimension() const;
+
+  // Return the geometric dimension of the coordinates this dof map provides
+  virtual unsigned int geometric_dimension() const;
+
+  /// Return the number of dofs on each cell facet
+  virtual unsigned int num_facet_dofs() const;
+
+  /// Return the number of dofs associated with each cell entity of dimension d
+  virtual unsigned int num_entity_dofs(unsigned int d) const;
+
+  /// Tabulate the local-to-global mapping of dofs on a cell
+  virtual void tabulate_dofs(unsigned int* dofs,
+                             const ufc::mesh& m,
+                             const ufc::cell& c) const;
+
+  /// Tabulate the local-to-local mapping from facet dofs to cell dofs
+  virtual void tabulate_facet_dofs(unsigned int* dofs,
+                                   unsigned int facet) const;
+
+  /// Tabulate the local-to-local mapping of dofs on entity (d, i)
+  virtual void tabulate_entity_dofs(unsigned int* dofs,
+                                    unsigned int d, unsigned int i) const;
+
+  /// Tabulate the coordinates of all dofs on a cell
+  virtual void tabulate_coordinates(double** coordinates,
+                                    const ufc::cell& c) const;
+
+  /// Return the number of sub dof maps (for a mixed element)
+  virtual unsigned int num_sub_dof_maps() const;
+
+  /// Create a new dof_map for sub dof map i (for a mixed element)
+  virtual ufc::dof_map* create_sub_dof_map(unsigned int i) const;
+
+};
+
+/// This class defines the interface for a local-to-global mapping of
+/// degrees of freedom (dofs).
+
+class magmaequations_1_dof_map_2: public ufc::dof_map
+{
+private:
+
+  unsigned int __global_dimension;
+
+public:
+
+  /// Constructor
+  magmaequations_1_dof_map_2();
+
+  /// Destructor
+  virtual ~magmaequations_1_dof_map_2();
+
+  /// Return a string identifying the dof map
+  virtual const char* signature() const;
+
+  /// Return true iff mesh entities of topological dimension d are needed
+  virtual bool needs_mesh_entities(unsigned int d) const;
+
+  /// Initialize dof map for mesh (return true iff init_cell() is needed)
+  virtual bool init_mesh(const ufc::mesh& m);
+
+  /// Initialize dof map for given cell
+  virtual void init_cell(const ufc::mesh& m,
+                         const ufc::cell& c);
+
+  /// Finish initialization of dof map for cells
+  virtual void init_cell_finalize();
+
+  /// Return the dimension of the global finite element function space
+  virtual unsigned int global_dimension() const;
+
+  /// Return the dimension of the local finite element function space for a cell
+  virtual unsigned int local_dimension(const ufc::cell& c) const;
+
+  /// Return the maximum dimension of the local finite element function space
+  virtual unsigned int max_local_dimension() const;
+
+  // Return the geometric dimension of the coordinates this dof map provides
+  virtual unsigned int geometric_dimension() const;
+
+  /// Return the number of dofs on each cell facet
+  virtual unsigned int num_facet_dofs() const;
+
+  /// Return the number of dofs associated with each cell entity of dimension d
+  virtual unsigned int num_entity_dofs(unsigned int d) const;
+
+  /// Tabulate the local-to-global mapping of dofs on a cell
+  virtual void tabulate_dofs(unsigned int* dofs,
+                             const ufc::mesh& m,
+                             const ufc::cell& c) const;
+
+  /// Tabulate the local-to-local mapping from facet dofs to cell dofs
+  virtual void tabulate_facet_dofs(unsigned int* dofs,
+                                   unsigned int facet) const;
+
+  /// Tabulate the local-to-local mapping of dofs on entity (d, i)
+  virtual void tabulate_entity_dofs(unsigned int* dofs,
+                                    unsigned int d, unsigned int i) const;
+
+  /// Tabulate the coordinates of all dofs on a cell
+  virtual void tabulate_coordinates(double** coordinates,
+                                    const ufc::cell& c) const;
+
+  /// Return the number of sub dof maps (for a mixed element)
+  virtual unsigned int num_sub_dof_maps() const;
+
+  /// Create a new dof_map for sub dof map i (for a mixed element)
+  virtual ufc::dof_map* create_sub_dof_map(unsigned int i) const;
+
+};
+
+/// This class defines the interface for a local-to-global mapping of
+/// degrees of freedom (dofs).
+
+class magmaequations_1_dof_map_3: public ufc::dof_map
+{
+private:
+
+  unsigned int __global_dimension;
+
+public:
+
+  /// Constructor
+  magmaequations_1_dof_map_3();
+
+  /// Destructor
+  virtual ~magmaequations_1_dof_map_3();
+
+  /// Return a string identifying the dof map
+  virtual const char* signature() const;
+
+  /// Return true iff mesh entities of topological dimension d are needed
+  virtual bool needs_mesh_entities(unsigned int d) const;
+
+  /// Initialize dof map for mesh (return true iff init_cell() is needed)
+  virtual bool init_mesh(const ufc::mesh& m);
+
+  /// Initialize dof map for given cell
+  virtual void init_cell(const ufc::mesh& m,
+                         const ufc::cell& c);
+
+  /// Finish initialization of dof map for cells
+  virtual void init_cell_finalize();
+
+  /// Return the dimension of the global finite element function space
+  virtual unsigned int global_dimension() const;
+
+  /// Return the dimension of the local finite element function space for a cell
+  virtual unsigned int local_dimension(const ufc::cell& c) const;
+
+  /// Return the maximum dimension of the local finite element function space
+  virtual unsigned int max_local_dimension() const;
+
+  // Return the geometric dimension of the coordinates this dof map provides
+  virtual unsigned int geometric_dimension() const;
+
+  /// Return the number of dofs on each cell facet
+  virtual unsigned int num_facet_dofs() const;
+
+  /// Return the number of dofs associated with each cell entity of dimension d
+  virtual unsigned int num_entity_dofs(unsigned int d) const;
+
+  /// Tabulate the local-to-global mapping of dofs on a cell
+  virtual void tabulate_dofs(unsigned int* dofs,
+                             const ufc::mesh& m,
+                             const ufc::cell& c) const;
+
+  /// Tabulate the local-to-local mapping from facet dofs to cell dofs
+  virtual void tabulate_facet_dofs(unsigned int* dofs,
+                                   unsigned int facet) const;
+
+  /// Tabulate the local-to-local mapping of dofs on entity (d, i)
+  virtual void tabulate_entity_dofs(unsigned int* dofs,
+                                    unsigned int d, unsigned int i) const;
+
+  /// Tabulate the coordinates of all dofs on a cell
+  virtual void tabulate_coordinates(double** coordinates,
+                                    const ufc::cell& c) const;
+
+  /// Return the number of sub dof maps (for a mixed element)
+  virtual unsigned int num_sub_dof_maps() const;
+
+  /// Create a new dof_map for sub dof map i (for a mixed element)
+  virtual ufc::dof_map* create_sub_dof_map(unsigned int i) const;
+
+};
+
+/// This class defines the interface for a local-to-global mapping of
+/// degrees of freedom (dofs).
+
+class magmaequations_1_dof_map_4: public ufc::dof_map
+{
+private:
+
+  unsigned int __global_dimension;
+
+public:
+
+  /// Constructor
+  magmaequations_1_dof_map_4();
+
+  /// Destructor
+  virtual ~magmaequations_1_dof_map_4();
+
+  /// Return a string identifying the dof map
+  virtual const char* signature() const;
+
+  /// Return true iff mesh entities of topological dimension d are needed
+  virtual bool needs_mesh_entities(unsigned int d) const;
+
+  /// Initialize dof map for mesh (return true iff init_cell() is needed)
+  virtual bool init_mesh(const ufc::mesh& m);
+
+  /// Initialize dof map for given cell
+  virtual void init_cell(const ufc::mesh& m,
+                         const ufc::cell& c);
+
+  /// Finish initialization of dof map for cells
+  virtual void init_cell_finalize();
+
+  /// Return the dimension of the global finite element function space
+  virtual unsigned int global_dimension() const;
+
+  /// Return the dimension of the local finite element function space for a cell
+  virtual unsigned int local_dimension(const ufc::cell& c) const;
+
+  /// Return the maximum dimension of the local finite element function space
+  virtual unsigned int max_local_dimension() const;
+
+  // Return the geometric dimension of the coordinates this dof map provides
+  virtual unsigned int geometric_dimension() const;
+
+  /// Return the number of dofs on each cell facet
+  virtual unsigned int num_facet_dofs() const;
+
+  /// Return the number of dofs associated with each cell entity of dimension d
+  virtual unsigned int num_entity_dofs(unsigned int d) const;
+
+  /// Tabulate the local-to-global mapping of dofs on a cell
+  virtual void tabulate_dofs(unsigned int* dofs,
+                             const ufc::mesh& m,
+                             const ufc::cell& c) const;
+
+  /// Tabulate the local-to-local mapping from facet dofs to cell dofs
+  virtual void tabulate_facet_dofs(unsigned int* dofs,
+                                   unsigned int facet) const;
+
+  /// Tabulate the local-to-local mapping of dofs on entity (d, i)
+  virtual void tabulate_entity_dofs(unsigned int* dofs,
+                                    unsigned int d, unsigned int i) const;
+
+  /// Tabulate the coordinates of all dofs on a cell
+  virtual void tabulate_coordinates(double** coordinates,
+                                    const ufc::cell& c) const;
+
+  /// Return the number of sub dof maps (for a mixed element)
+  virtual unsigned int num_sub_dof_maps() const;
+
+  /// Create a new dof_map for sub dof map i (for a mixed element)
+  virtual ufc::dof_map* create_sub_dof_map(unsigned int i) const;
+
+};
+
+/// This class defines the interface for a local-to-global mapping of
+/// degrees of freedom (dofs).
+
+class magmaequations_1_dof_map_5: public ufc::dof_map
+{
+private:
+
+  unsigned int __global_dimension;
+
+public:
+
+  /// Constructor
+  magmaequations_1_dof_map_5();
+
+  /// Destructor
+  virtual ~magmaequations_1_dof_map_5();
+
+  /// Return a string identifying the dof map
+  virtual const char* signature() const;
+
+  /// Return true iff mesh entities of topological dimension d are needed
+  virtual bool needs_mesh_entities(unsigned int d) const;
+
+  /// Initialize dof map for mesh (return true iff init_cell() is needed)
+  virtual bool init_mesh(const ufc::mesh& m);
+
+  /// Initialize dof map for given cell
+  virtual void init_cell(const ufc::mesh& m,
+                         const ufc::cell& c);
+
+  /// Finish initialization of dof map for cells
+  virtual void init_cell_finalize();
+
+  /// Return the dimension of the global finite element function space
+  virtual unsigned int global_dimension() const;
+
+  /// Return the dimension of the local finite element function space for a cell
+  virtual unsigned int local_dimension(const ufc::cell& c) const;
+
+  /// Return the maximum dimension of the local finite element function space
+  virtual unsigned int max_local_dimension() const;
+
+  // Return the geometric dimension of the coordinates this dof map provides
+  virtual unsigned int geometric_dimension() const;
+
+  /// Return the number of dofs on each cell facet
+  virtual unsigned int num_facet_dofs() const;
+
+  /// Return the number of dofs associated with each cell entity of dimension d
+  virtual unsigned int num_entity_dofs(unsigned int d) const;
+
+  /// Tabulate the local-to-global mapping of dofs on a cell
+  virtual void tabulate_dofs(unsigned int* dofs,
+                             const ufc::mesh& m,
+                             const ufc::cell& c) const;
+
+  /// Tabulate the local-to-local mapping from facet dofs to cell dofs
+  virtual void tabulate_facet_dofs(unsigned int* dofs,
+                                   unsigned int facet) const;
+
+  /// Tabulate the local-to-local mapping of dofs on entity (d, i)
+  virtual void tabulate_entity_dofs(unsigned int* dofs,
+                                    unsigned int d, unsigned int i) const;
+
+  /// Tabulate the coordinates of all dofs on a cell
+  virtual void tabulate_coordinates(double** coordinates,
+                                    const ufc::cell& c) const;
+
+  /// Return the number of sub dof maps (for a mixed element)
+  virtual unsigned int num_sub_dof_maps() const;
+
+  /// Create a new dof_map for sub dof map i (for a mixed element)
+  virtual ufc::dof_map* create_sub_dof_map(unsigned int i) const;
+
+};
+
+/// This class defines the interface for a local-to-global mapping of
+/// degrees of freedom (dofs).
+
+class magmaequations_1_dof_map_6: public ufc::dof_map
+{
+private:
+
+  unsigned int __global_dimension;
+
+public:
+
+  /// Constructor
+  magmaequations_1_dof_map_6();
+
+  /// Destructor
+  virtual ~magmaequations_1_dof_map_6();
+
+  /// Return a string identifying the dof map
+  virtual const char* signature() const;
+
+  /// Return true iff mesh entities of topological dimension d are needed
+  virtual bool needs_mesh_entities(unsigned int d) const;
+
+  /// Initialize dof map for mesh (return true iff init_cell() is needed)
+  virtual bool init_mesh(const ufc::mesh& m);
+
+  /// Initialize dof map for given cell
+  virtual void init_cell(const ufc::mesh& m,
+                         const ufc::cell& c);
+
+  /// Finish initialization of dof map for cells
+  virtual void init_cell_finalize();
+
+  /// Return the dimension of the global finite element function space
+  virtual unsigned int global_dimension() const;
+
+  /// Return the dimension of the local finite element function space for a cell
+  virtual unsigned int local_dimension(const ufc::cell& c) const;
+
+  /// Return the maximum dimension of the local finite element function space
+  virtual unsigned int max_local_dimension() const;
+
+  // Return the geometric dimension of the coordinates this dof map provides
+  virtual unsigned int geometric_dimension() const;
+
+  /// Return the number of dofs on each cell facet
+  virtual unsigned int num_facet_dofs() const;
+
+  /// Return the number of dofs associated with each cell entity of dimension d
+  virtual unsigned int num_entity_dofs(unsigned int d) const;
+
+  /// Tabulate the local-to-global mapping of dofs on a cell
+  virtual void tabulate_dofs(unsigned int* dofs,
+                             const ufc::mesh& m,
+                             const ufc::cell& c) const;
+
+  /// Tabulate the local-to-local mapping from facet dofs to cell dofs
+  virtual void tabulate_facet_dofs(unsigned int* dofs,
+                                   unsigned int facet) const;
+
+  /// Tabulate the local-to-local mapping of dofs on entity (d, i)
+  virtual void tabulate_entity_dofs(unsigned int* dofs,
+                                    unsigned int d, unsigned int i) const;
+
+  /// Tabulate the coordinates of all dofs on a cell
+  virtual void tabulate_coordinates(double** coordinates,
+                                    const ufc::cell& c) const;
+
+  /// Return the number of sub dof maps (for a mixed element)
+  virtual unsigned int num_sub_dof_maps() const;
+
+  /// Create a new dof_map for sub dof map i (for a mixed element)
+  virtual ufc::dof_map* create_sub_dof_map(unsigned int i) const;
+
+};
+
+/// This class defines the interface for a local-to-global mapping of
+/// degrees of freedom (dofs).
+
+class magmaequations_1_dof_map_7: public ufc::dof_map
+{
+private:
+
+  unsigned int __global_dimension;
+
+public:
+
+  /// Constructor
+  magmaequations_1_dof_map_7();
+
+  /// Destructor
+  virtual ~magmaequations_1_dof_map_7();
+
+  /// Return a string identifying the dof map
+  virtual const char* signature() const;
+
+  /// Return true iff mesh entities of topological dimension d are needed
+  virtual bool needs_mesh_entities(unsigned int d) const;
+
+  /// Initialize dof map for mesh (return true iff init_cell() is needed)
+  virtual bool init_mesh(const ufc::mesh& m);
+
+  /// Initialize dof map for given cell
+  virtual void init_cell(const ufc::mesh& m,
+                         const ufc::cell& c);
+
+  /// Finish initialization of dof map for cells
+  virtual void init_cell_finalize();
+
+  /// Return the dimension of the global finite element function space
+  virtual unsigned int global_dimension() const;
+
+  /// Return the dimension of the local finite element function space for a cell
+  virtual unsigned int local_dimension(const ufc::cell& c) const;
+
+  /// Return the maximum dimension of the local finite element function space
+  virtual unsigned int max_local_dimension() const;
 
   // Return the geometric dimension of the coordinates this dof map provides
   virtual unsigned int geometric_dimension() const;
@@ -4874,15 +4070,15 @@ public:
 /// tensor corresponding to the local contribution to a form from
 /// the integral over a cell.
 
-class UFC_MagmaEquationsLinearForm_cell_integral_0_quadrature: public ufc::cell_integral
-{
-public:
-
-  /// Constructor
-  UFC_MagmaEquationsLinearForm_cell_integral_0_quadrature();
-
-  /// Destructor
-  virtual ~UFC_MagmaEquationsLinearForm_cell_integral_0_quadrature();
+class magmaequations_1_cell_integral_0_quadrature: public ufc::cell_integral
+{
+public:
+
+  /// Constructor
+  magmaequations_1_cell_integral_0_quadrature();
+
+  /// Destructor
+  virtual ~magmaequations_1_cell_integral_0_quadrature();
 
   /// Tabulate the tensor for the contribution from a local cell
   virtual void tabulate_tensor(double* A,
@@ -4895,19 +4091,19 @@ public:
 /// tensor corresponding to the local contribution to a form from
 /// the integral over a cell.
 
-class UFC_MagmaEquationsLinearForm_cell_integral_0: public ufc::cell_integral
-{
-private:
-
-  UFC_MagmaEquationsLinearForm_cell_integral_0_quadrature integral_0_quadrature;
-
-public:
-
-  /// Constructor
-  UFC_MagmaEquationsLinearForm_cell_integral_0();
-
-  /// Destructor
-  virtual ~UFC_MagmaEquationsLinearForm_cell_integral_0();
+class magmaequations_1_cell_integral_0: public ufc::cell_integral
+{
+private:
+
+  magmaequations_1_cell_integral_0_quadrature integral_0_quadrature;
+
+public:
+
+  /// Constructor
+  magmaequations_1_cell_integral_0();
+
+  /// Destructor
+  virtual ~magmaequations_1_cell_integral_0();
 
   /// Tabulate the tensor for the contribution from a local cell
   virtual void tabulate_tensor(double* A,
@@ -4920,15 +4116,15 @@ public:
 /// exterior facet tensor corresponding to the local contribution to
 /// a form from the integral over an exterior facet.
 
-class UFC_MagmaEquationsLinearForm_exterior_facet_integral_0_quadrature: public ufc::exterior_facet_integral
-{
-public:
-
-  /// Constructor
-  UFC_MagmaEquationsLinearForm_exterior_facet_integral_0_quadrature();
-
-  /// Destructor
-  virtual ~UFC_MagmaEquationsLinearForm_exterior_facet_integral_0_quadrature();
+class magmaequations_1_exterior_facet_integral_0_quadrature: public ufc::exterior_facet_integral
+{
+public:
+
+  /// Constructor
+  magmaequations_1_exterior_facet_integral_0_quadrature();
+
+  /// Destructor
+  virtual ~magmaequations_1_exterior_facet_integral_0_quadrature();
 
   /// Tabulate the tensor for the contribution from a local exterior facet
   virtual void tabulate_tensor(double* A,
@@ -4942,19 +4138,19 @@ public:
 /// exterior facet tensor corresponding to the local contribution to
 /// a form from the integral over an exterior facet.
 
-class UFC_MagmaEquationsLinearForm_exterior_facet_integral_0: public ufc::exterior_facet_integral
-{
-private:
-
-  UFC_MagmaEquationsLinearForm_exterior_facet_integral_0_quadrature integral_0_quadrature;
-
-public:
-
-  /// Constructor
-  UFC_MagmaEquationsLinearForm_exterior_facet_integral_0();
-
-  /// Destructor
-  virtual ~UFC_MagmaEquationsLinearForm_exterior_facet_integral_0();
+class magmaequations_1_exterior_facet_integral_0: public ufc::exterior_facet_integral
+{
+private:
+
+  magmaequations_1_exterior_facet_integral_0_quadrature integral_0_quadrature;
+
+public:
+
+  /// Constructor
+  magmaequations_1_exterior_facet_integral_0();
+
+  /// Destructor
+  virtual ~magmaequations_1_exterior_facet_integral_0();
 
   /// Tabulate the tensor for the contribution from a local exterior facet
   virtual void tabulate_tensor(double* A,
@@ -4979,15 +4175,15 @@ public:
 /// sequence of basis functions of Vj and w1, w2, ..., wn are given
 /// fixed functions (coefficients).
 
-class UFC_MagmaEquationsLinearForm: public ufc::form
-{
-public:
-
-  /// Constructor
-  UFC_MagmaEquationsLinearForm();
-
-  /// Destructor
-  virtual ~UFC_MagmaEquationsLinearForm();
+class magmaequations_form_1: public ufc::form
+{
+public:
+
+  /// Constructor
+  magmaequations_form_1();
+
+  /// Destructor
+  virtual ~magmaequations_form_1();
 
   /// Return a string identifying the form
   virtual const char* signature() const;
@@ -5000,10 +4196,10 @@ public:
 
   /// Return the number of cell integrals
   virtual unsigned int num_cell_integrals() const;
-  
+
   /// Return the number of exterior facet integrals
   virtual unsigned int num_exterior_facet_integrals() const;
-  
+
   /// Return the number of interior facet integrals
   virtual unsigned int num_interior_facet_integrals() const;
 
@@ -5026,1058 +4222,801 @@ public:
 
 // DOLFIN wrappers
 
-#include <dolfin/fem/Form.h>
+// Standard library includes
+#include <string>
+
+// DOLFIN includes
+#include <dolfin/common/NoDeleter.h>
 #include <dolfin/fem/FiniteElement.h>
 #include <dolfin/fem/DofMap.h>
-#include <dolfin/function/Coefficient.h>
-#include <dolfin/function/Function.h>
+#include <dolfin/fem/Form.h>
 #include <dolfin/function/FunctionSpace.h>
-
-class MagmaEquationsBilinearFormFunctionSpace0 : public dolfin::FunctionSpace
-{
-public:
-
-  MagmaEquationsBilinearFormFunctionSpace0(const dolfin::Mesh& mesh)
-    : dolfin::FunctionSpace(boost::shared_ptr<const dolfin::Mesh>(&mesh, dolfin::NoDeleter<const dolfin::Mesh>()),
-                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new UFC_MagmaEquationsLinearForm_finite_element_1()))),
-                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new UFC_MagmaEquationsLinearForm_dof_map_1()), mesh)))
-  {
-    // Do nothing
-  }
-
-};
-
-class MagmaEquationsBilinearFormFunctionSpace1 : public dolfin::FunctionSpace
-{
-public:
-
-  MagmaEquationsBilinearFormFunctionSpace1(const dolfin::Mesh& mesh)
-    : dolfin::FunctionSpace(boost::shared_ptr<const dolfin::Mesh>(&mesh, dolfin::NoDeleter<const dolfin::Mesh>()),
-                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new UFC_MagmaEquationsLinearForm_finite_element_1()))),
-                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new UFC_MagmaEquationsLinearForm_dof_map_1()), mesh)))
-  {
-    // Do nothing
-  }
-
-};
-
-class MagmaEquationsBilinearFormCoefficientSpace0 : public dolfin::FunctionSpace
-{
-public:
-
-  MagmaEquationsBilinearFormCoefficientSpace0(const dolfin::Mesh& mesh)
-    : dolfin::FunctionSpace(boost::shared_ptr<const dolfin::Mesh>(&mesh, dolfin::NoDeleter<const dolfin::Mesh>()),
-                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new UFC_MagmaEquationsLinearForm_finite_element_1()))),
-                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new UFC_MagmaEquationsLinearForm_dof_map_1()), mesh)))
-  {
-    // Do nothing
-  }
-
-};
-
-class MagmaEquationsBilinearFormCoefficientSpace1 : public dolfin::FunctionSpace
-{
-public:
-
-  MagmaEquationsBilinearFormCoefficientSpace1(const dolfin::Mesh& mesh)
-    : dolfin::FunctionSpace(boost::shared_ptr<const dolfin::Mesh>(&mesh, dolfin::NoDeleter<const dolfin::Mesh>()),
-                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new UFC_MagmaEquationsLinearForm_finite_element_8()))),
-                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new UFC_MagmaEquationsLinearForm_dof_map_8()), mesh)))
-  {
-    // Do nothing
-  }
-
-};
-
-class MagmaEquationsBilinearFormCoefficientSpace2 : public dolfin::FunctionSpace
-{
-public:
-
-  MagmaEquationsBilinearFormCoefficientSpace2(const dolfin::Mesh& mesh)
-    : dolfin::FunctionSpace(boost::shared_ptr<const dolfin::Mesh>(&mesh, dolfin::NoDeleter<const dolfin::Mesh>()),
-                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new UFC_MagmaEquationsLinearForm_finite_element_8()))),
-                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new UFC_MagmaEquationsLinearForm_dof_map_8()), mesh)))
-  {
-    // Do nothing
-  }
-
-};
-
-class MagmaEquationsBilinearFormCoefficientSpace3 : public dolfin::FunctionSpace
-{
-public:
-
-  MagmaEquationsBilinearFormCoefficientSpace3(const dolfin::Mesh& mesh)
-    : dolfin::FunctionSpace(boost::shared_ptr<const dolfin::Mesh>(&mesh, dolfin::NoDeleter<const dolfin::Mesh>()),
-                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new UFC_MagmaEquationsLinearForm_finite_element_4()))),
-                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new UFC_MagmaEquationsLinearForm_dof_map_4()), mesh)))
-  {
-    // Do nothing
-  }
-
-};
-
-class MagmaEquationsBilinearFormCoefficientSpace4 : public dolfin::FunctionSpace
-{
-public:
-
-  MagmaEquationsBilinearFormCoefficientSpace4(const dolfin::Mesh& mesh)
-    : dolfin::FunctionSpace(boost::shared_ptr<const dolfin::Mesh>(&mesh, dolfin::NoDeleter<const dolfin::Mesh>()),
-                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new UFC_MagmaEquationsLinearForm_finite_element_7()))),
-                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new UFC_MagmaEquationsLinearForm_dof_map_7()), mesh)))
-  {
-    // Do nothing
-  }
-
-};
-
-class MagmaEquationsBilinearFormCoefficientSpace5 : public dolfin::FunctionSpace
-{
-public:
-
-  MagmaEquationsBilinearFormCoefficientSpace5(const dolfin::Mesh& mesh)
-    : dolfin::FunctionSpace(boost::shared_ptr<const dolfin::Mesh>(&mesh, dolfin::NoDeleter<const dolfin::Mesh>()),
-                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new UFC_MagmaEquationsLinearForm_finite_element_7()))),
-                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new UFC_MagmaEquationsLinearForm_dof_map_7()), mesh)))
-  {
-    // Do nothing
-  }
-
-};
-
-class MagmaEquationsBilinearFormCoefficientSpace6 : public dolfin::FunctionSpace
-{
-public:
-
-  MagmaEquationsBilinearFormCoefficientSpace6(const dolfin::Mesh& mesh)
-    : dolfin::FunctionSpace(boost::shared_ptr<const dolfin::Mesh>(&mesh, dolfin::NoDeleter<const dolfin::Mesh>()),
-                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new UFC_MagmaEquationsLinearForm_finite_element_8()))),
-                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new UFC_MagmaEquationsLinearForm_dof_map_8()), mesh)))
-  {
-    // Do nothing
-  }
-
-};
-
-class MagmaEquationsLinearFormFunctionSpace0 : public dolfin::FunctionSpace
-{
-public:
-
-  MagmaEquationsLinearFormFunctionSpace0(const dolfin::Mesh& mesh)
-    : dolfin::FunctionSpace(boost::shared_ptr<const dolfin::Mesh>(&mesh, dolfin::NoDeleter<const dolfin::Mesh>()),
-                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new UFC_MagmaEquationsLinearForm_finite_element_1()))),
-                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new UFC_MagmaEquationsLinearForm_dof_map_1()), mesh)))
-  {
-    // Do nothing
-  }
-
-};
-
-class MagmaEquationsLinearFormCoefficientSpace0 : public dolfin::FunctionSpace
-{
-public:
-
-  MagmaEquationsLinearFormCoefficientSpace0(const dolfin::Mesh& mesh)
-    : dolfin::FunctionSpace(boost::shared_ptr<const dolfin::Mesh>(&mesh, dolfin::NoDeleter<const dolfin::Mesh>()),
-                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new UFC_MagmaEquationsLinearForm_finite_element_1()))),
-                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new UFC_MagmaEquationsLinearForm_dof_map_1()), mesh)))
-  {
-    // Do nothing
-  }
-
-};
-
-class MagmaEquationsLinearFormCoefficientSpace1 : public dolfin::FunctionSpace
-{
-public:
-
-  MagmaEquationsLinearFormCoefficientSpace1(const dolfin::Mesh& mesh)
-    : dolfin::FunctionSpace(boost::shared_ptr<const dolfin::Mesh>(&mesh, dolfin::NoDeleter<const dolfin::Mesh>()),
-                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new UFC_MagmaEquationsLinearForm_finite_element_8()))),
-                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new UFC_MagmaEquationsLinearForm_dof_map_8()), mesh)))
-  {
-    // Do nothing
-  }
-
-};
-
-class MagmaEquationsLinearFormCoefficientSpace2 : public dolfin::FunctionSpace
-{
-public:
-
-  MagmaEquationsLinearFormCoefficientSpace2(const dolfin::Mesh& mesh)
-    : dolfin::FunctionSpace(boost::shared_ptr<const dolfin::Mesh>(&mesh, dolfin::NoDeleter<const dolfin::Mesh>()),
-                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new UFC_MagmaEquationsLinearForm_finite_element_8()))),
-                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new UFC_MagmaEquationsLinearForm_dof_map_8()), mesh)))
-  {
-    // Do nothing
-  }
-
-};
-
-class MagmaEquationsLinearFormCoefficientSpace3 : public dolfin::FunctionSpace
-{
-public:
-
-  MagmaEquationsLinearFormCoefficientSpace3(const dolfin::Mesh& mesh)
-    : dolfin::FunctionSpace(boost::shared_ptr<const dolfin::Mesh>(&mesh, dolfin::NoDeleter<const dolfin::Mesh>()),
-                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new UFC_MagmaEquationsLinearForm_finite_element_4()))),
-                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new UFC_MagmaEquationsLinearForm_dof_map_4()), mesh)))
-  {
-    // Do nothing
-  }
-
-};
-
-class MagmaEquationsLinearFormCoefficientSpace4 : public dolfin::FunctionSpace
-{
-public:
-
-  MagmaEquationsLinearFormCoefficientSpace4(const dolfin::Mesh& mesh)
-    : dolfin::FunctionSpace(boost::shared_ptr<const dolfin::Mesh>(&mesh, dolfin::NoDeleter<const dolfin::Mesh>()),
-                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new UFC_MagmaEquationsLinearForm_finite_element_7()))),
-                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new UFC_MagmaEquationsLinearForm_dof_map_7()), mesh)))
-  {
-    // Do nothing
-  }
-
-};
-
-class MagmaEquationsLinearFormCoefficientSpace5 : public dolfin::FunctionSpace
-{
-public:
-
-  MagmaEquationsLinearFormCoefficientSpace5(const dolfin::Mesh& mesh)
-    : dolfin::FunctionSpace(boost::shared_ptr<const dolfin::Mesh>(&mesh, dolfin::NoDeleter<const dolfin::Mesh>()),
-                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new UFC_MagmaEquationsLinearForm_finite_element_6()))),
-                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new UFC_MagmaEquationsLinearForm_dof_map_6()), mesh)))
-  {
-    // Do nothing
-  }
-
-};
-
-class MagmaEquationsLinearFormCoefficientSpace6 : public dolfin::FunctionSpace
-{
-public:
-
-  MagmaEquationsLinearFormCoefficientSpace6(const dolfin::Mesh& mesh)
-    : dolfin::FunctionSpace(boost::shared_ptr<const dolfin::Mesh>(&mesh, dolfin::NoDeleter<const dolfin::Mesh>()),
-                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new UFC_MagmaEquationsLinearForm_finite_element_7()))),
-                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new UFC_MagmaEquationsLinearForm_dof_map_7()), mesh)))
-  {
-    // Do nothing
-  }
-
-};
-
-class MagmaEquationsLinearFormCoefficientSpace7 : public dolfin::FunctionSpace
-{
-public:
-
-  MagmaEquationsLinearFormCoefficientSpace7(const dolfin::Mesh& mesh)
-    : dolfin::FunctionSpace(boost::shared_ptr<const dolfin::Mesh>(&mesh, dolfin::NoDeleter<const dolfin::Mesh>()),
-                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new UFC_MagmaEquationsLinearForm_finite_element_8()))),
-                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new UFC_MagmaEquationsLinearForm_dof_map_8()), mesh)))
-  {
-    // Do nothing
-  }
-
-};
-
-class MagmaEquationsTestSpace : public dolfin::FunctionSpace
-{
-public:
-
-  MagmaEquationsTestSpace(const dolfin::Mesh& mesh)
-    : dolfin::FunctionSpace(boost::shared_ptr<const dolfin::Mesh>(&mesh, dolfin::NoDeleter<const dolfin::Mesh>()),
-                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new UFC_MagmaEquationsLinearForm_finite_element_1()))),
-                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new UFC_MagmaEquationsLinearForm_dof_map_1()), mesh)))
-  {
-    // Do nothing
-  }
-
-};
-
-class MagmaEquationsTrialSpace : public dolfin::FunctionSpace
-{
-public:
-
-  MagmaEquationsTrialSpace(const dolfin::Mesh& mesh)
-    : dolfin::FunctionSpace(boost::shared_ptr<const dolfin::Mesh>(&mesh, dolfin::NoDeleter<const dolfin::Mesh>()),
-                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new UFC_MagmaEquationsLinearForm_finite_element_1()))),
-                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new UFC_MagmaEquationsLinearForm_dof_map_1()), mesh)))
-  {
-    // Do nothing
-  }
-
-};
-
-class MagmaEquationsFunctionSpace : public dolfin::FunctionSpace
-{
-public:
-
-  MagmaEquationsFunctionSpace(const dolfin::Mesh& mesh)
-    : dolfin::FunctionSpace(boost::shared_ptr<const dolfin::Mesh>(&mesh, dolfin::NoDeleter<const dolfin::Mesh>()),
-                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new UFC_MagmaEquationsLinearForm_finite_element_1()))),
-                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new UFC_MagmaEquationsLinearForm_dof_map_1()), mesh)))
-  {
-    // Do nothing
-  }
-
-};
-
-class MagmaEquationsBilinearFormCoefficient0 : public dolfin::Coefficient
-{
-public:
-
-  // Constructor
-  MagmaEquationsBilinearFormCoefficient0(dolfin::Form& form) : dolfin::Coefficient(form) {}
-
-  // Destructor  
-  ~MagmaEquationsBilinearFormCoefficient0() {}
-
-  // Attach function to coefficient
-  const MagmaEquationsBilinearFormCoefficient0& operator= (dolfin::Function& v)
-  {
-    attach(v);
-    return *this;
-  }
-
-  /// Create function space for coefficient
-  const dolfin::FunctionSpace* create_function_space() const
-  {
-    return new MagmaEquationsBilinearFormCoefficientSpace0(form.mesh());
-  }
-  
-  /// Return coefficient number
-  dolfin::uint number() const
-  {
+#include <dolfin/function/GenericFunction.h>
+#include <dolfin/function/CoefficientAssigner.h>
+
+namespace MagmaEquations
+{
+
+class CoefficientSpace_Gamma: public dolfin::FunctionSpace
+{
+public:
+
+  CoefficientSpace_Gamma(const dolfin::Mesh& mesh):
+      dolfin::FunctionSpace(dolfin::reference_to_no_delete_pointer(mesh),
+                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new magmaequations_1_finite_element_5()))),
+                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new magmaequations_1_dof_map_5()), mesh)))
+  {
+    // Do nothing
+  }
+
+  CoefficientSpace_Gamma(dolfin::Mesh& mesh):
+    dolfin::FunctionSpace(dolfin::reference_to_no_delete_pointer(mesh),
+                          boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new magmaequations_1_finite_element_5()))),
+                          boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new magmaequations_1_dof_map_5()), mesh)))
+  {
+    // Do nothing
+  }
+
+  CoefficientSpace_Gamma(boost::shared_ptr<dolfin::Mesh> mesh):
+      dolfin::FunctionSpace(mesh,
+                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new magmaequations_1_finite_element_5()))),
+                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new magmaequations_1_dof_map_5()), *mesh)))
+  {
+      // Do nothing
+  }
+
+  CoefficientSpace_Gamma(boost::shared_ptr<const dolfin::Mesh> mesh):
+      dolfin::FunctionSpace(mesh,
+                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new magmaequations_1_finite_element_5()))),
+                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new magmaequations_1_dof_map_5()), *mesh)))
+  {
+      // Do nothing
+  }
+
+
+  ~CoefficientSpace_Gamma()
+  {
+  }
+
+};
+
+class CoefficientSpace_PStar: public dolfin::FunctionSpace
+{
+public:
+
+  CoefficientSpace_PStar(const dolfin::Mesh& mesh):
+      dolfin::FunctionSpace(dolfin::reference_to_no_delete_pointer(mesh),
+                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new magmaequations_1_finite_element_6()))),
+                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new magmaequations_1_dof_map_6()), mesh)))
+  {
+    // Do nothing
+  }
+
+  CoefficientSpace_PStar(dolfin::Mesh& mesh):
+    dolfin::FunctionSpace(dolfin::reference_to_no_delete_pointer(mesh),
+                          boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new magmaequations_1_finite_element_6()))),
+                          boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new magmaequations_1_dof_map_6()), mesh)))
+  {
+    // Do nothing
+  }
+
+  CoefficientSpace_PStar(boost::shared_ptr<dolfin::Mesh> mesh):
+      dolfin::FunctionSpace(mesh,
+                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new magmaequations_1_finite_element_6()))),
+                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new magmaequations_1_dof_map_6()), *mesh)))
+  {
+      // Do nothing
+  }
+
+  CoefficientSpace_PStar(boost::shared_ptr<const dolfin::Mesh> mesh):
+      dolfin::FunctionSpace(mesh,
+                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new magmaequations_1_finite_element_6()))),
+                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new magmaequations_1_dof_map_6()), *mesh)))
+  {
+      // Do nothing
+  }
+
+
+  ~CoefficientSpace_PStar()
+  {
+  }
+
+};
+
+class CoefficientSpace_dt: public dolfin::FunctionSpace
+{
+public:
+
+  CoefficientSpace_dt(const dolfin::Mesh& mesh):
+      dolfin::FunctionSpace(dolfin::reference_to_no_delete_pointer(mesh),
+                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new magmaequations_1_finite_element_2()))),
+                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new magmaequations_1_dof_map_2()), mesh)))
+  {
+    // Do nothing
+  }
+
+  CoefficientSpace_dt(dolfin::Mesh& mesh):
+    dolfin::FunctionSpace(dolfin::reference_to_no_delete_pointer(mesh),
+                          boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new magmaequations_1_finite_element_2()))),
+                          boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new magmaequations_1_dof_map_2()), mesh)))
+  {
+    // Do nothing
+  }
+
+  CoefficientSpace_dt(boost::shared_ptr<dolfin::Mesh> mesh):
+      dolfin::FunctionSpace(mesh,
+                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new magmaequations_1_finite_element_2()))),
+                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new magmaequations_1_dof_map_2()), *mesh)))
+  {
+      // Do nothing
+  }
+
+  CoefficientSpace_dt(boost::shared_ptr<const dolfin::Mesh> mesh):
+      dolfin::FunctionSpace(mesh,
+                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new magmaequations_1_finite_element_2()))),
+                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new magmaequations_1_dof_map_2()), *mesh)))
+  {
+      // Do nothing
+  }
+
+
+  ~CoefficientSpace_dt()
+  {
+  }
+
+};
+
+class CoefficientSpace_eps: public dolfin::FunctionSpace
+{
+public:
+
+  CoefficientSpace_eps(const dolfin::Mesh& mesh):
+      dolfin::FunctionSpace(dolfin::reference_to_no_delete_pointer(mesh),
+                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new magmaequations_1_finite_element_7()))),
+                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new magmaequations_1_dof_map_7()), mesh)))
+  {
+    // Do nothing
+  }
+
+  CoefficientSpace_eps(dolfin::Mesh& mesh):
+    dolfin::FunctionSpace(dolfin::reference_to_no_delete_pointer(mesh),
+                          boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new magmaequations_1_finite_element_7()))),
+                          boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new magmaequations_1_dof_map_7()), mesh)))
+  {
+    // Do nothing
+  }
+
+  CoefficientSpace_eps(boost::shared_ptr<dolfin::Mesh> mesh):
+      dolfin::FunctionSpace(mesh,
+                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new magmaequations_1_finite_element_7()))),
+                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new magmaequations_1_dof_map_7()), *mesh)))
+  {
+      // Do nothing
+  }
+
+  CoefficientSpace_eps(boost::shared_ptr<const dolfin::Mesh> mesh):
+      dolfin::FunctionSpace(mesh,
+                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new magmaequations_1_finite_element_7()))),
+                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new magmaequations_1_dof_map_7()), *mesh)))
+  {
+      // Do nothing
+  }
+
+
+  ~CoefficientSpace_eps()
+  {
+  }
+
+};
+
+class CoefficientSpace_hsquared: public dolfin::FunctionSpace
+{
+public:
+
+  CoefficientSpace_hsquared(const dolfin::Mesh& mesh):
+      dolfin::FunctionSpace(dolfin::reference_to_no_delete_pointer(mesh),
+                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new magmaequations_1_finite_element_3()))),
+                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new magmaequations_1_dof_map_3()), mesh)))
+  {
+    // Do nothing
+  }
+
+  CoefficientSpace_hsquared(dolfin::Mesh& mesh):
+    dolfin::FunctionSpace(dolfin::reference_to_no_delete_pointer(mesh),
+                          boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new magmaequations_1_finite_element_3()))),
+                          boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new magmaequations_1_dof_map_3()), mesh)))
+  {
+    // Do nothing
+  }
+
+  CoefficientSpace_hsquared(boost::shared_ptr<dolfin::Mesh> mesh):
+      dolfin::FunctionSpace(mesh,
+                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new magmaequations_1_finite_element_3()))),
+                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new magmaequations_1_dof_map_3()), *mesh)))
+  {
+      // Do nothing
+  }
+
+  CoefficientSpace_hsquared(boost::shared_ptr<const dolfin::Mesh> mesh):
+      dolfin::FunctionSpace(mesh,
+                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new magmaequations_1_finite_element_3()))),
+                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new magmaequations_1_dof_map_3()), *mesh)))
+  {
+      // Do nothing
+  }
+
+
+  ~CoefficientSpace_hsquared()
+  {
+  }
+
+};
+
+class CoefficientSpace_iEta: public dolfin::FunctionSpace
+{
+public:
+
+  CoefficientSpace_iEta(const dolfin::Mesh& mesh):
+      dolfin::FunctionSpace(dolfin::reference_to_no_delete_pointer(mesh),
+                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new magmaequations_1_finite_element_4()))),
+                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new magmaequations_1_dof_map_4()), mesh)))
+  {
+    // Do nothing
+  }
+
+  CoefficientSpace_iEta(dolfin::Mesh& mesh):
+    dolfin::FunctionSpace(dolfin::reference_to_no_delete_pointer(mesh),
+                          boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new magmaequations_1_finite_element_4()))),
+                          boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new magmaequations_1_dof_map_4()), mesh)))
+  {
+    // Do nothing
+  }
+
+  CoefficientSpace_iEta(boost::shared_ptr<dolfin::Mesh> mesh):
+      dolfin::FunctionSpace(mesh,
+                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new magmaequations_1_finite_element_4()))),
+                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new magmaequations_1_dof_map_4()), *mesh)))
+  {
+      // Do nothing
+  }
+
+  CoefficientSpace_iEta(boost::shared_ptr<const dolfin::Mesh> mesh):
+      dolfin::FunctionSpace(mesh,
+                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new magmaequations_1_finite_element_4()))),
+                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new magmaequations_1_dof_map_4()), *mesh)))
+  {
+      // Do nothing
+  }
+
+
+  ~CoefficientSpace_iEta()
+  {
+  }
+
+};
+
+class CoefficientSpace_u: public dolfin::FunctionSpace
+{
+public:
+
+  CoefficientSpace_u(const dolfin::Mesh& mesh):
+      dolfin::FunctionSpace(dolfin::reference_to_no_delete_pointer(mesh),
+                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new magmaequations_1_finite_element_1()))),
+                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new magmaequations_1_dof_map_1()), mesh)))
+  {
+    // Do nothing
+  }
+
+  CoefficientSpace_u(dolfin::Mesh& mesh):
+    dolfin::FunctionSpace(dolfin::reference_to_no_delete_pointer(mesh),
+                          boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new magmaequations_1_finite_element_1()))),
+                          boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new magmaequations_1_dof_map_1()), mesh)))
+  {
+    // Do nothing
+  }
+
+  CoefficientSpace_u(boost::shared_ptr<dolfin::Mesh> mesh):
+      dolfin::FunctionSpace(mesh,
+                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new magmaequations_1_finite_element_1()))),
+                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new magmaequations_1_dof_map_1()), *mesh)))
+  {
+      // Do nothing
+  }
+
+  CoefficientSpace_u(boost::shared_ptr<const dolfin::Mesh> mesh):
+      dolfin::FunctionSpace(mesh,
+                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new magmaequations_1_finite_element_1()))),
+                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new magmaequations_1_dof_map_1()), *mesh)))
+  {
+      // Do nothing
+  }
+
+
+  ~CoefficientSpace_u()
+  {
+  }
+
+};
+
+class Form_0_FunctionSpace_0: public dolfin::FunctionSpace
+{
+public:
+
+  Form_0_FunctionSpace_0(const dolfin::Mesh& mesh):
+      dolfin::FunctionSpace(dolfin::reference_to_no_delete_pointer(mesh),
+                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new magmaequations_0_finite_element_0()))),
+                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new magmaequations_0_dof_map_0()), mesh)))
+  {
+    // Do nothing
+  }
+
+  Form_0_FunctionSpace_0(dolfin::Mesh& mesh):
+    dolfin::FunctionSpace(dolfin::reference_to_no_delete_pointer(mesh),
+                          boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new magmaequations_0_finite_element_0()))),
+                          boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new magmaequations_0_dof_map_0()), mesh)))
+  {
+    // Do nothing
+  }
+
+  Form_0_FunctionSpace_0(boost::shared_ptr<dolfin::Mesh> mesh):
+      dolfin::FunctionSpace(mesh,
+                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new magmaequations_0_finite_element_0()))),
+                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new magmaequations_0_dof_map_0()), *mesh)))
+  {
+      // Do nothing
+  }
+
+  Form_0_FunctionSpace_0(boost::shared_ptr<const dolfin::Mesh> mesh):
+      dolfin::FunctionSpace(mesh,
+                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new magmaequations_0_finite_element_0()))),
+                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new magmaequations_0_dof_map_0()), *mesh)))
+  {
+      // Do nothing
+  }
+
+
+  ~Form_0_FunctionSpace_0()
+  {
+  }
+
+};
+
+class Form_0_FunctionSpace_1: public dolfin::FunctionSpace
+{
+public:
+
+  Form_0_FunctionSpace_1(const dolfin::Mesh& mesh):
+      dolfin::FunctionSpace(dolfin::reference_to_no_delete_pointer(mesh),
+                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new magmaequations_0_finite_element_1()))),
+                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new magmaequations_0_dof_map_1()), mesh)))
+  {
+    // Do nothing
+  }
+
+  Form_0_FunctionSpace_1(dolfin::Mesh& mesh):
+    dolfin::FunctionSpace(dolfin::reference_to_no_delete_pointer(mesh),
+                          boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new magmaequations_0_finite_element_1()))),
+                          boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new magmaequations_0_dof_map_1()), mesh)))
+  {
+    // Do nothing
+  }
+
+  Form_0_FunctionSpace_1(boost::shared_ptr<dolfin::Mesh> mesh):
+      dolfin::FunctionSpace(mesh,
+                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new magmaequations_0_finite_element_1()))),
+                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new magmaequations_0_dof_map_1()), *mesh)))
+  {
+      // Do nothing
+  }
+
+  Form_0_FunctionSpace_1(boost::shared_ptr<const dolfin::Mesh> mesh):
+      dolfin::FunctionSpace(mesh,
+                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new magmaequations_0_finite_element_1()))),
+                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new magmaequations_0_dof_map_1()), *mesh)))
+  {
+      // Do nothing
+  }
+
+
+  ~Form_0_FunctionSpace_1()
+  {
+  }
+
+};
+
+typedef CoefficientSpace_u Form_0_FunctionSpace_2;
+
+typedef CoefficientSpace_dt Form_0_FunctionSpace_3;
+
+typedef CoefficientSpace_hsquared Form_0_FunctionSpace_4;
+
+typedef CoefficientSpace_iEta Form_0_FunctionSpace_5;
+
+typedef CoefficientSpace_PStar Form_0_FunctionSpace_6;
+
+typedef CoefficientSpace_eps Form_0_FunctionSpace_7;
+
+class Form_0: public dolfin::Form
+{
+public:
+
+  // Constructor
+  Form_0(const dolfin::FunctionSpace& V0, const dolfin::FunctionSpace& V1):
+    dolfin::Form(2, 6), u(*this, 0), dt(*this, 1), hsquared(*this, 2), iEta(*this, 3), PStar(*this, 4), eps(*this, 5)
+  {
+    _function_spaces[0] = reference_to_no_delete_pointer(V0);
+    _function_spaces[1] = reference_to_no_delete_pointer(V1);
+
+    _ufc_form = boost::shared_ptr<const ufc::form>(new magmaequations_form_0());
+  }
+
+  // Constructor
+  Form_0(const dolfin::FunctionSpace& V0, const dolfin::FunctionSpace& V1, const dolfin::GenericFunction& u, const dolfin::GenericFunction& dt, const dolfin::GenericFunction& hsquared, const dolfin::GenericFunction& iEta, const dolfin::GenericFunction& PStar, const dolfin::GenericFunction& eps):
+    dolfin::Form(2, 6), u(*this, 0), dt(*this, 1), hsquared(*this, 2), iEta(*this, 3), PStar(*this, 4), eps(*this, 5)
+  {
+    _function_spaces[0] = reference_to_no_delete_pointer(V0);
+    _function_spaces[1] = reference_to_no_delete_pointer(V1);
+
+    this->u = u;
+    this->dt = dt;
+    this->hsquared = hsquared;
+    this->iEta = iEta;
+    this->PStar = PStar;
+    this->eps = eps;
+
+    _ufc_form = boost::shared_ptr<const ufc::form>(new magmaequations_form_0());
+  }
+
+  // Constructor
+  Form_0(const dolfin::FunctionSpace& V0, const dolfin::FunctionSpace& V1, boost::shared_ptr<const dolfin::GenericFunction> u, boost::shared_ptr<const dolfin::GenericFunction> dt, boost::shared_ptr<const dolfin::GenericFunction> hsquared, boost::shared_ptr<const dolfin::GenericFunction> iEta, boost::shared_ptr<const dolfin::GenericFunction> PStar, boost::shared_ptr<const dolfin::GenericFunction> eps):
+    dolfin::Form(2, 6), u(*this, 0), dt(*this, 1), hsquared(*this, 2), iEta(*this, 3), PStar(*this, 4), eps(*this, 5)
+  {
+    _function_spaces[0] = reference_to_no_delete_pointer(V0);
+    _function_spaces[1] = reference_to_no_delete_pointer(V1);
+
+    this->u = *u;
+    this->dt = *dt;
+    this->hsquared = *hsquared;
+    this->iEta = *iEta;
+    this->PStar = *PStar;
+    this->eps = *eps;
+
+    _ufc_form = boost::shared_ptr<const ufc::form>(new magmaequations_form_0());
+  }
+
+  // Constructor
+  Form_0(boost::shared_ptr<const dolfin::FunctionSpace> V0, boost::shared_ptr<const dolfin::FunctionSpace> V1):
+    dolfin::Form(2, 6), u(*this, 0), dt(*this, 1), hsquared(*this, 2), iEta(*this, 3), PStar(*this, 4), eps(*this, 5)
+  {
+    _function_spaces[0] = V0;
+    _function_spaces[1] = V1;
+
+    _ufc_form = boost::shared_ptr<const ufc::form>(new magmaequations_form_0());
+  }
+
+  // Constructor
+  Form_0(boost::shared_ptr<const dolfin::FunctionSpace> V0, boost::shared_ptr<const dolfin::FunctionSpace> V1, const dolfin::GenericFunction& u, const dolfin::GenericFunction& dt, const dolfin::GenericFunction& hsquared, const dolfin::GenericFunction& iEta, const dolfin::GenericFunction& PStar, const dolfin::GenericFunction& eps):
+    dolfin::Form(2, 6), u(*this, 0), dt(*this, 1), hsquared(*this, 2), iEta(*this, 3), PStar(*this, 4), eps(*this, 5)
+  {
+    _function_spaces[0] = V0;
+    _function_spaces[1] = V1;
+
+    this->u = u;
+    this->dt = dt;
+    this->hsquared = hsquared;
+    this->iEta = iEta;
+    this->PStar = PStar;
+    this->eps = eps;
+
+    _ufc_form = boost::shared_ptr<const ufc::form>(new magmaequations_form_0());
+  }
+
+  // Constructor
+  Form_0(boost::shared_ptr<const dolfin::FunctionSpace> V0, boost::shared_ptr<const dolfin::FunctionSpace> V1, boost::shared_ptr<const dolfin::GenericFunction> u, boost::shared_ptr<const dolfin::GenericFunction> dt, boost::shared_ptr<const dolfin::GenericFunction> hsquared, boost::shared_ptr<const dolfin::GenericFunction> iEta, boost::shared_ptr<const dolfin::GenericFunction> PStar, boost::shared_ptr<const dolfin::GenericFunction> eps):
+    dolfin::Form(2, 6), u(*this, 0), dt(*this, 1), hsquared(*this, 2), iEta(*this, 3), PStar(*this, 4), eps(*this, 5)
+  {
+    _function_spaces[0] = V0;
+    _function_spaces[1] = V1;
+
+    this->u = *u;
+    this->dt = *dt;
+    this->hsquared = *hsquared;
+    this->iEta = *iEta;
+    this->PStar = *PStar;
+    this->eps = *eps;
+
+    _ufc_form = boost::shared_ptr<const ufc::form>(new magmaequations_form_0());
+  }
+
+  // Destructor
+  ~Form_0()
+  {}
+
+  /// Return the number of the coefficient with this name
+  virtual dolfin::uint coefficient_number(const std::string& name) const
+  {
+    if (name == "u")
+      return 0;
+    else if (name == "dt")
+      return 1;
+    else if (name == "hsquared")
+      return 2;
+    else if (name == "iEta")
+      return 3;
+    else if (name == "PStar")
+      return 4;
+    else if (name == "eps")
+      return 5;
+
+    dolfin::error("Invalid coefficient.");
     return 0;
   }
-  
-  /// Return coefficient name
-  virtual std::string name() const
-  {
-    return "w0";
-  }
-  
-};
-class MagmaEquationsBilinearFormCoefficient1 : public dolfin::Coefficient
-{
-public:
-
-  // Constructor
-  MagmaEquationsBilinearFormCoefficient1(dolfin::Form& form) : dolfin::Coefficient(form) {}
-
-  // Destructor  
-  ~MagmaEquationsBilinearFormCoefficient1() {}
-
-  // Attach function to coefficient
-  const MagmaEquationsBilinearFormCoefficient1& operator= (dolfin::Function& v)
-  {
-    attach(v);
-    return *this;
-  }
-
-  /// Create function space for coefficient
-  const dolfin::FunctionSpace* create_function_space() const
-  {
-    return new MagmaEquationsBilinearFormCoefficientSpace1(form.mesh());
-  }
-  
-  /// Return coefficient number
-  dolfin::uint number() const
-  {
-    return 1;
-  }
-  
-  /// Return coefficient name
-  virtual std::string name() const
-  {
-    return "dt";
-  }
-  
-};
-class MagmaEquationsBilinearFormCoefficient2 : public dolfin::Coefficient
-{
-public:
-
-  // Constructor
-  MagmaEquationsBilinearFormCoefficient2(dolfin::Form& form) : dolfin::Coefficient(form) {}
-
-  // Destructor  
-  ~MagmaEquationsBilinearFormCoefficient2() {}
-
-  // Attach function to coefficient
-  const MagmaEquationsBilinearFormCoefficient2& operator= (dolfin::Function& v)
-  {
-    attach(v);
-    return *this;
-  }
-
-  /// Create function space for coefficient
-  const dolfin::FunctionSpace* create_function_space() const
-  {
-    return new MagmaEquationsBilinearFormCoefficientSpace2(form.mesh());
-  }
-  
-  /// Return coefficient number
-  dolfin::uint number() const
-  {
-    return 2;
-  }
-  
-  /// Return coefficient name
-  virtual std::string name() const
-  {
-    return "hsquared";
-  }
-  
-};
-class MagmaEquationsBilinearFormCoefficient3 : public dolfin::Coefficient
-{
-public:
-
-  // Constructor
-  MagmaEquationsBilinearFormCoefficient3(dolfin::Form& form) : dolfin::Coefficient(form) {}
-
-  // Destructor  
-  ~MagmaEquationsBilinearFormCoefficient3() {}
-
-  // Attach function to coefficient
-  const MagmaEquationsBilinearFormCoefficient3& operator= (dolfin::Function& v)
-  {
-    attach(v);
-    return *this;
-  }
-
-  /// Create function space for coefficient
-  const dolfin::FunctionSpace* create_function_space() const
-  {
-    return new MagmaEquationsBilinearFormCoefficientSpace3(form.mesh());
-  }
-  
-  /// Return coefficient number
-  dolfin::uint number() const
-  {
-    return 3;
-  }
-  
-  /// Return coefficient name
-  virtual std::string name() const
-  {
-    return "n";
-  }
-  
-};
-class MagmaEquationsBilinearFormCoefficient4 : public dolfin::Coefficient
-{
-public:
-
-  // Constructor
-  MagmaEquationsBilinearFormCoefficient4(dolfin::Form& form) : dolfin::Coefficient(form) {}
-
-  // Destructor  
-  ~MagmaEquationsBilinearFormCoefficient4() {}
-
-  // Attach function to coefficient
-  const MagmaEquationsBilinearFormCoefficient4& operator= (dolfin::Function& v)
-  {
-    attach(v);
-    return *this;
-  }
-
-  /// Create function space for coefficient
-  const dolfin::FunctionSpace* create_function_space() const
-  {
-    return new MagmaEquationsBilinearFormCoefficientSpace4(form.mesh());
-  }
-  
-  /// Return coefficient number
-  dolfin::uint number() const
-  {
-    return 4;
-  }
-  
-  /// Return coefficient name
-  virtual std::string name() const
-  {
-    return "iEta";
-  }
-  
-};
-class MagmaEquationsBilinearFormCoefficient5 : public dolfin::Coefficient
-{
-public:
-
-  // Constructor
-  MagmaEquationsBilinearFormCoefficient5(dolfin::Form& form) : dolfin::Coefficient(form) {}
-
-  // Destructor  
-  ~MagmaEquationsBilinearFormCoefficient5() {}
-
-  // Attach function to coefficient
-  const MagmaEquationsBilinearFormCoefficient5& operator= (dolfin::Function& v)
-  {
-    attach(v);
-    return *this;
-  }
-
-  /// Create function space for coefficient
-  const dolfin::FunctionSpace* create_function_space() const
-  {
-    return new MagmaEquationsBilinearFormCoefficientSpace5(form.mesh());
-  }
-  
-  /// Return coefficient number
-  dolfin::uint number() const
-  {
-    return 5;
-  }
-  
-  /// Return coefficient name
-  virtual std::string name() const
-  {
-    return "PStar";
-  }
-  
-};
-class MagmaEquationsBilinearFormCoefficient6 : public dolfin::Coefficient
-{
-public:
-
-  // Constructor
-  MagmaEquationsBilinearFormCoefficient6(dolfin::Form& form) : dolfin::Coefficient(form) {}
-
-  // Destructor  
-  ~MagmaEquationsBilinearFormCoefficient6() {}
-
-  // Attach function to coefficient
-  const MagmaEquationsBilinearFormCoefficient6& operator= (dolfin::Function& v)
-  {
-    attach(v);
-    return *this;
-  }
-
-  /// Create function space for coefficient
-  const dolfin::FunctionSpace* create_function_space() const
-  {
-    return new MagmaEquationsBilinearFormCoefficientSpace6(form.mesh());
-  }
-  
-  /// Return coefficient number
-  dolfin::uint number() const
-  {
-    return 6;
-  }
-  
-  /// Return coefficient name
-  virtual std::string name() const
-  {
-    return "eps";
-  }
-  
-};
-class MagmaEquationsBilinearForm : public dolfin::Form
-{
-public:
-
-  // Create form on given function space(s)
-  MagmaEquationsBilinearForm(const dolfin::FunctionSpace& V0, const dolfin::FunctionSpace& V1) : dolfin::Form(), w0(*this), dt(*this), hsquared(*this), n(*this), iEta(*this), PStar(*this), eps(*this)
-  {
-    boost::shared_ptr<const dolfin::FunctionSpace> _V0(&V0, dolfin::NoDeleter<const dolfin::FunctionSpace>());
-    _function_spaces.push_back(_V0);
-    boost::shared_ptr<const dolfin::FunctionSpace> _V1(&V1, dolfin::NoDeleter<const dolfin::FunctionSpace>());
-    _function_spaces.push_back(_V1);
-
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-
-    _ufc_form = boost::shared_ptr<const ufc::form>(new UFC_MagmaEquationsBilinearForm());
-  }
-
-  // Create form on given function space(s) (shared data)
-  MagmaEquationsBilinearForm(boost::shared_ptr<const dolfin::FunctionSpace> V0, boost::shared_ptr<const dolfin::FunctionSpace> V1) : dolfin::Form(), w0(*this), dt(*this), hsquared(*this), n(*this), iEta(*this), PStar(*this), eps(*this)
-  {
-    _function_spaces.push_back(V0);
-    _function_spaces.push_back(V1);
-
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-
-    _ufc_form = boost::shared_ptr<const ufc::form>(new UFC_MagmaEquationsBilinearForm());
-  }
-
-  // Create form on given function space(s) with given coefficient(s)
-  MagmaEquationsBilinearForm(const dolfin::FunctionSpace& V0, const dolfin::FunctionSpace& V1, dolfin::Function& w0, dolfin::Function& w1, dolfin::Function& w2, dolfin::Function& w3, dolfin::Function& w4, dolfin::Function& w5, dolfin::Function& w6) : dolfin::Form(), w0(*this), dt(*this), hsquared(*this), n(*this), iEta(*this), PStar(*this), eps(*this)
-  {
-    boost::shared_ptr<const dolfin::FunctionSpace> _V0(&V0, dolfin::NoDeleter<const dolfin::FunctionSpace>());
-    _function_spaces.push_back(_V0);
-    boost::shared_ptr<const dolfin::FunctionSpace> _V1(&V1, dolfin::NoDeleter<const dolfin::FunctionSpace>());
-    _function_spaces.push_back(_V1);
-
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-
-    this->w0 = w0;
-    this->dt = w1;
-    this->hsquared = w2;
-    this->n = w3;
-    this->iEta = w4;
-    this->PStar = w5;
-    this->eps = w6;
-
-    _ufc_form = boost::shared_ptr<const ufc::form>(new UFC_MagmaEquationsBilinearForm());
-  }
-
-  // Create form on given function space(s) with given coefficient(s) (shared data)
-  MagmaEquationsBilinearForm(boost::shared_ptr<const dolfin::FunctionSpace> V0, boost::shared_ptr<const dolfin::FunctionSpace> V1, dolfin::Function& w0, dolfin::Function& w1, dolfin::Function& w2, dolfin::Function& w3, dolfin::Function& w4, dolfin::Function& w5, dolfin::Function& w6) : dolfin::Form(), w0(*this), dt(*this), hsquared(*this), n(*this), iEta(*this), PStar(*this), eps(*this)
-  {
-    _function_spaces.push_back(V0);
-    _function_spaces.push_back(V1);
-
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-
-    this->w0 = w0;
-    this->dt = w1;
-    this->hsquared = w2;
-    this->n = w3;
-    this->iEta = w4;
-    this->PStar = w5;
-    this->eps = w6;
-
-    _ufc_form = boost::shared_ptr<const ufc::form>(new UFC_MagmaEquationsBilinearForm());
+
+  /// Return the name of the coefficient with this number
+  virtual std::string coefficient_name(dolfin::uint i) const
+  {
+    switch (i)
+    {
+    case 0:
+      return "u";
+    case 1:
+      return "dt";
+    case 2:
+      return "hsquared";
+    case 3:
+      return "iEta";
+    case 4:
+      return "PStar";
+    case 5:
+      return "eps";
+    }
+
+    dolfin::error("Invalid coefficient.");
+    return "unnamed";
+  }
+
+  // Typedefs
+  typedef Form_0_FunctionSpace_0 TestSpace;
+  typedef Form_0_FunctionSpace_1 TrialSpace;
+  typedef Form_0_FunctionSpace_2 CoefficientSpace_u;
+  typedef Form_0_FunctionSpace_3 CoefficientSpace_dt;
+  typedef Form_0_FunctionSpace_4 CoefficientSpace_hsquared;
+  typedef Form_0_FunctionSpace_5 CoefficientSpace_iEta;
+  typedef Form_0_FunctionSpace_6 CoefficientSpace_PStar;
+  typedef Form_0_FunctionSpace_7 CoefficientSpace_eps;
+
+  // Coefficients
+  dolfin::CoefficientAssigner u;
+  dolfin::CoefficientAssigner dt;
+  dolfin::CoefficientAssigner hsquared;
+  dolfin::CoefficientAssigner iEta;
+  dolfin::CoefficientAssigner PStar;
+  dolfin::CoefficientAssigner eps;
+};
+
+class Form_1_FunctionSpace_0: public dolfin::FunctionSpace
+{
+public:
+
+  Form_1_FunctionSpace_0(const dolfin::Mesh& mesh):
+      dolfin::FunctionSpace(dolfin::reference_to_no_delete_pointer(mesh),
+                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new magmaequations_1_finite_element_0()))),
+                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new magmaequations_1_dof_map_0()), mesh)))
+  {
+    // Do nothing
+  }
+
+  Form_1_FunctionSpace_0(dolfin::Mesh& mesh):
+    dolfin::FunctionSpace(dolfin::reference_to_no_delete_pointer(mesh),
+                          boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new magmaequations_1_finite_element_0()))),
+                          boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new magmaequations_1_dof_map_0()), mesh)))
+  {
+    // Do nothing
+  }
+
+  Form_1_FunctionSpace_0(boost::shared_ptr<dolfin::Mesh> mesh):
+      dolfin::FunctionSpace(mesh,
+                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new magmaequations_1_finite_element_0()))),
+                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new magmaequations_1_dof_map_0()), *mesh)))
+  {
+      // Do nothing
+  }
+
+  Form_1_FunctionSpace_0(boost::shared_ptr<const dolfin::Mesh> mesh):
+      dolfin::FunctionSpace(mesh,
+                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new magmaequations_1_finite_element_0()))),
+                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new magmaequations_1_dof_map_0()), *mesh)))
+  {
+      // Do nothing
+  }
+
+
+  ~Form_1_FunctionSpace_0()
+  {
+  }
+
+};
+
+typedef CoefficientSpace_u Form_1_FunctionSpace_1;
+
+typedef CoefficientSpace_dt Form_1_FunctionSpace_2;
+
+typedef CoefficientSpace_hsquared Form_1_FunctionSpace_3;
+
+typedef CoefficientSpace_iEta Form_1_FunctionSpace_4;
+
+typedef CoefficientSpace_Gamma Form_1_FunctionSpace_5;
+
+typedef CoefficientSpace_PStar Form_1_FunctionSpace_6;
+
+typedef CoefficientSpace_eps Form_1_FunctionSpace_7;
+
+class Form_1: public dolfin::Form
+{
+public:
+
+  // Constructor
+  Form_1(const dolfin::FunctionSpace& V0):
+    dolfin::Form(1, 7), u(*this, 0), dt(*this, 1), hsquared(*this, 2), iEta(*this, 3), Gamma(*this, 4), PStar(*this, 5), eps(*this, 6)
+  {
+    _function_spaces[0] = reference_to_no_delete_pointer(V0);
+
+    _ufc_form = boost::shared_ptr<const ufc::form>(new magmaequations_form_1());
+  }
+
+  // Constructor
+  Form_1(const dolfin::FunctionSpace& V0, const dolfin::GenericFunction& u, const dolfin::GenericFunction& dt, const dolfin::GenericFunction& hsquared, const dolfin::GenericFunction& iEta, const dolfin::GenericFunction& Gamma, const dolfin::GenericFunction& PStar, const dolfin::GenericFunction& eps):
+    dolfin::Form(1, 7), u(*this, 0), dt(*this, 1), hsquared(*this, 2), iEta(*this, 3), Gamma(*this, 4), PStar(*this, 5), eps(*this, 6)
+  {
+    _function_spaces[0] = reference_to_no_delete_pointer(V0);
+
+    this->u = u;
+    this->dt = dt;
+    this->hsquared = hsquared;
+    this->iEta = iEta;
+    this->Gamma = Gamma;
+    this->PStar = PStar;
+    this->eps = eps;
+
+    _ufc_form = boost::shared_ptr<const ufc::form>(new magmaequations_form_1());
+  }
+
+  // Constructor
+  Form_1(const dolfin::FunctionSpace& V0, boost::shared_ptr<const dolfin::GenericFunction> u, boost::shared_ptr<const dolfin::GenericFunction> dt, boost::shared_ptr<const dolfin::GenericFunction> hsquared, boost::shared_ptr<const dolfin::GenericFunction> iEta, boost::shared_ptr<const dolfin::GenericFunction> Gamma, boost::shared_ptr<const dolfin::GenericFunction> PStar, boost::shared_ptr<const dolfin::GenericFunction> eps):
+    dolfin::Form(1, 7), u(*this, 0), dt(*this, 1), hsquared(*this, 2), iEta(*this, 3), Gamma(*this, 4), PStar(*this, 5), eps(*this, 6)
+  {
+    _function_spaces[0] = reference_to_no_delete_pointer(V0);
+
+    this->u = *u;
+    this->dt = *dt;
+    this->hsquared = *hsquared;
+    this->iEta = *iEta;
+    this->Gamma = *Gamma;
+    this->PStar = *PStar;
+    this->eps = *eps;
+
+    _ufc_form = boost::shared_ptr<const ufc::form>(new magmaequations_form_1());
+  }
+
+  // Constructor
+  Form_1(boost::shared_ptr<const dolfin::FunctionSpace> V0):
+    dolfin::Form(1, 7), u(*this, 0), dt(*this, 1), hsquared(*this, 2), iEta(*this, 3), Gamma(*this, 4), PStar(*this, 5), eps(*this, 6)
+  {
+    _function_spaces[0] = V0;
+
+    _ufc_form = boost::shared_ptr<const ufc::form>(new magmaequations_form_1());
+  }
+
+  // Constructor
+  Form_1(boost::shared_ptr<const dolfin::FunctionSpace> V0, const dolfin::GenericFunction& u, const dolfin::GenericFunction& dt, const dolfin::GenericFunction& hsquared, const dolfin::GenericFunction& iEta, const dolfin::GenericFunction& Gamma, const dolfin::GenericFunction& PStar, const dolfin::GenericFunction& eps):
+    dolfin::Form(1, 7), u(*this, 0), dt(*this, 1), hsquared(*this, 2), iEta(*this, 3), Gamma(*this, 4), PStar(*this, 5), eps(*this, 6)
+  {
+    _function_spaces[0] = V0;
+
+    this->u = u;
+    this->dt = dt;
+    this->hsquared = hsquared;
+    this->iEta = iEta;
+    this->Gamma = Gamma;
+    this->PStar = PStar;
+    this->eps = eps;
+
+    _ufc_form = boost::shared_ptr<const ufc::form>(new magmaequations_form_1());
+  }
+
+  // Constructor
+  Form_1(boost::shared_ptr<const dolfin::FunctionSpace> V0, boost::shared_ptr<const dolfin::GenericFunction> u, boost::shared_ptr<const dolfin::GenericFunction> dt, boost::shared_ptr<const dolfin::GenericFunction> hsquared, boost::shared_ptr<const dolfin::GenericFunction> iEta, boost::shared_ptr<const dolfin::GenericFunction> Gamma, boost::shared_ptr<const dolfin::GenericFunction> PStar, boost::shared_ptr<const dolfin::GenericFunction> eps):
+    dolfin::Form(1, 7), u(*this, 0), dt(*this, 1), hsquared(*this, 2), iEta(*this, 3), Gamma(*this, 4), PStar(*this, 5), eps(*this, 6)
+  {
+    _function_spaces[0] = V0;
+
+    this->u = *u;
+    this->dt = *dt;
+    this->hsquared = *hsquared;
+    this->iEta = *iEta;
+    this->Gamma = *Gamma;
+    this->PStar = *PStar;
+    this->eps = *eps;
+
+    _ufc_form = boost::shared_ptr<const ufc::form>(new magmaequations_form_1());
   }
 
   // Destructor
-  ~MagmaEquationsBilinearForm() {}
+  ~Form_1()
+  {}
+
+  /// Return the number of the coefficient with this name
+  virtual dolfin::uint coefficient_number(const std::string& name) const
+  {
+    if (name == "u")
+      return 0;
+    else if (name == "dt")
+      return 1;
+    else if (name == "hsquared")
+      return 2;
+    else if (name == "iEta")
+      return 3;
+    else if (name == "Gamma")
+      return 4;
+    else if (name == "PStar")
+      return 5;
+    else if (name == "eps")
+      return 6;
+
+    dolfin::error("Invalid coefficient.");
+    return 0;
+  }
+
+  /// Return the name of the coefficient with this number
+  virtual std::string coefficient_name(dolfin::uint i) const
+  {
+    switch (i)
+    {
+    case 0:
+      return "u";
+    case 1:
+      return "dt";
+    case 2:
+      return "hsquared";
+    case 3:
+      return "iEta";
+    case 4:
+      return "Gamma";
+    case 5:
+      return "PStar";
+    case 6:
+      return "eps";
+    }
+
+    dolfin::error("Invalid coefficient.");
+    return "unnamed";
+  }
+
+  // Typedefs
+  typedef Form_1_FunctionSpace_0 TestSpace;
+  typedef Form_1_FunctionSpace_1 CoefficientSpace_u;
+  typedef Form_1_FunctionSpace_2 CoefficientSpace_dt;
+  typedef Form_1_FunctionSpace_3 CoefficientSpace_hsquared;
+  typedef Form_1_FunctionSpace_4 CoefficientSpace_iEta;
+  typedef Form_1_FunctionSpace_5 CoefficientSpace_Gamma;
+  typedef Form_1_FunctionSpace_6 CoefficientSpace_PStar;
+  typedef Form_1_FunctionSpace_7 CoefficientSpace_eps;
 
   // Coefficients
-  MagmaEquationsBilinearFormCoefficient0 w0;
-  MagmaEquationsBilinearFormCoefficient1 dt;
-  MagmaEquationsBilinearFormCoefficient2 hsquared;
-  MagmaEquationsBilinearFormCoefficient3 n;
-  MagmaEquationsBilinearFormCoefficient4 iEta;
-  MagmaEquationsBilinearFormCoefficient5 PStar;
-  MagmaEquationsBilinearFormCoefficient6 eps;
-
-};
-
-class MagmaEquationsLinearFormCoefficient0 : public dolfin::Coefficient
-{
-public:
-
-  // Constructor
-  MagmaEquationsLinearFormCoefficient0(dolfin::Form& form) : dolfin::Coefficient(form) {}
-
-  // Destructor  
-  ~MagmaEquationsLinearFormCoefficient0() {}
-
-  // Attach function to coefficient
-  const MagmaEquationsLinearFormCoefficient0& operator= (dolfin::Function& v)
-  {
-    attach(v);
-    return *this;
-  }
-
-  /// Create function space for coefficient
-  const dolfin::FunctionSpace* create_function_space() const
-  {
-    return new MagmaEquationsLinearFormCoefficientSpace0(form.mesh());
-  }
-  
-  /// Return coefficient number
-  dolfin::uint number() const
-  {
-    return 0;
-  }
-  
-  /// Return coefficient name
-  virtual std::string name() const
-  {
-    return "w7";
-  }
-  
-};
-class MagmaEquationsLinearFormCoefficient1 : public dolfin::Coefficient
-{
-public:
-
-  // Constructor
-  MagmaEquationsLinearFormCoefficient1(dolfin::Form& form) : dolfin::Coefficient(form) {}
-
-  // Destructor  
-  ~MagmaEquationsLinearFormCoefficient1() {}
-
-  // Attach function to coefficient
-  const MagmaEquationsLinearFormCoefficient1& operator= (dolfin::Function& v)
-  {
-    attach(v);
-    return *this;
-  }
-
-  /// Create function space for coefficient
-  const dolfin::FunctionSpace* create_function_space() const
-  {
-    return new MagmaEquationsLinearFormCoefficientSpace1(form.mesh());
-  }
-  
-  /// Return coefficient number
-  dolfin::uint number() const
-  {
-    return 1;
-  }
-  
-  /// Return coefficient name
-  virtual std::string name() const
-  {
-    return "dt";
-  }
-  
-};
-class MagmaEquationsLinearFormCoefficient2 : public dolfin::Coefficient
-{
-public:
-
-  // Constructor
-  MagmaEquationsLinearFormCoefficient2(dolfin::Form& form) : dolfin::Coefficient(form) {}
-
-  // Destructor  
-  ~MagmaEquationsLinearFormCoefficient2() {}
-
-  // Attach function to coefficient
-  const MagmaEquationsLinearFormCoefficient2& operator= (dolfin::Function& v)
-  {
-    attach(v);
-    return *this;
-  }
-
-  /// Create function space for coefficient
-  const dolfin::FunctionSpace* create_function_space() const
-  {
-    return new MagmaEquationsLinearFormCoefficientSpace2(form.mesh());
-  }
-  
-  /// Return coefficient number
-  dolfin::uint number() const
-  {
-    return 2;
-  }
-  
-  /// Return coefficient name
-  virtual std::string name() const
-  {
-    return "hsquared";
-  }
-  
-};
-class MagmaEquationsLinearFormCoefficient3 : public dolfin::Coefficient
-{
-public:
-
-  // Constructor
-  MagmaEquationsLinearFormCoefficient3(dolfin::Form& form) : dolfin::Coefficient(form) {}
-
-  // Destructor  
-  ~MagmaEquationsLinearFormCoefficient3() {}
-
-  // Attach function to coefficient
-  const MagmaEquationsLinearFormCoefficient3& operator= (dolfin::Function& v)
-  {
-    attach(v);
-    return *this;
-  }
-
-  /// Create function space for coefficient
-  const dolfin::FunctionSpace* create_function_space() const
-  {
-    return new MagmaEquationsLinearFormCoefficientSpace3(form.mesh());
-  }
-  
-  /// Return coefficient number
-  dolfin::uint number() const
-  {
-    return 3;
-  }
-  
-  /// Return coefficient name
-  virtual std::string name() const
-  {
-    return "n";
-  }
-  
-};
-class MagmaEquationsLinearFormCoefficient4 : public dolfin::Coefficient
-{
-public:
-
-  // Constructor
-  MagmaEquationsLinearFormCoefficient4(dolfin::Form& form) : dolfin::Coefficient(form) {}
-
-  // Destructor  
-  ~MagmaEquationsLinearFormCoefficient4() {}
-
-  // Attach function to coefficient
-  const MagmaEquationsLinearFormCoefficient4& operator= (dolfin::Function& v)
-  {
-    attach(v);
-    return *this;
-  }
-
-  /// Create function space for coefficient
-  const dolfin::FunctionSpace* create_function_space() const
-  {
-    return new MagmaEquationsLinearFormCoefficientSpace4(form.mesh());
-  }
-  
-  /// Return coefficient number
-  dolfin::uint number() const
-  {
-    return 4;
-  }
-  
-  /// Return coefficient name
-  virtual std::string name() const
-  {
-    return "iEta";
-  }
-  
-};
-class MagmaEquationsLinearFormCoefficient5 : public dolfin::Coefficient
-{
-public:
-
-  // Constructor
-  MagmaEquationsLinearFormCoefficient5(dolfin::Form& form) : dolfin::Coefficient(form) {}
-
-  // Destructor  
-  ~MagmaEquationsLinearFormCoefficient5() {}
-
-  // Attach function to coefficient
-  const MagmaEquationsLinearFormCoefficient5& operator= (dolfin::Function& v)
-  {
-    attach(v);
-    return *this;
-  }
-
-  /// Create function space for coefficient
-  const dolfin::FunctionSpace* create_function_space() const
-  {
-    return new MagmaEquationsLinearFormCoefficientSpace5(form.mesh());
-  }
-  
-  /// Return coefficient number
-  dolfin::uint number() const
-  {
-    return 5;
-  }
-  
-  /// Return coefficient name
-  virtual std::string name() const
-  {
-    return "Gamma";
-  }
-  
-};
-class MagmaEquationsLinearFormCoefficient6 : public dolfin::Coefficient
-{
-public:
-
-  // Constructor
-  MagmaEquationsLinearFormCoefficient6(dolfin::Form& form) : dolfin::Coefficient(form) {}
-
-  // Destructor  
-  ~MagmaEquationsLinearFormCoefficient6() {}
-
-  // Attach function to coefficient
-  const MagmaEquationsLinearFormCoefficient6& operator= (dolfin::Function& v)
-  {
-    attach(v);
-    return *this;
-  }
-
-  /// Create function space for coefficient
-  const dolfin::FunctionSpace* create_function_space() const
-  {
-    return new MagmaEquationsLinearFormCoefficientSpace6(form.mesh());
-  }
-  
-  /// Return coefficient number
-  dolfin::uint number() const
-  {
-    return 6;
-  }
-  
-  /// Return coefficient name
-  virtual std::string name() const
-  {
-    return "PStar";
-  }
-  
-};
-class MagmaEquationsLinearFormCoefficient7 : public dolfin::Coefficient
-{
-public:
-
-  // Constructor
-  MagmaEquationsLinearFormCoefficient7(dolfin::Form& form) : dolfin::Coefficient(form) {}
-
-  // Destructor  
-  ~MagmaEquationsLinearFormCoefficient7() {}
-
-  // Attach function to coefficient
-  const MagmaEquationsLinearFormCoefficient7& operator= (dolfin::Function& v)
-  {
-    attach(v);
-    return *this;
-  }
-
-  /// Create function space for coefficient
-  const dolfin::FunctionSpace* create_function_space() const
-  {
-    return new MagmaEquationsLinearFormCoefficientSpace7(form.mesh());
-  }
-  
-  /// Return coefficient number
-  dolfin::uint number() const
-  {
-    return 7;
-  }
-  
-  /// Return coefficient name
-  virtual std::string name() const
-  {
-    return "eps";
-  }
-  
-};
-class MagmaEquationsLinearForm : public dolfin::Form
-{
-public:
-
-  // Create form on given function space(s)
-  MagmaEquationsLinearForm(const dolfin::FunctionSpace& V0) : dolfin::Form(), w7(*this), dt(*this), hsquared(*this), n(*this), iEta(*this), Gamma(*this), PStar(*this), eps(*this)
-  {
-    boost::shared_ptr<const dolfin::FunctionSpace> _V0(&V0, dolfin::NoDeleter<const dolfin::FunctionSpace>());
-    _function_spaces.push_back(_V0);
-
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-
-    _ufc_form = boost::shared_ptr<const ufc::form>(new UFC_MagmaEquationsLinearForm());
-  }
-
-  // Create form on given function space(s) (shared data)
-  MagmaEquationsLinearForm(boost::shared_ptr<const dolfin::FunctionSpace> V0) : dolfin::Form(), w7(*this), dt(*this), hsquared(*this), n(*this), iEta(*this), Gamma(*this), PStar(*this), eps(*this)
-  {
-    _function_spaces.push_back(V0);
-
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-
-    _ufc_form = boost::shared_ptr<const ufc::form>(new UFC_MagmaEquationsLinearForm());
-  }
-
-  // Create form on given function space(s) with given coefficient(s)
-  MagmaEquationsLinearForm(const dolfin::FunctionSpace& V0, dolfin::Function& w0, dolfin::Function& w1, dolfin::Function& w2, dolfin::Function& w3, dolfin::Function& w4, dolfin::Function& w5, dolfin::Function& w6, dolfin::Function& w7) : dolfin::Form(), w7(*this), dt(*this), hsquared(*this), n(*this), iEta(*this), Gamma(*this), PStar(*this), eps(*this)
-  {
-    boost::shared_ptr<const dolfin::FunctionSpace> _V0(&V0, dolfin::NoDeleter<const dolfin::FunctionSpace>());
-    _function_spaces.push_back(_V0);
-
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-
-    this->w7 = w0;
-    this->dt = w1;
-    this->hsquared = w2;
-    this->n = w3;
-    this->iEta = w4;
-    this->Gamma = w5;
-    this->PStar = w6;
-    this->eps = w7;
-
-    _ufc_form = boost::shared_ptr<const ufc::form>(new UFC_MagmaEquationsLinearForm());
-  }
-
-  // Create form on given function space(s) with given coefficient(s) (shared data)
-  MagmaEquationsLinearForm(boost::shared_ptr<const dolfin::FunctionSpace> V0, dolfin::Function& w0, dolfin::Function& w1, dolfin::Function& w2, dolfin::Function& w3, dolfin::Function& w4, dolfin::Function& w5, dolfin::Function& w6, dolfin::Function& w7) : dolfin::Form(), w7(*this), dt(*this), hsquared(*this), n(*this), iEta(*this), Gamma(*this), PStar(*this), eps(*this)
-  {
-    _function_spaces.push_back(V0);
-
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-
-    this->w7 = w0;
-    this->dt = w1;
-    this->hsquared = w2;
-    this->n = w3;
-    this->iEta = w4;
-    this->Gamma = w5;
-    this->PStar = w6;
-    this->eps = w7;
-
-    _ufc_form = boost::shared_ptr<const ufc::form>(new UFC_MagmaEquationsLinearForm());
-  }
-
-  // Destructor
-  ~MagmaEquationsLinearForm() {}
-
-  // Coefficients
-  MagmaEquationsLinearFormCoefficient0 w7;
-  MagmaEquationsLinearFormCoefficient1 dt;
-  MagmaEquationsLinearFormCoefficient2 hsquared;
-  MagmaEquationsLinearFormCoefficient3 n;
-  MagmaEquationsLinearFormCoefficient4 iEta;
-  MagmaEquationsLinearFormCoefficient5 Gamma;
-  MagmaEquationsLinearFormCoefficient6 PStar;
-  MagmaEquationsLinearFormCoefficient7 eps;
-
-};
+  dolfin::CoefficientAssigner u;
+  dolfin::CoefficientAssigner dt;
+  dolfin::CoefficientAssigner hsquared;
+  dolfin::CoefficientAssigner iEta;
+  dolfin::CoefficientAssigner Gamma;
+  dolfin::CoefficientAssigner PStar;
+  dolfin::CoefficientAssigner eps;
+};
+
+// Class typedefs
+typedef Form_0 BilinearForm;
+typedef Form_1 LinearForm;
+typedef Form_0::TestSpace FunctionSpace;
+
+} // namespace MagmaEquations
 
 #endif
diff -r 925bd37bea8a -r 0b9832b2bf6b MADDs-5/MADDs-5a/cpp/MeltFlux.h
--- a/MADDs-5/MADDs-5a/cpp/MeltFlux.h	Sun Dec 06 14:02:56 2009 -0500
+++ b/MADDs-5/MADDs-5a/cpp/MeltFlux.h	Sun Dec 06 14:03:20 2009 -0500
@@ -1,5 +1,5 @@
 // This code conforms with the UFC specification version 1.0
-// and was automatically generated by FFC version 0.6.2.
+// and was automatically generated by FFC version 0.7.1.
 //
 // Warning: This code was generated with the option '-l dolfin'
 // and contains DOLFIN-specific wrappers that depend on DOLFIN.
@@ -14,15 +14,15 @@
     
 /// This class defines the interface for a finite element.
 
-class UFC_MeltFluxBilinearForm_finite_element_0_0: public ufc::finite_element
+class meltflux_0_finite_element_0_0: public ufc::finite_element
 {
 public:
 
   /// Constructor
-  UFC_MeltFluxBilinearForm_finite_element_0_0();
+  meltflux_0_finite_element_0_0();
 
   /// Destructor
-  virtual ~UFC_MeltFluxBilinearForm_finite_element_0_0();
+  virtual ~meltflux_0_finite_element_0_0();
 
   /// Return a string identifying the finite element
   virtual const char* signature() const;
@@ -56,7 +56,7 @@ public:
                                           double* values,
                                           const double* coordinates,
                                           const ufc::cell& c) const;
-  
+
   /// Evaluate order n derivatives of all basis functions at given point in cell
   virtual void evaluate_basis_derivatives_all(unsigned int n,
                                               double* values,
@@ -88,15 +88,15 @@ public:
 
 /// This class defines the interface for a finite element.
 
-class UFC_MeltFluxBilinearForm_finite_element_0_1: public ufc::finite_element
+class meltflux_0_finite_element_0_1: public ufc::finite_element
 {
 public:
 
   /// Constructor
-  UFC_MeltFluxBilinearForm_finite_element_0_1();
+  meltflux_0_finite_element_0_1();
 
   /// Destructor
-  virtual ~UFC_MeltFluxBilinearForm_finite_element_0_1();
+  virtual ~meltflux_0_finite_element_0_1();
 
   /// Return a string identifying the finite element
   virtual const char* signature() const;
@@ -130,7 +130,7 @@ public:
                                           double* values,
                                           const double* coordinates,
                                           const ufc::cell& c) const;
-  
+
   /// Evaluate order n derivatives of all basis functions at given point in cell
   virtual void evaluate_basis_derivatives_all(unsigned int n,
                                               double* values,
@@ -162,15 +162,15 @@ public:
 
 /// This class defines the interface for a finite element.
 
-class UFC_MeltFluxBilinearForm_finite_element_0: public ufc::finite_element
+class meltflux_0_finite_element_0: public ufc::finite_element
 {
 public:
 
   /// Constructor
-  UFC_MeltFluxBilinearForm_finite_element_0();
+  meltflux_0_finite_element_0();
 
   /// Destructor
-  virtual ~UFC_MeltFluxBilinearForm_finite_element_0();
+  virtual ~meltflux_0_finite_element_0();
 
   /// Return a string identifying the finite element
   virtual const char* signature() const;
@@ -204,7 +204,7 @@ public:
                                           double* values,
                                           const double* coordinates,
                                           const ufc::cell& c) const;
-  
+
   /// Evaluate order n derivatives of all basis functions at given point in cell
   virtual void evaluate_basis_derivatives_all(unsigned int n,
                                               double* values,
@@ -236,15 +236,15 @@ public:
 
 /// This class defines the interface for a finite element.
 
-class UFC_MeltFluxBilinearForm_finite_element_1_0: public ufc::finite_element
+class meltflux_0_finite_element_1_0: public ufc::finite_element
 {
 public:
 
   /// Constructor
-  UFC_MeltFluxBilinearForm_finite_element_1_0();
+  meltflux_0_finite_element_1_0();
 
   /// Destructor
-  virtual ~UFC_MeltFluxBilinearForm_finite_element_1_0();
+  virtual ~meltflux_0_finite_element_1_0();
 
   /// Return a string identifying the finite element
   virtual const char* signature() const;
@@ -278,7 +278,7 @@ public:
                                           double* values,
                                           const double* coordinates,
                                           const ufc::cell& c) const;
-  
+
   /// Evaluate order n derivatives of all basis functions at given point in cell
   virtual void evaluate_basis_derivatives_all(unsigned int n,
                                               double* values,
@@ -310,15 +310,15 @@ public:
 
 /// This class defines the interface for a finite element.
 
-class UFC_MeltFluxBilinearForm_finite_element_1_1: public ufc::finite_element
+class meltflux_0_finite_element_1_1: public ufc::finite_element
 {
 public:
 
   /// Constructor
-  UFC_MeltFluxBilinearForm_finite_element_1_1();
+  meltflux_0_finite_element_1_1();
 
   /// Destructor
-  virtual ~UFC_MeltFluxBilinearForm_finite_element_1_1();
+  virtual ~meltflux_0_finite_element_1_1();
 
   /// Return a string identifying the finite element
   virtual const char* signature() const;
@@ -352,7 +352,7 @@ public:
                                           double* values,
                                           const double* coordinates,
                                           const ufc::cell& c) const;
-  
+
   /// Evaluate order n derivatives of all basis functions at given point in cell
   virtual void evaluate_basis_derivatives_all(unsigned int n,
                                               double* values,
@@ -384,15 +384,15 @@ public:
 
 /// This class defines the interface for a finite element.
 
-class UFC_MeltFluxBilinearForm_finite_element_1: public ufc::finite_element
+class meltflux_0_finite_element_1: public ufc::finite_element
 {
 public:
 
   /// Constructor
-  UFC_MeltFluxBilinearForm_finite_element_1();
+  meltflux_0_finite_element_1();
 
   /// Destructor
-  virtual ~UFC_MeltFluxBilinearForm_finite_element_1();
+  virtual ~meltflux_0_finite_element_1();
 
   /// Return a string identifying the finite element
   virtual const char* signature() const;
@@ -426,7 +426,7 @@ public:
                                           double* values,
                                           const double* coordinates,
                                           const ufc::cell& c) const;
-  
+
   /// Evaluate order n derivatives of all basis functions at given point in cell
   virtual void evaluate_basis_derivatives_all(unsigned int n,
                                               double* values,
@@ -459,7 +459,7 @@ public:
 /// This class defines the interface for a local-to-global mapping of
 /// degrees of freedom (dofs).
 
-class UFC_MeltFluxBilinearForm_dof_map_0_0: public ufc::dof_map
+class meltflux_0_dof_map_0_0: public ufc::dof_map
 {
 private:
 
@@ -468,10 +468,10 @@ public:
 public:
 
   /// Constructor
-  UFC_MeltFluxBilinearForm_dof_map_0_0();
+  meltflux_0_dof_map_0_0();
 
   /// Destructor
-  virtual ~UFC_MeltFluxBilinearForm_dof_map_0_0();
+  virtual ~meltflux_0_dof_map_0_0();
 
   /// Return a string identifying the dof map
   virtual const char* signature() const;
@@ -492,8 +492,11 @@ public:
   /// Return the dimension of the global finite element function space
   virtual unsigned int global_dimension() const;
 
-  /// Return the dimension of the local finite element function space
-  virtual unsigned int local_dimension() const;
+  /// Return the dimension of the local finite element function space for a cell
+  virtual unsigned int local_dimension(const ufc::cell& c) const;
+
+  /// Return the maximum dimension of the local finite element function space
+  virtual unsigned int max_local_dimension() const;
 
   // Return the geometric dimension of the coordinates this dof map provides
   virtual unsigned int geometric_dimension() const;
@@ -532,7 +535,7 @@ public:
 /// This class defines the interface for a local-to-global mapping of
 /// degrees of freedom (dofs).
 
-class UFC_MeltFluxBilinearForm_dof_map_0_1: public ufc::dof_map
+class meltflux_0_dof_map_0_1: public ufc::dof_map
 {
 private:
 
@@ -541,10 +544,10 @@ public:
 public:
 
   /// Constructor
-  UFC_MeltFluxBilinearForm_dof_map_0_1();
+  meltflux_0_dof_map_0_1();
 
   /// Destructor
-  virtual ~UFC_MeltFluxBilinearForm_dof_map_0_1();
+  virtual ~meltflux_0_dof_map_0_1();
 
   /// Return a string identifying the dof map
   virtual const char* signature() const;
@@ -565,8 +568,11 @@ public:
   /// Return the dimension of the global finite element function space
   virtual unsigned int global_dimension() const;
 
-  /// Return the dimension of the local finite element function space
-  virtual unsigned int local_dimension() const;
+  /// Return the dimension of the local finite element function space for a cell
+  virtual unsigned int local_dimension(const ufc::cell& c) const;
+
+  /// Return the maximum dimension of the local finite element function space
+  virtual unsigned int max_local_dimension() const;
 
   // Return the geometric dimension of the coordinates this dof map provides
   virtual unsigned int geometric_dimension() const;
@@ -605,7 +611,7 @@ public:
 /// This class defines the interface for a local-to-global mapping of
 /// degrees of freedom (dofs).
 
-class UFC_MeltFluxBilinearForm_dof_map_0: public ufc::dof_map
+class meltflux_0_dof_map_0: public ufc::dof_map
 {
 private:
 
@@ -614,10 +620,10 @@ public:
 public:
 
   /// Constructor
-  UFC_MeltFluxBilinearForm_dof_map_0();
+  meltflux_0_dof_map_0();
 
   /// Destructor
-  virtual ~UFC_MeltFluxBilinearForm_dof_map_0();
+  virtual ~meltflux_0_dof_map_0();
 
   /// Return a string identifying the dof map
   virtual const char* signature() const;
@@ -638,8 +644,11 @@ public:
   /// Return the dimension of the global finite element function space
   virtual unsigned int global_dimension() const;
 
-  /// Return the dimension of the local finite element function space
-  virtual unsigned int local_dimension() const;
+  /// Return the dimension of the local finite element function space for a cell
+  virtual unsigned int local_dimension(const ufc::cell& c) const;
+
+  /// Return the maximum dimension of the local finite element function space
+  virtual unsigned int max_local_dimension() const;
 
   // Return the geometric dimension of the coordinates this dof map provides
   virtual unsigned int geometric_dimension() const;
@@ -678,7 +687,7 @@ public:
 /// This class defines the interface for a local-to-global mapping of
 /// degrees of freedom (dofs).
 
-class UFC_MeltFluxBilinearForm_dof_map_1_0: public ufc::dof_map
+class meltflux_0_dof_map_1_0: public ufc::dof_map
 {
 private:
 
@@ -687,10 +696,10 @@ public:
 public:
 
   /// Constructor
-  UFC_MeltFluxBilinearForm_dof_map_1_0();
+  meltflux_0_dof_map_1_0();
 
   /// Destructor
-  virtual ~UFC_MeltFluxBilinearForm_dof_map_1_0();
+  virtual ~meltflux_0_dof_map_1_0();
 
   /// Return a string identifying the dof map
   virtual const char* signature() const;
@@ -711,8 +720,11 @@ public:
   /// Return the dimension of the global finite element function space
   virtual unsigned int global_dimension() const;
 
-  /// Return the dimension of the local finite element function space
-  virtual unsigned int local_dimension() const;
+  /// Return the dimension of the local finite element function space for a cell
+  virtual unsigned int local_dimension(const ufc::cell& c) const;
+
+  /// Return the maximum dimension of the local finite element function space
+  virtual unsigned int max_local_dimension() const;
 
   // Return the geometric dimension of the coordinates this dof map provides
   virtual unsigned int geometric_dimension() const;
@@ -751,7 +763,7 @@ public:
 /// This class defines the interface for a local-to-global mapping of
 /// degrees of freedom (dofs).
 
-class UFC_MeltFluxBilinearForm_dof_map_1_1: public ufc::dof_map
+class meltflux_0_dof_map_1_1: public ufc::dof_map
 {
 private:
 
@@ -760,10 +772,10 @@ public:
 public:
 
   /// Constructor
-  UFC_MeltFluxBilinearForm_dof_map_1_1();
+  meltflux_0_dof_map_1_1();
 
   /// Destructor
-  virtual ~UFC_MeltFluxBilinearForm_dof_map_1_1();
+  virtual ~meltflux_0_dof_map_1_1();
 
   /// Return a string identifying the dof map
   virtual const char* signature() const;
@@ -784,8 +796,11 @@ public:
   /// Return the dimension of the global finite element function space
   virtual unsigned int global_dimension() const;
 
-  /// Return the dimension of the local finite element function space
-  virtual unsigned int local_dimension() const;
+  /// Return the dimension of the local finite element function space for a cell
+  virtual unsigned int local_dimension(const ufc::cell& c) const;
+
+  /// Return the maximum dimension of the local finite element function space
+  virtual unsigned int max_local_dimension() const;
 
   // Return the geometric dimension of the coordinates this dof map provides
   virtual unsigned int geometric_dimension() const;
@@ -824,7 +839,7 @@ public:
 /// This class defines the interface for a local-to-global mapping of
 /// degrees of freedom (dofs).
 
-class UFC_MeltFluxBilinearForm_dof_map_1: public ufc::dof_map
+class meltflux_0_dof_map_1: public ufc::dof_map
 {
 private:
 
@@ -833,10 +848,10 @@ public:
 public:
 
   /// Constructor
-  UFC_MeltFluxBilinearForm_dof_map_1();
+  meltflux_0_dof_map_1();
 
   /// Destructor
-  virtual ~UFC_MeltFluxBilinearForm_dof_map_1();
+  virtual ~meltflux_0_dof_map_1();
 
   /// Return a string identifying the dof map
   virtual const char* signature() const;
@@ -857,8 +872,11 @@ public:
   /// Return the dimension of the global finite element function space
   virtual unsigned int global_dimension() const;
 
-  /// Return the dimension of the local finite element function space
-  virtual unsigned int local_dimension() const;
+  /// Return the dimension of the local finite element function space for a cell
+  virtual unsigned int local_dimension(const ufc::cell& c) const;
+
+  /// Return the maximum dimension of the local finite element function space
+  virtual unsigned int max_local_dimension() const;
 
   // Return the geometric dimension of the coordinates this dof map provides
   virtual unsigned int geometric_dimension() const;
@@ -898,15 +916,15 @@ public:
 /// tensor corresponding to the local contribution to a form from
 /// the integral over a cell.
 
-class UFC_MeltFluxBilinearForm_cell_integral_0_quadrature: public ufc::cell_integral
+class meltflux_0_cell_integral_0_quadrature: public ufc::cell_integral
 {
 public:
 
   /// Constructor
-  UFC_MeltFluxBilinearForm_cell_integral_0_quadrature();
+  meltflux_0_cell_integral_0_quadrature();
 
   /// Destructor
-  virtual ~UFC_MeltFluxBilinearForm_cell_integral_0_quadrature();
+  virtual ~meltflux_0_cell_integral_0_quadrature();
 
   /// Tabulate the tensor for the contribution from a local cell
   virtual void tabulate_tensor(double* A,
@@ -919,19 +937,19 @@ public:
 /// tensor corresponding to the local contribution to a form from
 /// the integral over a cell.
 
-class UFC_MeltFluxBilinearForm_cell_integral_0: public ufc::cell_integral
+class meltflux_0_cell_integral_0: public ufc::cell_integral
 {
 private:
 
-  UFC_MeltFluxBilinearForm_cell_integral_0_quadrature integral_0_quadrature;
+  meltflux_0_cell_integral_0_quadrature integral_0_quadrature;
 
 public:
 
   /// Constructor
-  UFC_MeltFluxBilinearForm_cell_integral_0();
+  meltflux_0_cell_integral_0();
 
   /// Destructor
-  virtual ~UFC_MeltFluxBilinearForm_cell_integral_0();
+  virtual ~meltflux_0_cell_integral_0();
 
   /// Tabulate the tensor for the contribution from a local cell
   virtual void tabulate_tensor(double* A,
@@ -955,15 +973,15 @@ public:
 /// sequence of basis functions of Vj and w1, w2, ..., wn are given
 /// fixed functions (coefficients).
 
-class UFC_MeltFluxBilinearForm: public ufc::form
+class meltflux_form_0: public ufc::form
 {
 public:
 
   /// Constructor
-  UFC_MeltFluxBilinearForm();
+  meltflux_form_0();
 
   /// Destructor
-  virtual ~UFC_MeltFluxBilinearForm();
+  virtual ~meltflux_form_0();
 
   /// Return a string identifying the form
   virtual const char* signature() const;
@@ -976,10 +994,10 @@ public:
 
   /// Return the number of cell integrals
   virtual unsigned int num_cell_integrals() const;
-  
+
   /// Return the number of exterior facet integrals
   virtual unsigned int num_exterior_facet_integrals() const;
-  
+
   /// Return the number of interior facet integrals
   virtual unsigned int num_interior_facet_integrals() const;
 
@@ -1002,15 +1020,15 @@ public:
 
 /// This class defines the interface for a finite element.
 
-class UFC_MeltFluxLinearForm_finite_element_0_0: public ufc::finite_element
+class meltflux_1_finite_element_0_0: public ufc::finite_element
 {
 public:
 
   /// Constructor
-  UFC_MeltFluxLinearForm_finite_element_0_0();
+  meltflux_1_finite_element_0_0();
 
   /// Destructor
-  virtual ~UFC_MeltFluxLinearForm_finite_element_0_0();
+  virtual ~meltflux_1_finite_element_0_0();
 
   /// Return a string identifying the finite element
   virtual const char* signature() const;
@@ -1044,7 +1062,7 @@ public:
                                           double* values,
                                           const double* coordinates,
                                           const ufc::cell& c) const;
-  
+
   /// Evaluate order n derivatives of all basis functions at given point in cell
   virtual void evaluate_basis_derivatives_all(unsigned int n,
                                               double* values,
@@ -1076,15 +1094,15 @@ public:
 
 /// This class defines the interface for a finite element.
 
-class UFC_MeltFluxLinearForm_finite_element_0_1: public ufc::finite_element
+class meltflux_1_finite_element_0_1: public ufc::finite_element
 {
 public:
 
   /// Constructor
-  UFC_MeltFluxLinearForm_finite_element_0_1();
+  meltflux_1_finite_element_0_1();
 
   /// Destructor
-  virtual ~UFC_MeltFluxLinearForm_finite_element_0_1();
+  virtual ~meltflux_1_finite_element_0_1();
 
   /// Return a string identifying the finite element
   virtual const char* signature() const;
@@ -1118,7 +1136,7 @@ public:
                                           double* values,
                                           const double* coordinates,
                                           const ufc::cell& c) const;
-  
+
   /// Evaluate order n derivatives of all basis functions at given point in cell
   virtual void evaluate_basis_derivatives_all(unsigned int n,
                                               double* values,
@@ -1150,15 +1168,15 @@ public:
 
 /// This class defines the interface for a finite element.
 
-class UFC_MeltFluxLinearForm_finite_element_0: public ufc::finite_element
+class meltflux_1_finite_element_0: public ufc::finite_element
 {
 public:
 
   /// Constructor
-  UFC_MeltFluxLinearForm_finite_element_0();
+  meltflux_1_finite_element_0();
 
   /// Destructor
-  virtual ~UFC_MeltFluxLinearForm_finite_element_0();
+  virtual ~meltflux_1_finite_element_0();
 
   /// Return a string identifying the finite element
   virtual const char* signature() const;
@@ -1192,7 +1210,7 @@ public:
                                           double* values,
                                           const double* coordinates,
                                           const ufc::cell& c) const;
-  
+
   /// Evaluate order n derivatives of all basis functions at given point in cell
   virtual void evaluate_basis_derivatives_all(unsigned int n,
                                               double* values,
@@ -1224,15 +1242,15 @@ public:
 
 /// This class defines the interface for a finite element.
 
-class UFC_MeltFluxLinearForm_finite_element_1: public ufc::finite_element
+class meltflux_1_finite_element_1: public ufc::finite_element
 {
 public:
 
   /// Constructor
-  UFC_MeltFluxLinearForm_finite_element_1();
+  meltflux_1_finite_element_1();
 
   /// Destructor
-  virtual ~UFC_MeltFluxLinearForm_finite_element_1();
+  virtual ~meltflux_1_finite_element_1();
 
   /// Return a string identifying the finite element
   virtual const char* signature() const;
@@ -1266,7 +1284,7 @@ public:
                                           double* values,
                                           const double* coordinates,
                                           const ufc::cell& c) const;
-  
+
   /// Evaluate order n derivatives of all basis functions at given point in cell
   virtual void evaluate_basis_derivatives_all(unsigned int n,
                                               double* values,
@@ -1298,15 +1316,15 @@ public:
 
 /// This class defines the interface for a finite element.
 
-class UFC_MeltFluxLinearForm_finite_element_2: public ufc::finite_element
+class meltflux_1_finite_element_2: public ufc::finite_element
 {
 public:
 
   /// Constructor
-  UFC_MeltFluxLinearForm_finite_element_2();
+  meltflux_1_finite_element_2();
 
   /// Destructor
-  virtual ~UFC_MeltFluxLinearForm_finite_element_2();
+  virtual ~meltflux_1_finite_element_2();
 
   /// Return a string identifying the finite element
   virtual const char* signature() const;
@@ -1340,7 +1358,7 @@ public:
                                           double* values,
                                           const double* coordinates,
                                           const ufc::cell& c) const;
-  
+
   /// Evaluate order n derivatives of all basis functions at given point in cell
   virtual void evaluate_basis_derivatives_all(unsigned int n,
                                               double* values,
@@ -1372,15 +1390,15 @@ public:
 
 /// This class defines the interface for a finite element.
 
-class UFC_MeltFluxLinearForm_finite_element_3: public ufc::finite_element
+class meltflux_1_finite_element_3: public ufc::finite_element
 {
 public:
 
   /// Constructor
-  UFC_MeltFluxLinearForm_finite_element_3();
+  meltflux_1_finite_element_3();
 
   /// Destructor
-  virtual ~UFC_MeltFluxLinearForm_finite_element_3();
+  virtual ~meltflux_1_finite_element_3();
 
   /// Return a string identifying the finite element
   virtual const char* signature() const;
@@ -1414,7 +1432,7 @@ public:
                                           double* values,
                                           const double* coordinates,
                                           const ufc::cell& c) const;
-  
+
   /// Evaluate order n derivatives of all basis functions at given point in cell
   virtual void evaluate_basis_derivatives_all(unsigned int n,
                                               double* values,
@@ -1446,15 +1464,15 @@ public:
 
 /// This class defines the interface for a finite element.
 
-class UFC_MeltFluxLinearForm_finite_element_4_0: public ufc::finite_element
+class meltflux_1_finite_element_4_0: public ufc::finite_element
 {
 public:
 
   /// Constructor
-  UFC_MeltFluxLinearForm_finite_element_4_0();
+  meltflux_1_finite_element_4_0();
 
   /// Destructor
-  virtual ~UFC_MeltFluxLinearForm_finite_element_4_0();
+  virtual ~meltflux_1_finite_element_4_0();
 
   /// Return a string identifying the finite element
   virtual const char* signature() const;
@@ -1488,7 +1506,7 @@ public:
                                           double* values,
                                           const double* coordinates,
                                           const ufc::cell& c) const;
-  
+
   /// Evaluate order n derivatives of all basis functions at given point in cell
   virtual void evaluate_basis_derivatives_all(unsigned int n,
                                               double* values,
@@ -1520,15 +1538,15 @@ public:
 
 /// This class defines the interface for a finite element.
 
-class UFC_MeltFluxLinearForm_finite_element_4_1: public ufc::finite_element
+class meltflux_1_finite_element_4_1: public ufc::finite_element
 {
 public:
 
   /// Constructor
-  UFC_MeltFluxLinearForm_finite_element_4_1();
+  meltflux_1_finite_element_4_1();
 
   /// Destructor
-  virtual ~UFC_MeltFluxLinearForm_finite_element_4_1();
+  virtual ~meltflux_1_finite_element_4_1();
 
   /// Return a string identifying the finite element
   virtual const char* signature() const;
@@ -1562,7 +1580,7 @@ public:
                                           double* values,
                                           const double* coordinates,
                                           const ufc::cell& c) const;
-  
+
   /// Evaluate order n derivatives of all basis functions at given point in cell
   virtual void evaluate_basis_derivatives_all(unsigned int n,
                                               double* values,
@@ -1594,15 +1612,15 @@ public:
 
 /// This class defines the interface for a finite element.
 
-class UFC_MeltFluxLinearForm_finite_element_4: public ufc::finite_element
+class meltflux_1_finite_element_4: public ufc::finite_element
 {
 public:
 
   /// Constructor
-  UFC_MeltFluxLinearForm_finite_element_4();
+  meltflux_1_finite_element_4();
 
   /// Destructor
-  virtual ~UFC_MeltFluxLinearForm_finite_element_4();
+  virtual ~meltflux_1_finite_element_4();
 
   /// Return a string identifying the finite element
   virtual const char* signature() const;
@@ -1636,7 +1654,7 @@ public:
                                           double* values,
                                           const double* coordinates,
                                           const ufc::cell& c) const;
-  
+
   /// Evaluate order n derivatives of all basis functions at given point in cell
   virtual void evaluate_basis_derivatives_all(unsigned int n,
                                               double* values,
@@ -1668,15 +1686,15 @@ public:
 
 /// This class defines the interface for a finite element.
 
-class UFC_MeltFluxLinearForm_finite_element_5: public ufc::finite_element
+class meltflux_1_finite_element_5: public ufc::finite_element
 {
 public:
 
   /// Constructor
-  UFC_MeltFluxLinearForm_finite_element_5();
+  meltflux_1_finite_element_5();
 
   /// Destructor
-  virtual ~UFC_MeltFluxLinearForm_finite_element_5();
+  virtual ~meltflux_1_finite_element_5();
 
   /// Return a string identifying the finite element
   virtual const char* signature() const;
@@ -1710,7 +1728,7 @@ public:
                                           double* values,
                                           const double* coordinates,
                                           const ufc::cell& c) const;
-  
+
   /// Evaluate order n derivatives of all basis functions at given point in cell
   virtual void evaluate_basis_derivatives_all(unsigned int n,
                                               double* values,
@@ -1743,7 +1761,7 @@ public:
 /// This class defines the interface for a local-to-global mapping of
 /// degrees of freedom (dofs).
 
-class UFC_MeltFluxLinearForm_dof_map_0_0: public ufc::dof_map
+class meltflux_1_dof_map_0_0: public ufc::dof_map
 {
 private:
 
@@ -1752,10 +1770,10 @@ public:
 public:
 
   /// Constructor
-  UFC_MeltFluxLinearForm_dof_map_0_0();
+  meltflux_1_dof_map_0_0();
 
   /// Destructor
-  virtual ~UFC_MeltFluxLinearForm_dof_map_0_0();
+  virtual ~meltflux_1_dof_map_0_0();
 
   /// Return a string identifying the dof map
   virtual const char* signature() const;
@@ -1776,8 +1794,11 @@ public:
   /// Return the dimension of the global finite element function space
   virtual unsigned int global_dimension() const;
 
-  /// Return the dimension of the local finite element function space
-  virtual unsigned int local_dimension() const;
+  /// Return the dimension of the local finite element function space for a cell
+  virtual unsigned int local_dimension(const ufc::cell& c) const;
+
+  /// Return the maximum dimension of the local finite element function space
+  virtual unsigned int max_local_dimension() const;
 
   // Return the geometric dimension of the coordinates this dof map provides
   virtual unsigned int geometric_dimension() const;
@@ -1816,7 +1837,7 @@ public:
 /// This class defines the interface for a local-to-global mapping of
 /// degrees of freedom (dofs).
 
-class UFC_MeltFluxLinearForm_dof_map_0_1: public ufc::dof_map
+class meltflux_1_dof_map_0_1: public ufc::dof_map
 {
 private:
 
@@ -1825,10 +1846,10 @@ public:
 public:
 
   /// Constructor
-  UFC_MeltFluxLinearForm_dof_map_0_1();
+  meltflux_1_dof_map_0_1();
 
   /// Destructor
-  virtual ~UFC_MeltFluxLinearForm_dof_map_0_1();
+  virtual ~meltflux_1_dof_map_0_1();
 
   /// Return a string identifying the dof map
   virtual const char* signature() const;
@@ -1849,8 +1870,11 @@ public:
   /// Return the dimension of the global finite element function space
   virtual unsigned int global_dimension() const;
 
-  /// Return the dimension of the local finite element function space
-  virtual unsigned int local_dimension() const;
+  /// Return the dimension of the local finite element function space for a cell
+  virtual unsigned int local_dimension(const ufc::cell& c) const;
+
+  /// Return the maximum dimension of the local finite element function space
+  virtual unsigned int max_local_dimension() const;
 
   // Return the geometric dimension of the coordinates this dof map provides
   virtual unsigned int geometric_dimension() const;
@@ -1889,7 +1913,7 @@ public:
 /// This class defines the interface for a local-to-global mapping of
 /// degrees of freedom (dofs).
 
-class UFC_MeltFluxLinearForm_dof_map_0: public ufc::dof_map
+class meltflux_1_dof_map_0: public ufc::dof_map
 {
 private:
 
@@ -1898,10 +1922,10 @@ public:
 public:
 
   /// Constructor
-  UFC_MeltFluxLinearForm_dof_map_0();
+  meltflux_1_dof_map_0();
 
   /// Destructor
-  virtual ~UFC_MeltFluxLinearForm_dof_map_0();
+  virtual ~meltflux_1_dof_map_0();
 
   /// Return a string identifying the dof map
   virtual const char* signature() const;
@@ -1922,8 +1946,11 @@ public:
   /// Return the dimension of the global finite element function space
   virtual unsigned int global_dimension() const;
 
-  /// Return the dimension of the local finite element function space
-  virtual unsigned int local_dimension() const;
+  /// Return the dimension of the local finite element function space for a cell
+  virtual unsigned int local_dimension(const ufc::cell& c) const;
+
+  /// Return the maximum dimension of the local finite element function space
+  virtual unsigned int max_local_dimension() const;
 
   // Return the geometric dimension of the coordinates this dof map provides
   virtual unsigned int geometric_dimension() const;
@@ -1962,7 +1989,7 @@ public:
 /// This class defines the interface for a local-to-global mapping of
 /// degrees of freedom (dofs).
 
-class UFC_MeltFluxLinearForm_dof_map_1: public ufc::dof_map
+class meltflux_1_dof_map_1: public ufc::dof_map
 {
 private:
 
@@ -1971,10 +1998,10 @@ public:
 public:
 
   /// Constructor
-  UFC_MeltFluxLinearForm_dof_map_1();
+  meltflux_1_dof_map_1();
 
   /// Destructor
-  virtual ~UFC_MeltFluxLinearForm_dof_map_1();
+  virtual ~meltflux_1_dof_map_1();
 
   /// Return a string identifying the dof map
   virtual const char* signature() const;
@@ -1995,8 +2022,11 @@ public:
   /// Return the dimension of the global finite element function space
   virtual unsigned int global_dimension() const;
 
-  /// Return the dimension of the local finite element function space
-  virtual unsigned int local_dimension() const;
+  /// Return the dimension of the local finite element function space for a cell
+  virtual unsigned int local_dimension(const ufc::cell& c) const;
+
+  /// Return the maximum dimension of the local finite element function space
+  virtual unsigned int max_local_dimension() const;
 
   // Return the geometric dimension of the coordinates this dof map provides
   virtual unsigned int geometric_dimension() const;
@@ -2035,7 +2065,7 @@ public:
 /// This class defines the interface for a local-to-global mapping of
 /// degrees of freedom (dofs).
 
-class UFC_MeltFluxLinearForm_dof_map_2: public ufc::dof_map
+class meltflux_1_dof_map_2: public ufc::dof_map
 {
 private:
 
@@ -2044,10 +2074,10 @@ public:
 public:
 
   /// Constructor
-  UFC_MeltFluxLinearForm_dof_map_2();
+  meltflux_1_dof_map_2();
 
   /// Destructor
-  virtual ~UFC_MeltFluxLinearForm_dof_map_2();
+  virtual ~meltflux_1_dof_map_2();
 
   /// Return a string identifying the dof map
   virtual const char* signature() const;
@@ -2068,8 +2098,11 @@ public:
   /// Return the dimension of the global finite element function space
   virtual unsigned int global_dimension() const;
 
-  /// Return the dimension of the local finite element function space
-  virtual unsigned int local_dimension() const;
+  /// Return the dimension of the local finite element function space for a cell
+  virtual unsigned int local_dimension(const ufc::cell& c) const;
+
+  /// Return the maximum dimension of the local finite element function space
+  virtual unsigned int max_local_dimension() const;
 
   // Return the geometric dimension of the coordinates this dof map provides
   virtual unsigned int geometric_dimension() const;
@@ -2108,7 +2141,7 @@ public:
 /// This class defines the interface for a local-to-global mapping of
 /// degrees of freedom (dofs).
 
-class UFC_MeltFluxLinearForm_dof_map_3: public ufc::dof_map
+class meltflux_1_dof_map_3: public ufc::dof_map
 {
 private:
 
@@ -2117,10 +2150,10 @@ public:
 public:
 
   /// Constructor
-  UFC_MeltFluxLinearForm_dof_map_3();
+  meltflux_1_dof_map_3();
 
   /// Destructor
-  virtual ~UFC_MeltFluxLinearForm_dof_map_3();
+  virtual ~meltflux_1_dof_map_3();
 
   /// Return a string identifying the dof map
   virtual const char* signature() const;
@@ -2141,8 +2174,11 @@ public:
   /// Return the dimension of the global finite element function space
   virtual unsigned int global_dimension() const;
 
-  /// Return the dimension of the local finite element function space
-  virtual unsigned int local_dimension() const;
+  /// Return the dimension of the local finite element function space for a cell
+  virtual unsigned int local_dimension(const ufc::cell& c) const;
+
+  /// Return the maximum dimension of the local finite element function space
+  virtual unsigned int max_local_dimension() const;
 
   // Return the geometric dimension of the coordinates this dof map provides
   virtual unsigned int geometric_dimension() const;
@@ -2181,7 +2217,7 @@ public:
 /// This class defines the interface for a local-to-global mapping of
 /// degrees of freedom (dofs).
 
-class UFC_MeltFluxLinearForm_dof_map_4_0: public ufc::dof_map
+class meltflux_1_dof_map_4_0: public ufc::dof_map
 {
 private:
 
@@ -2190,10 +2226,10 @@ public:
 public:
 
   /// Constructor
-  UFC_MeltFluxLinearForm_dof_map_4_0();
+  meltflux_1_dof_map_4_0();
 
   /// Destructor
-  virtual ~UFC_MeltFluxLinearForm_dof_map_4_0();
+  virtual ~meltflux_1_dof_map_4_0();
 
   /// Return a string identifying the dof map
   virtual const char* signature() const;
@@ -2214,8 +2250,11 @@ public:
   /// Return the dimension of the global finite element function space
   virtual unsigned int global_dimension() const;
 
-  /// Return the dimension of the local finite element function space
-  virtual unsigned int local_dimension() const;
+  /// Return the dimension of the local finite element function space for a cell
+  virtual unsigned int local_dimension(const ufc::cell& c) const;
+
+  /// Return the maximum dimension of the local finite element function space
+  virtual unsigned int max_local_dimension() const;
 
   // Return the geometric dimension of the coordinates this dof map provides
   virtual unsigned int geometric_dimension() const;
@@ -2254,7 +2293,7 @@ public:
 /// This class defines the interface for a local-to-global mapping of
 /// degrees of freedom (dofs).
 
-class UFC_MeltFluxLinearForm_dof_map_4_1: public ufc::dof_map
+class meltflux_1_dof_map_4_1: public ufc::dof_map
 {
 private:
 
@@ -2263,10 +2302,10 @@ public:
 public:
 
   /// Constructor
-  UFC_MeltFluxLinearForm_dof_map_4_1();
+  meltflux_1_dof_map_4_1();
 
   /// Destructor
-  virtual ~UFC_MeltFluxLinearForm_dof_map_4_1();
+  virtual ~meltflux_1_dof_map_4_1();
 
   /// Return a string identifying the dof map
   virtual const char* signature() const;
@@ -2287,8 +2326,11 @@ public:
   /// Return the dimension of the global finite element function space
   virtual unsigned int global_dimension() const;
 
-  /// Return the dimension of the local finite element function space
-  virtual unsigned int local_dimension() const;
+  /// Return the dimension of the local finite element function space for a cell
+  virtual unsigned int local_dimension(const ufc::cell& c) const;
+
+  /// Return the maximum dimension of the local finite element function space
+  virtual unsigned int max_local_dimension() const;
 
   // Return the geometric dimension of the coordinates this dof map provides
   virtual unsigned int geometric_dimension() const;
@@ -2327,7 +2369,7 @@ public:
 /// This class defines the interface for a local-to-global mapping of
 /// degrees of freedom (dofs).
 
-class UFC_MeltFluxLinearForm_dof_map_4: public ufc::dof_map
+class meltflux_1_dof_map_4: public ufc::dof_map
 {
 private:
 
@@ -2336,10 +2378,10 @@ public:
 public:
 
   /// Constructor
-  UFC_MeltFluxLinearForm_dof_map_4();
+  meltflux_1_dof_map_4();
 
   /// Destructor
-  virtual ~UFC_MeltFluxLinearForm_dof_map_4();
+  virtual ~meltflux_1_dof_map_4();
 
   /// Return a string identifying the dof map
   virtual const char* signature() const;
@@ -2360,8 +2402,11 @@ public:
   /// Return the dimension of the global finite element function space
   virtual unsigned int global_dimension() const;
 
-  /// Return the dimension of the local finite element function space
-  virtual unsigned int local_dimension() const;
+  /// Return the dimension of the local finite element function space for a cell
+  virtual unsigned int local_dimension(const ufc::cell& c) const;
+
+  /// Return the maximum dimension of the local finite element function space
+  virtual unsigned int max_local_dimension() const;
 
   // Return the geometric dimension of the coordinates this dof map provides
   virtual unsigned int geometric_dimension() const;
@@ -2400,7 +2445,7 @@ public:
 /// This class defines the interface for a local-to-global mapping of
 /// degrees of freedom (dofs).
 
-class UFC_MeltFluxLinearForm_dof_map_5: public ufc::dof_map
+class meltflux_1_dof_map_5: public ufc::dof_map
 {
 private:
 
@@ -2409,10 +2454,10 @@ public:
 public:
 
   /// Constructor
-  UFC_MeltFluxLinearForm_dof_map_5();
+  meltflux_1_dof_map_5();
 
   /// Destructor
-  virtual ~UFC_MeltFluxLinearForm_dof_map_5();
+  virtual ~meltflux_1_dof_map_5();
 
   /// Return a string identifying the dof map
   virtual const char* signature() const;
@@ -2433,8 +2478,11 @@ public:
   /// Return the dimension of the global finite element function space
   virtual unsigned int global_dimension() const;
 
-  /// Return the dimension of the local finite element function space
-  virtual unsigned int local_dimension() const;
+  /// Return the dimension of the local finite element function space for a cell
+  virtual unsigned int local_dimension(const ufc::cell& c) const;
+
+  /// Return the maximum dimension of the local finite element function space
+  virtual unsigned int max_local_dimension() const;
 
   // Return the geometric dimension of the coordinates this dof map provides
   virtual unsigned int geometric_dimension() const;
@@ -2474,15 +2522,15 @@ public:
 /// tensor corresponding to the local contribution to a form from
 /// the integral over a cell.
 
-class UFC_MeltFluxLinearForm_cell_integral_0_quadrature: public ufc::cell_integral
+class meltflux_1_cell_integral_0_quadrature: public ufc::cell_integral
 {
 public:
 
   /// Constructor
-  UFC_MeltFluxLinearForm_cell_integral_0_quadrature();
+  meltflux_1_cell_integral_0_quadrature();
 
   /// Destructor
-  virtual ~UFC_MeltFluxLinearForm_cell_integral_0_quadrature();
+  virtual ~meltflux_1_cell_integral_0_quadrature();
 
   /// Tabulate the tensor for the contribution from a local cell
   virtual void tabulate_tensor(double* A,
@@ -2495,19 +2543,19 @@ public:
 /// tensor corresponding to the local contribution to a form from
 /// the integral over a cell.
 
-class UFC_MeltFluxLinearForm_cell_integral_0: public ufc::cell_integral
+class meltflux_1_cell_integral_0: public ufc::cell_integral
 {
 private:
 
-  UFC_MeltFluxLinearForm_cell_integral_0_quadrature integral_0_quadrature;
+  meltflux_1_cell_integral_0_quadrature integral_0_quadrature;
 
 public:
 
   /// Constructor
-  UFC_MeltFluxLinearForm_cell_integral_0();
+  meltflux_1_cell_integral_0();
 
   /// Destructor
-  virtual ~UFC_MeltFluxLinearForm_cell_integral_0();
+  virtual ~meltflux_1_cell_integral_0();
 
   /// Tabulate the tensor for the contribution from a local cell
   virtual void tabulate_tensor(double* A,
@@ -2531,15 +2579,15 @@ public:
 /// sequence of basis functions of Vj and w1, w2, ..., wn are given
 /// fixed functions (coefficients).
 
-class UFC_MeltFluxLinearForm: public ufc::form
+class meltflux_form_1: public ufc::form
 {
 public:
 
   /// Constructor
-  UFC_MeltFluxLinearForm();
+  meltflux_form_1();
 
   /// Destructor
-  virtual ~UFC_MeltFluxLinearForm();
+  virtual ~meltflux_form_1();
 
   /// Return a string identifying the form
   virtual const char* signature() const;
@@ -2552,10 +2600,10 @@ public:
 
   /// Return the number of cell integrals
   virtual unsigned int num_cell_integrals() const;
-  
+
   /// Return the number of exterior facet integrals
   virtual unsigned int num_exterior_facet_integrals() const;
-  
+
   /// Return the number of interior facet integrals
   virtual unsigned int num_interior_facet_integrals() const;
 
@@ -2578,460 +2626,572 @@ public:
 
 // DOLFIN wrappers
 
-#include <dolfin/fem/Form.h>
+// Standard library includes
+#include <string>
+
+// DOLFIN includes
+#include <dolfin/common/NoDeleter.h>
 #include <dolfin/fem/FiniteElement.h>
 #include <dolfin/fem/DofMap.h>
-#include <dolfin/function/Coefficient.h>
-#include <dolfin/function/Function.h>
+#include <dolfin/fem/Form.h>
 #include <dolfin/function/FunctionSpace.h>
+#include <dolfin/function/GenericFunction.h>
+#include <dolfin/function/CoefficientAssigner.h>
 
-class MeltFluxBilinearFormFunctionSpace0 : public dolfin::FunctionSpace
+namespace MeltFlux
+{
+
+class CoefficientSpace_V: public dolfin::FunctionSpace
 {
 public:
 
-  MeltFluxBilinearFormFunctionSpace0(const dolfin::Mesh& mesh)
-    : dolfin::FunctionSpace(boost::shared_ptr<const dolfin::Mesh>(&mesh, dolfin::NoDeleter<const dolfin::Mesh>()),
-                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new UFC_MeltFluxLinearForm_finite_element_0()))),
-                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new UFC_MeltFluxLinearForm_dof_map_0()), mesh)))
+  CoefficientSpace_V(const dolfin::Mesh& mesh):
+      dolfin::FunctionSpace(dolfin::reference_to_no_delete_pointer(mesh),
+                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new meltflux_1_finite_element_4()))),
+                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new meltflux_1_dof_map_4()), mesh)))
   {
     // Do nothing
   }
 
-};
-
-class MeltFluxBilinearFormFunctionSpace1 : public dolfin::FunctionSpace
-{
-public:
-
-  MeltFluxBilinearFormFunctionSpace1(const dolfin::Mesh& mesh)
-    : dolfin::FunctionSpace(boost::shared_ptr<const dolfin::Mesh>(&mesh, dolfin::NoDeleter<const dolfin::Mesh>()),
-                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new UFC_MeltFluxLinearForm_finite_element_0()))),
-                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new UFC_MeltFluxLinearForm_dof_map_0()), mesh)))
+  CoefficientSpace_V(dolfin::Mesh& mesh):
+    dolfin::FunctionSpace(dolfin::reference_to_no_delete_pointer(mesh),
+                          boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new meltflux_1_finite_element_4()))),
+                          boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new meltflux_1_dof_map_4()), mesh)))
   {
     // Do nothing
   }
 
+  CoefficientSpace_V(boost::shared_ptr<dolfin::Mesh> mesh):
+      dolfin::FunctionSpace(mesh,
+                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new meltflux_1_finite_element_4()))),
+                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new meltflux_1_dof_map_4()), *mesh)))
+  {
+      // Do nothing
+  }
+
+  CoefficientSpace_V(boost::shared_ptr<const dolfin::Mesh> mesh):
+      dolfin::FunctionSpace(mesh,
+                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new meltflux_1_finite_element_4()))),
+                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new meltflux_1_dof_map_4()), *mesh)))
+  {
+      // Do nothing
+  }
+
+
+  ~CoefficientSpace_V()
+  {
+  }
+
 };
 
-class MeltFluxLinearFormFunctionSpace0 : public dolfin::FunctionSpace
+class CoefficientSpace_eps: public dolfin::FunctionSpace
 {
 public:
 
-  MeltFluxLinearFormFunctionSpace0(const dolfin::Mesh& mesh)
-    : dolfin::FunctionSpace(boost::shared_ptr<const dolfin::Mesh>(&mesh, dolfin::NoDeleter<const dolfin::Mesh>()),
-                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new UFC_MeltFluxLinearForm_finite_element_0()))),
-                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new UFC_MeltFluxLinearForm_dof_map_0()), mesh)))
+  CoefficientSpace_eps(const dolfin::Mesh& mesh):
+      dolfin::FunctionSpace(dolfin::reference_to_no_delete_pointer(mesh),
+                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new meltflux_1_finite_element_5()))),
+                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new meltflux_1_dof_map_5()), mesh)))
   {
     // Do nothing
   }
 
-};
-
-class MeltFluxLinearFormCoefficientSpace0 : public dolfin::FunctionSpace
-{
-public:
-
-  MeltFluxLinearFormCoefficientSpace0(const dolfin::Mesh& mesh)
-    : dolfin::FunctionSpace(boost::shared_ptr<const dolfin::Mesh>(&mesh, dolfin::NoDeleter<const dolfin::Mesh>()),
-                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new UFC_MeltFluxLinearForm_finite_element_2()))),
-                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new UFC_MeltFluxLinearForm_dof_map_2()), mesh)))
+  CoefficientSpace_eps(dolfin::Mesh& mesh):
+    dolfin::FunctionSpace(dolfin::reference_to_no_delete_pointer(mesh),
+                          boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new meltflux_1_finite_element_5()))),
+                          boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new meltflux_1_dof_map_5()), mesh)))
   {
     // Do nothing
   }
 
+  CoefficientSpace_eps(boost::shared_ptr<dolfin::Mesh> mesh):
+      dolfin::FunctionSpace(mesh,
+                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new meltflux_1_finite_element_5()))),
+                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new meltflux_1_dof_map_5()), *mesh)))
+  {
+      // Do nothing
+  }
+
+  CoefficientSpace_eps(boost::shared_ptr<const dolfin::Mesh> mesh):
+      dolfin::FunctionSpace(mesh,
+                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new meltflux_1_finite_element_5()))),
+                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new meltflux_1_dof_map_5()), *mesh)))
+  {
+      // Do nothing
+  }
+
+
+  ~CoefficientSpace_eps()
+  {
+  }
+
 };
 
-class MeltFluxLinearFormCoefficientSpace1 : public dolfin::FunctionSpace
+class CoefficientSpace_f: public dolfin::FunctionSpace
 {
 public:
 
-  MeltFluxLinearFormCoefficientSpace1(const dolfin::Mesh& mesh)
-    : dolfin::FunctionSpace(boost::shared_ptr<const dolfin::Mesh>(&mesh, dolfin::NoDeleter<const dolfin::Mesh>()),
-                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new UFC_MeltFluxLinearForm_finite_element_2()))),
-                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new UFC_MeltFluxLinearForm_dof_map_2()), mesh)))
+  CoefficientSpace_f(const dolfin::Mesh& mesh):
+      dolfin::FunctionSpace(dolfin::reference_to_no_delete_pointer(mesh),
+                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new meltflux_1_finite_element_1()))),
+                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new meltflux_1_dof_map_1()), mesh)))
   {
     // Do nothing
   }
 
-};
-
-class MeltFluxLinearFormCoefficientSpace2 : public dolfin::FunctionSpace
-{
-public:
-
-  MeltFluxLinearFormCoefficientSpace2(const dolfin::Mesh& mesh)
-    : dolfin::FunctionSpace(boost::shared_ptr<const dolfin::Mesh>(&mesh, dolfin::NoDeleter<const dolfin::Mesh>()),
-                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new UFC_MeltFluxLinearForm_finite_element_3()))),
-                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new UFC_MeltFluxLinearForm_dof_map_3()), mesh)))
+  CoefficientSpace_f(dolfin::Mesh& mesh):
+    dolfin::FunctionSpace(dolfin::reference_to_no_delete_pointer(mesh),
+                          boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new meltflux_1_finite_element_1()))),
+                          boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new meltflux_1_dof_map_1()), mesh)))
   {
     // Do nothing
   }
 
+  CoefficientSpace_f(boost::shared_ptr<dolfin::Mesh> mesh):
+      dolfin::FunctionSpace(mesh,
+                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new meltflux_1_finite_element_1()))),
+                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new meltflux_1_dof_map_1()), *mesh)))
+  {
+      // Do nothing
+  }
+
+  CoefficientSpace_f(boost::shared_ptr<const dolfin::Mesh> mesh):
+      dolfin::FunctionSpace(mesh,
+                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new meltflux_1_finite_element_1()))),
+                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new meltflux_1_dof_map_1()), *mesh)))
+  {
+      // Do nothing
+  }
+
+
+  ~CoefficientSpace_f()
+  {
+  }
+
 };
 
-class MeltFluxLinearFormCoefficientSpace3 : public dolfin::FunctionSpace
+class CoefficientSpace_p: public dolfin::FunctionSpace
 {
 public:
 
-  MeltFluxLinearFormCoefficientSpace3(const dolfin::Mesh& mesh)
-    : dolfin::FunctionSpace(boost::shared_ptr<const dolfin::Mesh>(&mesh, dolfin::NoDeleter<const dolfin::Mesh>()),
-                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new UFC_MeltFluxLinearForm_finite_element_4()))),
-                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new UFC_MeltFluxLinearForm_dof_map_4()), mesh)))
+  CoefficientSpace_p(const dolfin::Mesh& mesh):
+      dolfin::FunctionSpace(dolfin::reference_to_no_delete_pointer(mesh),
+                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new meltflux_1_finite_element_2()))),
+                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new meltflux_1_dof_map_2()), mesh)))
   {
     // Do nothing
   }
 
-};
-
-class MeltFluxLinearFormCoefficientSpace4 : public dolfin::FunctionSpace
-{
-public:
-
-  MeltFluxLinearFormCoefficientSpace4(const dolfin::Mesh& mesh)
-    : dolfin::FunctionSpace(boost::shared_ptr<const dolfin::Mesh>(&mesh, dolfin::NoDeleter<const dolfin::Mesh>()),
-                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new UFC_MeltFluxLinearForm_finite_element_5()))),
-                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new UFC_MeltFluxLinearForm_dof_map_5()), mesh)))
+  CoefficientSpace_p(dolfin::Mesh& mesh):
+    dolfin::FunctionSpace(dolfin::reference_to_no_delete_pointer(mesh),
+                          boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new meltflux_1_finite_element_2()))),
+                          boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new meltflux_1_dof_map_2()), mesh)))
   {
     // Do nothing
   }
 
+  CoefficientSpace_p(boost::shared_ptr<dolfin::Mesh> mesh):
+      dolfin::FunctionSpace(mesh,
+                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new meltflux_1_finite_element_2()))),
+                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new meltflux_1_dof_map_2()), *mesh)))
+  {
+      // Do nothing
+  }
+
+  CoefficientSpace_p(boost::shared_ptr<const dolfin::Mesh> mesh):
+      dolfin::FunctionSpace(mesh,
+                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new meltflux_1_finite_element_2()))),
+                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new meltflux_1_dof_map_2()), *mesh)))
+  {
+      // Do nothing
+  }
+
+
+  ~CoefficientSpace_p()
+  {
+  }
+
 };
 
-class MeltFluxTestSpace : public dolfin::FunctionSpace
+class CoefficientSpace_pstar: public dolfin::FunctionSpace
 {
 public:
 
-  MeltFluxTestSpace(const dolfin::Mesh& mesh)
-    : dolfin::FunctionSpace(boost::shared_ptr<const dolfin::Mesh>(&mesh, dolfin::NoDeleter<const dolfin::Mesh>()),
-                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new UFC_MeltFluxLinearForm_finite_element_0()))),
-                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new UFC_MeltFluxLinearForm_dof_map_0()), mesh)))
+  CoefficientSpace_pstar(const dolfin::Mesh& mesh):
+      dolfin::FunctionSpace(dolfin::reference_to_no_delete_pointer(mesh),
+                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new meltflux_1_finite_element_3()))),
+                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new meltflux_1_dof_map_3()), mesh)))
   {
     // Do nothing
   }
 
-};
-
-class MeltFluxTrialSpace : public dolfin::FunctionSpace
-{
-public:
-
-  MeltFluxTrialSpace(const dolfin::Mesh& mesh)
-    : dolfin::FunctionSpace(boost::shared_ptr<const dolfin::Mesh>(&mesh, dolfin::NoDeleter<const dolfin::Mesh>()),
-                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new UFC_MeltFluxLinearForm_finite_element_0()))),
-                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new UFC_MeltFluxLinearForm_dof_map_0()), mesh)))
+  CoefficientSpace_pstar(dolfin::Mesh& mesh):
+    dolfin::FunctionSpace(dolfin::reference_to_no_delete_pointer(mesh),
+                          boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new meltflux_1_finite_element_3()))),
+                          boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new meltflux_1_dof_map_3()), mesh)))
   {
     // Do nothing
   }
 
+  CoefficientSpace_pstar(boost::shared_ptr<dolfin::Mesh> mesh):
+      dolfin::FunctionSpace(mesh,
+                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new meltflux_1_finite_element_3()))),
+                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new meltflux_1_dof_map_3()), *mesh)))
+  {
+      // Do nothing
+  }
+
+  CoefficientSpace_pstar(boost::shared_ptr<const dolfin::Mesh> mesh):
+      dolfin::FunctionSpace(mesh,
+                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new meltflux_1_finite_element_3()))),
+                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new meltflux_1_dof_map_3()), *mesh)))
+  {
+      // Do nothing
+  }
+
+
+  ~CoefficientSpace_pstar()
+  {
+  }
+
 };
 
-class MeltFluxFunctionSpace : public dolfin::FunctionSpace
+class Form_0_FunctionSpace_0: public dolfin::FunctionSpace
 {
 public:
 
-  MeltFluxFunctionSpace(const dolfin::Mesh& mesh)
-    : dolfin::FunctionSpace(boost::shared_ptr<const dolfin::Mesh>(&mesh, dolfin::NoDeleter<const dolfin::Mesh>()),
-                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new UFC_MeltFluxLinearForm_finite_element_0()))),
-                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new UFC_MeltFluxLinearForm_dof_map_0()), mesh)))
+  Form_0_FunctionSpace_0(const dolfin::Mesh& mesh):
+      dolfin::FunctionSpace(dolfin::reference_to_no_delete_pointer(mesh),
+                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new meltflux_0_finite_element_0()))),
+                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new meltflux_0_dof_map_0()), mesh)))
   {
     // Do nothing
   }
 
+  Form_0_FunctionSpace_0(dolfin::Mesh& mesh):
+    dolfin::FunctionSpace(dolfin::reference_to_no_delete_pointer(mesh),
+                          boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new meltflux_0_finite_element_0()))),
+                          boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new meltflux_0_dof_map_0()), mesh)))
+  {
+    // Do nothing
+  }
+
+  Form_0_FunctionSpace_0(boost::shared_ptr<dolfin::Mesh> mesh):
+      dolfin::FunctionSpace(mesh,
+                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new meltflux_0_finite_element_0()))),
+                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new meltflux_0_dof_map_0()), *mesh)))
+  {
+      // Do nothing
+  }
+
+  Form_0_FunctionSpace_0(boost::shared_ptr<const dolfin::Mesh> mesh):
+      dolfin::FunctionSpace(mesh,
+                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new meltflux_0_finite_element_0()))),
+                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new meltflux_0_dof_map_0()), *mesh)))
+  {
+      // Do nothing
+  }
+
+
+  ~Form_0_FunctionSpace_0()
+  {
+  }
+
 };
 
-class MeltFluxBilinearForm : public dolfin::Form
+class Form_0_FunctionSpace_1: public dolfin::FunctionSpace
 {
 public:
 
-  // Create form on given function space(s)
-  MeltFluxBilinearForm(const dolfin::FunctionSpace& V0, const dolfin::FunctionSpace& V1) : dolfin::Form()
+  Form_0_FunctionSpace_1(const dolfin::Mesh& mesh):
+      dolfin::FunctionSpace(dolfin::reference_to_no_delete_pointer(mesh),
+                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new meltflux_0_finite_element_1()))),
+                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new meltflux_0_dof_map_1()), mesh)))
   {
-    boost::shared_ptr<const dolfin::FunctionSpace> _V0(&V0, dolfin::NoDeleter<const dolfin::FunctionSpace>());
-    _function_spaces.push_back(_V0);
-    boost::shared_ptr<const dolfin::FunctionSpace> _V1(&V1, dolfin::NoDeleter<const dolfin::FunctionSpace>());
-    _function_spaces.push_back(_V1);
-
-    _ufc_form = boost::shared_ptr<const ufc::form>(new UFC_MeltFluxBilinearForm());
+    // Do nothing
   }
 
-  // Create form on given function space(s) (shared data)
-  MeltFluxBilinearForm(boost::shared_ptr<const dolfin::FunctionSpace> V0, boost::shared_ptr<const dolfin::FunctionSpace> V1) : dolfin::Form()
+  Form_0_FunctionSpace_1(dolfin::Mesh& mesh):
+    dolfin::FunctionSpace(dolfin::reference_to_no_delete_pointer(mesh),
+                          boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new meltflux_0_finite_element_1()))),
+                          boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new meltflux_0_dof_map_1()), mesh)))
   {
-    _function_spaces.push_back(V0);
-    _function_spaces.push_back(V1);
-
-    _ufc_form = boost::shared_ptr<const ufc::form>(new UFC_MeltFluxBilinearForm());
+    // Do nothing
   }
 
-  // Destructor
-  ~MeltFluxBilinearForm() {}
+  Form_0_FunctionSpace_1(boost::shared_ptr<dolfin::Mesh> mesh):
+      dolfin::FunctionSpace(mesh,
+                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new meltflux_0_finite_element_1()))),
+                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new meltflux_0_dof_map_1()), *mesh)))
+  {
+      // Do nothing
+  }
+
+  Form_0_FunctionSpace_1(boost::shared_ptr<const dolfin::Mesh> mesh):
+      dolfin::FunctionSpace(mesh,
+                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new meltflux_0_finite_element_1()))),
+                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new meltflux_0_dof_map_1()), *mesh)))
+  {
+      // Do nothing
+  }
+
+
+  ~Form_0_FunctionSpace_1()
+  {
+  }
 
 };
 
-class MeltFluxLinearFormCoefficient0 : public dolfin::Coefficient
+class Form_0: public dolfin::Form
 {
 public:
 
   // Constructor
-  MeltFluxLinearFormCoefficient0(dolfin::Form& form) : dolfin::Coefficient(form) {}
+  Form_0(const dolfin::FunctionSpace& V0, const dolfin::FunctionSpace& V1):
+    dolfin::Form(2, 0)
+  {
+    _function_spaces[0] = reference_to_no_delete_pointer(V0);
+    _function_spaces[1] = reference_to_no_delete_pointer(V1);
 
-  // Destructor  
-  ~MeltFluxLinearFormCoefficient0() {}
-
-  // Attach function to coefficient
-  const MeltFluxLinearFormCoefficient0& operator= (dolfin::Function& v)
-  {
-    attach(v);
-    return *this;
+    _ufc_form = boost::shared_ptr<const ufc::form>(new meltflux_form_0());
   }
 
-  /// Create function space for coefficient
-  const dolfin::FunctionSpace* create_function_space() const
+  // Constructor
+  Form_0(boost::shared_ptr<const dolfin::FunctionSpace> V0, boost::shared_ptr<const dolfin::FunctionSpace> V1):
+    dolfin::Form(2, 0)
   {
-    return new MeltFluxLinearFormCoefficientSpace0(form.mesh());
+    _function_spaces[0] = V0;
+    _function_spaces[1] = V1;
+
+    _ufc_form = boost::shared_ptr<const ufc::form>(new meltflux_form_0());
   }
-  
-  /// Return coefficient number
-  dolfin::uint number() const
+
+  // Destructor
+  ~Form_0()
+  {}
+
+  /// Return the number of the coefficient with this name
+  virtual dolfin::uint coefficient_number(const std::string& name) const
   {
+
+    dolfin::error("No coefficients.");
     return 0;
   }
-  
-  /// Return coefficient name
-  virtual std::string name() const
+
+  /// Return the name of the coefficient with this number
+  virtual std::string coefficient_name(dolfin::uint i) const
   {
-    return "f";
+
+    dolfin::error("No coefficients.");
+    return "unnamed";
   }
-  
+
+  // Typedefs
+  typedef Form_0_FunctionSpace_0 TestSpace;
+  typedef Form_0_FunctionSpace_1 TrialSpace;
+
+  // Coefficients
 };
-class MeltFluxLinearFormCoefficient1 : public dolfin::Coefficient
+
+class Form_1_FunctionSpace_0: public dolfin::FunctionSpace
+{
+public:
+
+  Form_1_FunctionSpace_0(const dolfin::Mesh& mesh):
+      dolfin::FunctionSpace(dolfin::reference_to_no_delete_pointer(mesh),
+                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new meltflux_1_finite_element_0()))),
+                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new meltflux_1_dof_map_0()), mesh)))
+  {
+    // Do nothing
+  }
+
+  Form_1_FunctionSpace_0(dolfin::Mesh& mesh):
+    dolfin::FunctionSpace(dolfin::reference_to_no_delete_pointer(mesh),
+                          boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new meltflux_1_finite_element_0()))),
+                          boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new meltflux_1_dof_map_0()), mesh)))
+  {
+    // Do nothing
+  }
+
+  Form_1_FunctionSpace_0(boost::shared_ptr<dolfin::Mesh> mesh):
+      dolfin::FunctionSpace(mesh,
+                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new meltflux_1_finite_element_0()))),
+                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new meltflux_1_dof_map_0()), *mesh)))
+  {
+      // Do nothing
+  }
+
+  Form_1_FunctionSpace_0(boost::shared_ptr<const dolfin::Mesh> mesh):
+      dolfin::FunctionSpace(mesh,
+                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new meltflux_1_finite_element_0()))),
+                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new meltflux_1_dof_map_0()), *mesh)))
+  {
+      // Do nothing
+  }
+
+
+  ~Form_1_FunctionSpace_0()
+  {
+  }
+
+};
+
+typedef CoefficientSpace_f Form_1_FunctionSpace_1;
+
+typedef CoefficientSpace_p Form_1_FunctionSpace_2;
+
+typedef CoefficientSpace_pstar Form_1_FunctionSpace_3;
+
+typedef CoefficientSpace_V Form_1_FunctionSpace_4;
+
+typedef CoefficientSpace_eps Form_1_FunctionSpace_5;
+
+class Form_1: public dolfin::Form
 {
 public:
 
   // Constructor
-  MeltFluxLinearFormCoefficient1(dolfin::Form& form) : dolfin::Coefficient(form) {}
+  Form_1(const dolfin::FunctionSpace& V0):
+    dolfin::Form(1, 5), f(*this, 0), p(*this, 1), pstar(*this, 2), V(*this, 3), eps(*this, 4)
+  {
+    _function_spaces[0] = reference_to_no_delete_pointer(V0);
 
-  // Destructor  
-  ~MeltFluxLinearFormCoefficient1() {}
-
-  // Attach function to coefficient
-  const MeltFluxLinearFormCoefficient1& operator= (dolfin::Function& v)
-  {
-    attach(v);
-    return *this;
+    _ufc_form = boost::shared_ptr<const ufc::form>(new meltflux_form_1());
   }
 
-  /// Create function space for coefficient
-  const dolfin::FunctionSpace* create_function_space() const
+  // Constructor
+  Form_1(const dolfin::FunctionSpace& V0, const dolfin::GenericFunction& f, const dolfin::GenericFunction& p, const dolfin::GenericFunction& pstar, const dolfin::GenericFunction& V, const dolfin::GenericFunction& eps):
+    dolfin::Form(1, 5), f(*this, 0), p(*this, 1), pstar(*this, 2), V(*this, 3), eps(*this, 4)
   {
-    return new MeltFluxLinearFormCoefficientSpace1(form.mesh());
+    _function_spaces[0] = reference_to_no_delete_pointer(V0);
+
+    this->f = f;
+    this->p = p;
+    this->pstar = pstar;
+    this->V = V;
+    this->eps = eps;
+
+    _ufc_form = boost::shared_ptr<const ufc::form>(new meltflux_form_1());
   }
-  
-  /// Return coefficient number
-  dolfin::uint number() const
-  {
-    return 1;
-  }
-  
-  /// Return coefficient name
-  virtual std::string name() const
-  {
-    return "p";
-  }
-  
-};
-class MeltFluxLinearFormCoefficient2 : public dolfin::Coefficient
-{
-public:
 
   // Constructor
-  MeltFluxLinearFormCoefficient2(dolfin::Form& form) : dolfin::Coefficient(form) {}
+  Form_1(const dolfin::FunctionSpace& V0, boost::shared_ptr<const dolfin::GenericFunction> f, boost::shared_ptr<const dolfin::GenericFunction> p, boost::shared_ptr<const dolfin::GenericFunction> pstar, boost::shared_ptr<const dolfin::GenericFunction> V, boost::shared_ptr<const dolfin::GenericFunction> eps):
+    dolfin::Form(1, 5), f(*this, 0), p(*this, 1), pstar(*this, 2), V(*this, 3), eps(*this, 4)
+  {
+    _function_spaces[0] = reference_to_no_delete_pointer(V0);
 
-  // Destructor  
-  ~MeltFluxLinearFormCoefficient2() {}
+    this->f = *f;
+    this->p = *p;
+    this->pstar = *pstar;
+    this->V = *V;
+    this->eps = *eps;
 
-  // Attach function to coefficient
-  const MeltFluxLinearFormCoefficient2& operator= (dolfin::Function& v)
-  {
-    attach(v);
-    return *this;
+    _ufc_form = boost::shared_ptr<const ufc::form>(new meltflux_form_1());
   }
 
-  /// Create function space for coefficient
-  const dolfin::FunctionSpace* create_function_space() const
+  // Constructor
+  Form_1(boost::shared_ptr<const dolfin::FunctionSpace> V0):
+    dolfin::Form(1, 5), f(*this, 0), p(*this, 1), pstar(*this, 2), V(*this, 3), eps(*this, 4)
   {
-    return new MeltFluxLinearFormCoefficientSpace2(form.mesh());
+    _function_spaces[0] = V0;
+
+    _ufc_form = boost::shared_ptr<const ufc::form>(new meltflux_form_1());
   }
-  
-  /// Return coefficient number
-  dolfin::uint number() const
-  {
-    return 2;
-  }
-  
-  /// Return coefficient name
-  virtual std::string name() const
-  {
-    return "pstar";
-  }
-  
-};
-class MeltFluxLinearFormCoefficient3 : public dolfin::Coefficient
-{
-public:
 
   // Constructor
-  MeltFluxLinearFormCoefficient3(dolfin::Form& form) : dolfin::Coefficient(form) {}
+  Form_1(boost::shared_ptr<const dolfin::FunctionSpace> V0, const dolfin::GenericFunction& f, const dolfin::GenericFunction& p, const dolfin::GenericFunction& pstar, const dolfin::GenericFunction& V, const dolfin::GenericFunction& eps):
+    dolfin::Form(1, 5), f(*this, 0), p(*this, 1), pstar(*this, 2), V(*this, 3), eps(*this, 4)
+  {
+    _function_spaces[0] = V0;
 
-  // Destructor  
-  ~MeltFluxLinearFormCoefficient3() {}
+    this->f = f;
+    this->p = p;
+    this->pstar = pstar;
+    this->V = V;
+    this->eps = eps;
 
-  // Attach function to coefficient
-  const MeltFluxLinearFormCoefficient3& operator= (dolfin::Function& v)
-  {
-    attach(v);
-    return *this;
+    _ufc_form = boost::shared_ptr<const ufc::form>(new meltflux_form_1());
   }
 
-  /// Create function space for coefficient
-  const dolfin::FunctionSpace* create_function_space() const
+  // Constructor
+  Form_1(boost::shared_ptr<const dolfin::FunctionSpace> V0, boost::shared_ptr<const dolfin::GenericFunction> f, boost::shared_ptr<const dolfin::GenericFunction> p, boost::shared_ptr<const dolfin::GenericFunction> pstar, boost::shared_ptr<const dolfin::GenericFunction> V, boost::shared_ptr<const dolfin::GenericFunction> eps):
+    dolfin::Form(1, 5), f(*this, 0), p(*this, 1), pstar(*this, 2), V(*this, 3), eps(*this, 4)
   {
-    return new MeltFluxLinearFormCoefficientSpace3(form.mesh());
-  }
-  
-  /// Return coefficient number
-  dolfin::uint number() const
-  {
-    return 3;
-  }
-  
-  /// Return coefficient name
-  virtual std::string name() const
-  {
-    return "V";
-  }
-  
-};
-class MeltFluxLinearFormCoefficient4 : public dolfin::Coefficient
-{
-public:
+    _function_spaces[0] = V0;
 
-  // Constructor
-  MeltFluxLinearFormCoefficient4(dolfin::Form& form) : dolfin::Coefficient(form) {}
+    this->f = *f;
+    this->p = *p;
+    this->pstar = *pstar;
+    this->V = *V;
+    this->eps = *eps;
 
-  // Destructor  
-  ~MeltFluxLinearFormCoefficient4() {}
-
-  // Attach function to coefficient
-  const MeltFluxLinearFormCoefficient4& operator= (dolfin::Function& v)
-  {
-    attach(v);
-    return *this;
-  }
-
-  /// Create function space for coefficient
-  const dolfin::FunctionSpace* create_function_space() const
-  {
-    return new MeltFluxLinearFormCoefficientSpace4(form.mesh());
-  }
-  
-  /// Return coefficient number
-  dolfin::uint number() const
-  {
-    return 4;
-  }
-  
-  /// Return coefficient name
-  virtual std::string name() const
-  {
-    return "eps";
-  }
-  
-};
-class MeltFluxLinearForm : public dolfin::Form
-{
-public:
-
-  // Create form on given function space(s)
-  MeltFluxLinearForm(const dolfin::FunctionSpace& V0) : dolfin::Form(), f(*this), p(*this), pstar(*this), V(*this), eps(*this)
-  {
-    boost::shared_ptr<const dolfin::FunctionSpace> _V0(&V0, dolfin::NoDeleter<const dolfin::FunctionSpace>());
-    _function_spaces.push_back(_V0);
-
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-
-    _ufc_form = boost::shared_ptr<const ufc::form>(new UFC_MeltFluxLinearForm());
-  }
-
-  // Create form on given function space(s) (shared data)
-  MeltFluxLinearForm(boost::shared_ptr<const dolfin::FunctionSpace> V0) : dolfin::Form(), f(*this), p(*this), pstar(*this), V(*this), eps(*this)
-  {
-    _function_spaces.push_back(V0);
-
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-
-    _ufc_form = boost::shared_ptr<const ufc::form>(new UFC_MeltFluxLinearForm());
-  }
-
-  // Create form on given function space(s) with given coefficient(s)
-  MeltFluxLinearForm(const dolfin::FunctionSpace& V0, dolfin::Function& w0, dolfin::Function& w1, dolfin::Function& w2, dolfin::Function& w3, dolfin::Function& w4) : dolfin::Form(), f(*this), p(*this), pstar(*this), V(*this), eps(*this)
-  {
-    boost::shared_ptr<const dolfin::FunctionSpace> _V0(&V0, dolfin::NoDeleter<const dolfin::FunctionSpace>());
-    _function_spaces.push_back(_V0);
-
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-
-    this->f = w0;
-    this->p = w1;
-    this->pstar = w2;
-    this->V = w3;
-    this->eps = w4;
-
-    _ufc_form = boost::shared_ptr<const ufc::form>(new UFC_MeltFluxLinearForm());
-  }
-
-  // Create form on given function space(s) with given coefficient(s) (shared data)
-  MeltFluxLinearForm(boost::shared_ptr<const dolfin::FunctionSpace> V0, dolfin::Function& w0, dolfin::Function& w1, dolfin::Function& w2, dolfin::Function& w3, dolfin::Function& w4) : dolfin::Form(), f(*this), p(*this), pstar(*this), V(*this), eps(*this)
-  {
-    _function_spaces.push_back(V0);
-
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-
-    this->f = w0;
-    this->p = w1;
-    this->pstar = w2;
-    this->V = w3;
-    this->eps = w4;
-
-    _ufc_form = boost::shared_ptr<const ufc::form>(new UFC_MeltFluxLinearForm());
+    _ufc_form = boost::shared_ptr<const ufc::form>(new meltflux_form_1());
   }
 
   // Destructor
-  ~MeltFluxLinearForm() {}
+  ~Form_1()
+  {}
+
+  /// Return the number of the coefficient with this name
+  virtual dolfin::uint coefficient_number(const std::string& name) const
+  {
+    if (name == "f")
+      return 0;
+    else if (name == "p")
+      return 1;
+    else if (name == "pstar")
+      return 2;
+    else if (name == "V")
+      return 3;
+    else if (name == "eps")
+      return 4;
+
+    dolfin::error("Invalid coefficient.");
+    return 0;
+  }
+
+  /// Return the name of the coefficient with this number
+  virtual std::string coefficient_name(dolfin::uint i) const
+  {
+    switch (i)
+    {
+    case 0:
+      return "f";
+    case 1:
+      return "p";
+    case 2:
+      return "pstar";
+    case 3:
+      return "V";
+    case 4:
+      return "eps";
+    }
+
+    dolfin::error("Invalid coefficient.");
+    return "unnamed";
+  }
+
+  // Typedefs
+  typedef Form_1_FunctionSpace_0 TestSpace;
+  typedef Form_1_FunctionSpace_1 CoefficientSpace_f;
+  typedef Form_1_FunctionSpace_2 CoefficientSpace_p;
+  typedef Form_1_FunctionSpace_3 CoefficientSpace_pstar;
+  typedef Form_1_FunctionSpace_4 CoefficientSpace_V;
+  typedef Form_1_FunctionSpace_5 CoefficientSpace_eps;
 
   // Coefficients
-  MeltFluxLinearFormCoefficient0 f;
-  MeltFluxLinearFormCoefficient1 p;
-  MeltFluxLinearFormCoefficient2 pstar;
-  MeltFluxLinearFormCoefficient3 V;
-  MeltFluxLinearFormCoefficient4 eps;
-
+  dolfin::CoefficientAssigner f;
+  dolfin::CoefficientAssigner p;
+  dolfin::CoefficientAssigner pstar;
+  dolfin::CoefficientAssigner V;
+  dolfin::CoefficientAssigner eps;
 };
 
+// Class typedefs
+typedef Form_0 BilinearForm;
+typedef Form_1 LinearForm;
+typedef Form_0::TestSpace FunctionSpace;
+
+} // namespace MeltFlux
+
 #endif
diff -r 925bd37bea8a -r 0b9832b2bf6b MADDs-5/MADDs-5a/cpp/SemiLagrangianRHS.h
--- a/MADDs-5/MADDs-5a/cpp/SemiLagrangianRHS.h	Sun Dec 06 14:02:56 2009 -0500
+++ b/MADDs-5/MADDs-5a/cpp/SemiLagrangianRHS.h	Sun Dec 06 14:03:20 2009 -0500
@@ -1,5 +1,5 @@
 // This code conforms with the UFC specification version 1.0
-// and was automatically generated by FFC version 0.6.2.
+// and was automatically generated by FFC version 0.7.1.
 //
 // Warning: This code was generated with the option '-l dolfin'
 // and contains DOLFIN-specific wrappers that depend on DOLFIN.
@@ -14,15 +14,15 @@
     
 /// This class defines the interface for a finite element.
 
-class UFC_SemiLagrangianRHSLinearForm_finite_element_0: public ufc::finite_element
+class semilagrangianrhs_0_finite_element_0: public ufc::finite_element
 {
 public:
 
   /// Constructor
-  UFC_SemiLagrangianRHSLinearForm_finite_element_0();
+  semilagrangianrhs_0_finite_element_0();
 
   /// Destructor
-  virtual ~UFC_SemiLagrangianRHSLinearForm_finite_element_0();
+  virtual ~semilagrangianrhs_0_finite_element_0();
 
   /// Return a string identifying the finite element
   virtual const char* signature() const;
@@ -56,7 +56,7 @@ public:
                                           double* values,
                                           const double* coordinates,
                                           const ufc::cell& c) const;
-  
+
   /// Evaluate order n derivatives of all basis functions at given point in cell
   virtual void evaluate_basis_derivatives_all(unsigned int n,
                                               double* values,
@@ -88,15 +88,15 @@ public:
 
 /// This class defines the interface for a finite element.
 
-class UFC_SemiLagrangianRHSLinearForm_finite_element_1: public ufc::finite_element
+class semilagrangianrhs_0_finite_element_1: public ufc::finite_element
 {
 public:
 
   /// Constructor
-  UFC_SemiLagrangianRHSLinearForm_finite_element_1();
+  semilagrangianrhs_0_finite_element_1();
 
   /// Destructor
-  virtual ~UFC_SemiLagrangianRHSLinearForm_finite_element_1();
+  virtual ~semilagrangianrhs_0_finite_element_1();
 
   /// Return a string identifying the finite element
   virtual const char* signature() const;
@@ -130,7 +130,7 @@ public:
                                           double* values,
                                           const double* coordinates,
                                           const ufc::cell& c) const;
-  
+
   /// Evaluate order n derivatives of all basis functions at given point in cell
   virtual void evaluate_basis_derivatives_all(unsigned int n,
                                               double* values,
@@ -163,7 +163,7 @@ public:
 /// This class defines the interface for a local-to-global mapping of
 /// degrees of freedom (dofs).
 
-class UFC_SemiLagrangianRHSLinearForm_dof_map_0: public ufc::dof_map
+class semilagrangianrhs_0_dof_map_0: public ufc::dof_map
 {
 private:
 
@@ -172,10 +172,10 @@ public:
 public:
 
   /// Constructor
-  UFC_SemiLagrangianRHSLinearForm_dof_map_0();
+  semilagrangianrhs_0_dof_map_0();
 
   /// Destructor
-  virtual ~UFC_SemiLagrangianRHSLinearForm_dof_map_0();
+  virtual ~semilagrangianrhs_0_dof_map_0();
 
   /// Return a string identifying the dof map
   virtual const char* signature() const;
@@ -196,8 +196,11 @@ public:
   /// Return the dimension of the global finite element function space
   virtual unsigned int global_dimension() const;
 
-  /// Return the dimension of the local finite element function space
-  virtual unsigned int local_dimension() const;
+  /// Return the dimension of the local finite element function space for a cell
+  virtual unsigned int local_dimension(const ufc::cell& c) const;
+
+  /// Return the maximum dimension of the local finite element function space
+  virtual unsigned int max_local_dimension() const;
 
   // Return the geometric dimension of the coordinates this dof map provides
   virtual unsigned int geometric_dimension() const;
@@ -236,7 +239,7 @@ public:
 /// This class defines the interface for a local-to-global mapping of
 /// degrees of freedom (dofs).
 
-class UFC_SemiLagrangianRHSLinearForm_dof_map_1: public ufc::dof_map
+class semilagrangianrhs_0_dof_map_1: public ufc::dof_map
 {
 private:
 
@@ -245,10 +248,10 @@ public:
 public:
 
   /// Constructor
-  UFC_SemiLagrangianRHSLinearForm_dof_map_1();
+  semilagrangianrhs_0_dof_map_1();
 
   /// Destructor
-  virtual ~UFC_SemiLagrangianRHSLinearForm_dof_map_1();
+  virtual ~semilagrangianrhs_0_dof_map_1();
 
   /// Return a string identifying the dof map
   virtual const char* signature() const;
@@ -269,8 +272,11 @@ public:
   /// Return the dimension of the global finite element function space
   virtual unsigned int global_dimension() const;
 
-  /// Return the dimension of the local finite element function space
-  virtual unsigned int local_dimension() const;
+  /// Return the dimension of the local finite element function space for a cell
+  virtual unsigned int local_dimension(const ufc::cell& c) const;
+
+  /// Return the maximum dimension of the local finite element function space
+  virtual unsigned int max_local_dimension() const;
 
   // Return the geometric dimension of the coordinates this dof map provides
   virtual unsigned int geometric_dimension() const;
@@ -310,15 +316,15 @@ public:
 /// tensor corresponding to the local contribution to a form from
 /// the integral over a cell.
 
-class UFC_SemiLagrangianRHSLinearForm_cell_integral_0_quadrature: public ufc::cell_integral
+class semilagrangianrhs_0_cell_integral_0_quadrature: public ufc::cell_integral
 {
 public:
 
   /// Constructor
-  UFC_SemiLagrangianRHSLinearForm_cell_integral_0_quadrature();
+  semilagrangianrhs_0_cell_integral_0_quadrature();
 
   /// Destructor
-  virtual ~UFC_SemiLagrangianRHSLinearForm_cell_integral_0_quadrature();
+  virtual ~semilagrangianrhs_0_cell_integral_0_quadrature();
 
   /// Tabulate the tensor for the contribution from a local cell
   virtual void tabulate_tensor(double* A,
@@ -331,19 +337,19 @@ public:
 /// tensor corresponding to the local contribution to a form from
 /// the integral over a cell.
 
-class UFC_SemiLagrangianRHSLinearForm_cell_integral_0: public ufc::cell_integral
+class semilagrangianrhs_0_cell_integral_0: public ufc::cell_integral
 {
 private:
 
-  UFC_SemiLagrangianRHSLinearForm_cell_integral_0_quadrature integral_0_quadrature;
+  semilagrangianrhs_0_cell_integral_0_quadrature integral_0_quadrature;
 
 public:
 
   /// Constructor
-  UFC_SemiLagrangianRHSLinearForm_cell_integral_0();
+  semilagrangianrhs_0_cell_integral_0();
 
   /// Destructor
-  virtual ~UFC_SemiLagrangianRHSLinearForm_cell_integral_0();
+  virtual ~semilagrangianrhs_0_cell_integral_0();
 
   /// Tabulate the tensor for the contribution from a local cell
   virtual void tabulate_tensor(double* A,
@@ -367,15 +373,15 @@ public:
 /// sequence of basis functions of Vj and w1, w2, ..., wn are given
 /// fixed functions (coefficients).
 
-class UFC_SemiLagrangianRHSLinearForm: public ufc::form
+class semilagrangianrhs_form_0: public ufc::form
 {
 public:
 
   /// Constructor
-  UFC_SemiLagrangianRHSLinearForm();
+  semilagrangianrhs_form_0();
 
   /// Destructor
-  virtual ~UFC_SemiLagrangianRHSLinearForm();
+  virtual ~semilagrangianrhs_form_0();
 
   /// Return a string identifying the form
   virtual const char* signature() const;
@@ -388,10 +394,10 @@ public:
 
   /// Return the number of cell integrals
   virtual unsigned int num_cell_integrals() const;
-  
+
   /// Return the number of exterior facet integrals
   virtual unsigned int num_exterior_facet_integrals() const;
-  
+
   /// Return the number of interior facet integrals
   virtual unsigned int num_interior_facet_integrals() const;
 
@@ -414,189 +420,214 @@ public:
 
 // DOLFIN wrappers
 
-#include <dolfin/fem/Form.h>
+// Standard library includes
+#include <string>
+
+// DOLFIN includes
+#include <dolfin/common/NoDeleter.h>
 #include <dolfin/fem/FiniteElement.h>
 #include <dolfin/fem/DofMap.h>
-#include <dolfin/function/Coefficient.h>
-#include <dolfin/function/Function.h>
+#include <dolfin/fem/Form.h>
 #include <dolfin/function/FunctionSpace.h>
+#include <dolfin/function/GenericFunction.h>
+#include <dolfin/function/CoefficientAssigner.h>
 
-class SemiLagrangianRHSLinearFormFunctionSpace0 : public dolfin::FunctionSpace
+namespace SemiLagrangianRHS
+{
+
+class CoefficientSpace_gStar: public dolfin::FunctionSpace
 {
 public:
 
-  SemiLagrangianRHSLinearFormFunctionSpace0(const dolfin::Mesh& mesh)
-    : dolfin::FunctionSpace(boost::shared_ptr<const dolfin::Mesh>(&mesh, dolfin::NoDeleter<const dolfin::Mesh>()),
-                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new UFC_SemiLagrangianRHSLinearForm_finite_element_1()))),
-                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new UFC_SemiLagrangianRHSLinearForm_dof_map_1()), mesh)))
+  CoefficientSpace_gStar(const dolfin::Mesh& mesh):
+      dolfin::FunctionSpace(dolfin::reference_to_no_delete_pointer(mesh),
+                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new semilagrangianrhs_0_finite_element_1()))),
+                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new semilagrangianrhs_0_dof_map_1()), mesh)))
   {
     // Do nothing
   }
 
-};
-
-class SemiLagrangianRHSLinearFormCoefficientSpace0 : public dolfin::FunctionSpace
-{
-public:
-
-  SemiLagrangianRHSLinearFormCoefficientSpace0(const dolfin::Mesh& mesh)
-    : dolfin::FunctionSpace(boost::shared_ptr<const dolfin::Mesh>(&mesh, dolfin::NoDeleter<const dolfin::Mesh>()),
-                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new UFC_SemiLagrangianRHSLinearForm_finite_element_1()))),
-                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new UFC_SemiLagrangianRHSLinearForm_dof_map_1()), mesh)))
+  CoefficientSpace_gStar(dolfin::Mesh& mesh):
+    dolfin::FunctionSpace(dolfin::reference_to_no_delete_pointer(mesh),
+                          boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new semilagrangianrhs_0_finite_element_1()))),
+                          boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new semilagrangianrhs_0_dof_map_1()), mesh)))
   {
     // Do nothing
   }
 
+  CoefficientSpace_gStar(boost::shared_ptr<dolfin::Mesh> mesh):
+      dolfin::FunctionSpace(mesh,
+                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new semilagrangianrhs_0_finite_element_1()))),
+                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new semilagrangianrhs_0_dof_map_1()), *mesh)))
+  {
+      // Do nothing
+  }
+
+  CoefficientSpace_gStar(boost::shared_ptr<const dolfin::Mesh> mesh):
+      dolfin::FunctionSpace(mesh,
+                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new semilagrangianrhs_0_finite_element_1()))),
+                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new semilagrangianrhs_0_dof_map_1()), *mesh)))
+  {
+      // Do nothing
+  }
+
+
+  ~CoefficientSpace_gStar()
+  {
+  }
+
 };
 
-class SemiLagrangianRHSTestSpace : public dolfin::FunctionSpace
+class Form_0_FunctionSpace_0: public dolfin::FunctionSpace
 {
 public:
 
-  SemiLagrangianRHSTestSpace(const dolfin::Mesh& mesh)
-    : dolfin::FunctionSpace(boost::shared_ptr<const dolfin::Mesh>(&mesh, dolfin::NoDeleter<const dolfin::Mesh>()),
-                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new UFC_SemiLagrangianRHSLinearForm_finite_element_1()))),
-                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new UFC_SemiLagrangianRHSLinearForm_dof_map_1()), mesh)))
+  Form_0_FunctionSpace_0(const dolfin::Mesh& mesh):
+      dolfin::FunctionSpace(dolfin::reference_to_no_delete_pointer(mesh),
+                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new semilagrangianrhs_0_finite_element_0()))),
+                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new semilagrangianrhs_0_dof_map_0()), mesh)))
   {
     // Do nothing
   }
 
-};
-
-class SemiLagrangianRHSTrialSpace : public dolfin::FunctionSpace
-{
-public:
-
-  SemiLagrangianRHSTrialSpace(const dolfin::Mesh& mesh)
-    : dolfin::FunctionSpace(boost::shared_ptr<const dolfin::Mesh>(&mesh, dolfin::NoDeleter<const dolfin::Mesh>()),
-                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new UFC_SemiLagrangianRHSLinearForm_finite_element_1()))),
-                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new UFC_SemiLagrangianRHSLinearForm_dof_map_1()), mesh)))
+  Form_0_FunctionSpace_0(dolfin::Mesh& mesh):
+    dolfin::FunctionSpace(dolfin::reference_to_no_delete_pointer(mesh),
+                          boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new semilagrangianrhs_0_finite_element_0()))),
+                          boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new semilagrangianrhs_0_dof_map_0()), mesh)))
   {
     // Do nothing
   }
 
-};
+  Form_0_FunctionSpace_0(boost::shared_ptr<dolfin::Mesh> mesh):
+      dolfin::FunctionSpace(mesh,
+                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new semilagrangianrhs_0_finite_element_0()))),
+                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new semilagrangianrhs_0_dof_map_0()), *mesh)))
+  {
+      // Do nothing
+  }
 
-class SemiLagrangianRHSCoefficientSpace : public dolfin::FunctionSpace
-{
-public:
+  Form_0_FunctionSpace_0(boost::shared_ptr<const dolfin::Mesh> mesh):
+      dolfin::FunctionSpace(mesh,
+                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new semilagrangianrhs_0_finite_element_0()))),
+                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new semilagrangianrhs_0_dof_map_0()), *mesh)))
+  {
+      // Do nothing
+  }
 
-  SemiLagrangianRHSCoefficientSpace(const dolfin::Mesh& mesh)
-    : dolfin::FunctionSpace(boost::shared_ptr<const dolfin::Mesh>(&mesh, dolfin::NoDeleter<const dolfin::Mesh>()),
-                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new UFC_SemiLagrangianRHSLinearForm_finite_element_1()))),
-                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new UFC_SemiLagrangianRHSLinearForm_dof_map_1()), mesh)))
+
+  ~Form_0_FunctionSpace_0()
   {
-    // Do nothing
   }
 
 };
 
-class SemiLagrangianRHSFunctionSpace : public dolfin::FunctionSpace
-{
-public:
+typedef CoefficientSpace_gStar Form_0_FunctionSpace_1;
 
-  SemiLagrangianRHSFunctionSpace(const dolfin::Mesh& mesh)
-    : dolfin::FunctionSpace(boost::shared_ptr<const dolfin::Mesh>(&mesh, dolfin::NoDeleter<const dolfin::Mesh>()),
-                            boost::shared_ptr<const dolfin::FiniteElement>(new dolfin::FiniteElement(boost::shared_ptr<ufc::finite_element>(new UFC_SemiLagrangianRHSLinearForm_finite_element_1()))),
-                            boost::shared_ptr<const dolfin::DofMap>(new dolfin::DofMap(boost::shared_ptr<ufc::dof_map>(new UFC_SemiLagrangianRHSLinearForm_dof_map_1()), mesh)))
-  {
-    // Do nothing
-  }
-
-};
-
-class SemiLagrangianRHSLinearFormCoefficient0 : public dolfin::Coefficient
+class Form_0: public dolfin::Form
 {
 public:
 
   // Constructor
-  SemiLagrangianRHSLinearFormCoefficient0(dolfin::Form& form) : dolfin::Coefficient(form) {}
+  Form_0(const dolfin::FunctionSpace& V0):
+    dolfin::Form(1, 1), gStar(*this, 0)
+  {
+    _function_spaces[0] = reference_to_no_delete_pointer(V0);
 
-  // Destructor  
-  ~SemiLagrangianRHSLinearFormCoefficient0() {}
-
-  // Attach function to coefficient
-  const SemiLagrangianRHSLinearFormCoefficient0& operator= (dolfin::Function& v)
-  {
-    attach(v);
-    return *this;
+    _ufc_form = boost::shared_ptr<const ufc::form>(new semilagrangianrhs_form_0());
   }
 
-  /// Create function space for coefficient
-  const dolfin::FunctionSpace* create_function_space() const
+  // Constructor
+  Form_0(const dolfin::FunctionSpace& V0, const dolfin::GenericFunction& gStar):
+    dolfin::Form(1, 1), gStar(*this, 0)
   {
-    return new SemiLagrangianRHSLinearFormCoefficientSpace0(form.mesh());
-  }
-  
-  /// Return coefficient number
-  dolfin::uint number() const
-  {
-    return 0;
-  }
-  
-  /// Return coefficient name
-  virtual std::string name() const
-  {
-    return "gStar";
-  }
-  
-};
-class SemiLagrangianRHSLinearForm : public dolfin::Form
-{
-public:
+    _function_spaces[0] = reference_to_no_delete_pointer(V0);
 
-  // Create form on given function space(s)
-  SemiLagrangianRHSLinearForm(const dolfin::FunctionSpace& V0) : dolfin::Form(), gStar(*this)
-  {
-    boost::shared_ptr<const dolfin::FunctionSpace> _V0(&V0, dolfin::NoDeleter<const dolfin::FunctionSpace>());
-    _function_spaces.push_back(_V0);
+    this->gStar = gStar;
 
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-
-    _ufc_form = boost::shared_ptr<const ufc::form>(new UFC_SemiLagrangianRHSLinearForm());
+    _ufc_form = boost::shared_ptr<const ufc::form>(new semilagrangianrhs_form_0());
   }
 
-  // Create form on given function space(s) (shared data)
-  SemiLagrangianRHSLinearForm(boost::shared_ptr<const dolfin::FunctionSpace> V0) : dolfin::Form(), gStar(*this)
+  // Constructor
+  Form_0(const dolfin::FunctionSpace& V0, boost::shared_ptr<const dolfin::GenericFunction> gStar):
+    dolfin::Form(1, 1), gStar(*this, 0)
   {
-    _function_spaces.push_back(V0);
+    _function_spaces[0] = reference_to_no_delete_pointer(V0);
 
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
+    this->gStar = *gStar;
 
-    _ufc_form = boost::shared_ptr<const ufc::form>(new UFC_SemiLagrangianRHSLinearForm());
+    _ufc_form = boost::shared_ptr<const ufc::form>(new semilagrangianrhs_form_0());
   }
 
-  // Create form on given function space(s) with given coefficient(s)
-  SemiLagrangianRHSLinearForm(const dolfin::FunctionSpace& V0, dolfin::Function& w0) : dolfin::Form(), gStar(*this)
+  // Constructor
+  Form_0(boost::shared_ptr<const dolfin::FunctionSpace> V0):
+    dolfin::Form(1, 1), gStar(*this, 0)
   {
-    boost::shared_ptr<const dolfin::FunctionSpace> _V0(&V0, dolfin::NoDeleter<const dolfin::FunctionSpace>());
-    _function_spaces.push_back(_V0);
+    _function_spaces[0] = V0;
 
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
-
-    this->gStar = w0;
-
-    _ufc_form = boost::shared_ptr<const ufc::form>(new UFC_SemiLagrangianRHSLinearForm());
+    _ufc_form = boost::shared_ptr<const ufc::form>(new semilagrangianrhs_form_0());
   }
 
-  // Create form on given function space(s) with given coefficient(s) (shared data)
-  SemiLagrangianRHSLinearForm(boost::shared_ptr<const dolfin::FunctionSpace> V0, dolfin::Function& w0) : dolfin::Form(), gStar(*this)
+  // Constructor
+  Form_0(boost::shared_ptr<const dolfin::FunctionSpace> V0, const dolfin::GenericFunction& gStar):
+    dolfin::Form(1, 1), gStar(*this, 0)
   {
-    _function_spaces.push_back(V0);
+    _function_spaces[0] = V0;
 
-    _coefficients.push_back(boost::shared_ptr<const dolfin::Function>(static_cast<const dolfin::Function*>(0)));
+    this->gStar = gStar;
 
-    this->gStar = w0;
+    _ufc_form = boost::shared_ptr<const ufc::form>(new semilagrangianrhs_form_0());
+  }
 
-    _ufc_form = boost::shared_ptr<const ufc::form>(new UFC_SemiLagrangianRHSLinearForm());
+  // Constructor
+  Form_0(boost::shared_ptr<const dolfin::FunctionSpace> V0, boost::shared_ptr<const dolfin::GenericFunction> gStar):
+    dolfin::Form(1, 1), gStar(*this, 0)
+  {
+    _function_spaces[0] = V0;
+
+    this->gStar = *gStar;
+
+    _ufc_form = boost::shared_ptr<const ufc::form>(new semilagrangianrhs_form_0());
   }
 
   // Destructor
-  ~SemiLagrangianRHSLinearForm() {}
+  ~Form_0()
+  {}
+
+  /// Return the number of the coefficient with this name
+  virtual dolfin::uint coefficient_number(const std::string& name) const
+  {
+    if (name == "gStar")
+      return 0;
+
+    dolfin::error("Invalid coefficient.");
+    return 0;
+  }
+
+  /// Return the name of the coefficient with this number
+  virtual std::string coefficient_name(dolfin::uint i) const
+  {
+    switch (i)
+    {
+    case 0:
+      return "gStar";
+    }
+
+    dolfin::error("Invalid coefficient.");
+    return "unnamed";
+  }
+
+  // Typedefs
+  typedef Form_0_FunctionSpace_0 TestSpace;
+  typedef Form_0_FunctionSpace_1 CoefficientSpace_gStar;
 
   // Coefficients
-  SemiLagrangianRHSLinearFormCoefficient0 gStar;
-
+  dolfin::CoefficientAssigner gStar;
 };
 
+// Class typedefs
+typedef Form_0 LinearForm;
+typedef Form_0::TestSpace FunctionSpace;
+
+} // namespace SemiLagrangianRHS
+
 #endif
diff -r 925bd37bea8a -r 0b9832b2bf6b MADDs-5/MADDs-5a/cpp/forms/MagmaEquations.form
--- a/MADDs-5/MADDs-5a/cpp/forms/MagmaEquations.form	Sun Dec 06 14:02:56 2009 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,78 +0,0 @@
-# Copyright (C) 2008 Marc Spiegelman
-# Licensed under the GNU LGPL Version 2.1.
-#
-# The linearised bilinear form a(v, U) and linear form L(v) for
-# the regularized non-linear magma problem with semi-Lagrangian updating
-#        
-#     - div K(f,eps) grad p + c Xi(f,eps,eta) p  = div K(f)( grad pstar - \khat) 
-#          Df/Dt  = c Xi(f,eps,eta) p + Gamma
-#
-#       with:
-#       K(f,eps) = (f+eps)^2
-#       Xi(f,eps,eta) = (f+eps)/eta    
-#       c = (h/delta)^2
-#       Gamma = melting rate function (assumed W dF/dz)
-#
-# Compile this form with FFC: ffc -l dolfin MagmaEquation.form
-
-P1 = FiniteElement("Lagrange", "triangle", 1)
-P2 = FiniteElement("Lagrange", "triangle", 2)
-M = P1 + P1
-
-(v,  u)  = TestFunctions(M)
-(dp, df) = TrialFunctions(M) # deltas for pressure and porosity
-(p, f)   = Functions(M)      # solution from last iteration
-
-#parameters and functions
-
-dt = Constant("triangle")  # time step
-hdt = 0.5*dt # half time step
-
-
-# set domain size coefficient h=h/delta height in compaction lengths
-hsquared = Constant("triangle") # (h/delta)^2
-
-
-# facet normal for forcing term
-n = FacetNormal("triangle")
-
-# inverse shear viscosity
-iEta = Function(P1) 
-
-# melting rate  = dF/dz(x)/phi0*W
-Gamma = Function(P2)
-
-# dynamic pressure
-PStar = Function(P1)
-
-
-# regularization constants
-eps = 5.e-3
-zero = 0.
-
-# permeability function
-def K(f, eps):
-    return (f+eps)*(f+eps)
-
-# derivatives of permeability
-def dKdf(f,eps):
-    return 2*(f+eps)
-
-# bulk viscosity function
-def Xi(f, eps, iEta):
-	return iEta*(f + eps)
-
-# derivative of bulk viscosity with respect to porosity
-def dXidf(iEta):
-	return iEta			
-
-a1 = (K(f,eps)*dot(grad(v),grad(dp)) + hsquared*v*Xi(f,eps,iEta)*dp)*dx + ((dKdf(f,eps)*dot(grad(v),grad(p)) + hsquared*dXidf(iEta)*v*p - dKdf(f,eps)*v.dx(1))*df)*dx + dKdf(f,eps)*df*v*n[1]*ds + dKdf(f,eps)*df*dot(grad(PStar),grad(v))*dx - dKdf(f,eps)*df*v*dot(grad(PStar),n)*ds 
-a2 = u*df*dx - u*hdt*hsquared*(Xi(f,eps,iEta)*dp  + p*dXidf(iEta)*df)*dx 
-L1 = (K(f,eps)*dot(grad(v),grad(p)) + hsquared*v*Xi(f,eps,iEta)*p - K(f,zero)*v.dx(1))*dx + K(f,zero)*v*n[1]*ds + K(f,zero)*dot(grad(PStar),grad(v))*dx - K(f,zero)*v*dot(grad(PStar),n)*ds
-L2 = u*(f - hdt*(hsquared*Xi(f,eps,iEta)*p + Gamma))*dx 
- 
-#correct sign of L in Dolfin >=0.9.0
-a = a1 + a2
-L = L1 + L2 
-
-
diff -r 925bd37bea8a -r 0b9832b2bf6b MADDs-5/MADDs-5a/cpp/forms/MagmaEquations_P2.ufl
--- a/MADDs-5/MADDs-5a/cpp/forms/MagmaEquations_P2.ufl	Sun Dec 06 14:02:56 2009 -0500
+++ b/MADDs-5/MADDs-5a/cpp/forms/MagmaEquations_P2.ufl	Sun Dec 06 14:03:20 2009 -0500
@@ -13,15 +13,19 @@
 #       c = (h/delta)^2
 #       Gamma = melting rate function (assumed W dF/dz)
 #
-# Compile this form with FFC: ffc -l dolfin MagmaEquation.ufl
+# Compile this form with FFC: ffc -l dolfin -O MagmaEquation.ufl
 
 P1 = FiniteElement("Lagrange", triangle, 1)
 P2 = FiniteElement("Lagrange", triangle, 2)
-M = P2 + P2
+ME = P2 + P2
 
-(v,  u)  = TestFunctions(M)
-(dp, df) = TrialFunctions(M) # deltas for pressure and porosity
-(p, f)   = Functions(M)      # solution from last iteration
+(v,  q)  = TestFunctions(ME)
+du	 = TrialFunction(ME) # deltas for pressure and porosity
+u	 = Function(ME)      # solution from last iteration
+
+# Split mixed functions
+dp, df = split(du) 
+p,  f  = split(u)
 
 #parameters and functions
 
@@ -32,9 +36,8 @@ hdt = 0.5*dt # half time step
 # set domain size coefficient h=h/delta height in compaction lengths
 hsquared = Constant(triangle) # (h/delta)^2
 
-
 # facet normal for forcing term
-n = VectorConstant(triangle)
+n = P2.cell().n
 
 # inverse shear viscosity
 iEta = Function(P1) 
@@ -51,28 +54,19 @@ zero = 0.
 zero = 0.
 
 # permeability function
-def K(f, eps):
-    return (f+eps)*(f+eps)
-
-# derivatives of permeability
-def dKdf(f,eps):
-    return 2*(f+eps)
+K  = (f+eps)**2 # regularized
+K0 = f**2       # not regularized 
 
 # bulk viscosity function
-def Xi(f, eps, iEta):
-	return iEta*(f + eps)
+Xi = hsquared*iEta*(f+eps)
 
-# derivative of bulk viscosity with respect to porosity
-def dXidf(iEta):
-	return iEta			
-
-a1 = (K(f,eps)*inner(grad(v),grad(dp)) + hsquared*v*Xi(f,eps,iEta)*dp)*dx + ((dKdf(f,eps)*inner(grad(v),grad(p)) + hsquared*dXidf(iEta)*v*p - dKdf(f,eps)*v.dx(1))*df)*dx + dKdf(f,eps)*df*v*n[1]*ds + dKdf(f,eps)*df*inner(grad(PStar),grad(v))*dx - dKdf(f,eps)*df*v*inner(grad(PStar),n)*ds 
-a2 = u*df*dx - u*hdt*hsquared*(Xi(f,eps,iEta)*dp  + p*dXidf(iEta)*df)*dx 
-L1 = (K(f,eps)*inner(grad(v),grad(p)) + hsquared*v*Xi(f,eps,iEta)*p - K(f,zero)*v.dx(1))*dx + K(f,zero)*v*n[1]*ds + K(f,zero)*inner(grad(PStar),grad(v))*dx - K(f,zero)*v*inner(grad(PStar),n)*ds
-L2 = u*(f - hdt*(hsquared*Xi(f,eps,iEta)*p + Gamma))*dx 
+# calculate linear form for residual F(u)
+L1 = (K*inner(grad(v),grad(p)) + v*Xi*p - K0*v.dx(1))*dx + K0*inner(grad(PStar),grad(v))*dx + K0*v*(n[1] - inner(grad(PStar),n))*ds
+L2 = q*(f - hdt*(Xi*p + Gamma))*dx 
  
-#correct sign of L in Dolfin >=0.9.0
-a = a1 + a2
 L = L1 + L2 
 
+# bilinear form for weak form of the Jacobian J(u) (using functional differentiation of L)
 
+a = derivative(L, u, du)
+
diff -r 925bd37bea8a -r 0b9832b2bf6b MADDs-5/MADDs-5a/cpp/forms/MeltFlux.form
--- a/MADDs-5/MADDs-5a/cpp/forms/MeltFlux.form	Sun Dec 06 14:02:56 2009 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,56 +0,0 @@
-#"""This form projects the solid velocity and compaction+dynamic pressure onto a linear space for plotting.
-#
-# In the strong form
-#
-#    v = V + wo/U0*(-Grad(p+pstar) + k)
-#
-#    where v is the fluid velocity
-#          V is the solid velocity
-#          w0/U0 is a measure of the permeability
-#          p is solid pressure
-#          and k is the unit vector in the direction of buoyancy
-#
-#
-# The corresponding weak (variational problem) is a projection from FiniteElement spaces for V and p onto
-# that of v assuming v can be described by BDM elements of degree q
-# 
-# Compile this form with FFC: ffc -l dolfin MagmaEquation.form
-#
-#Modified from the PyDolfin MADDs-2.py demo
-#
-# __author__    = "Marc Spiegelman"
-# __date__      = " 28 Mar 2009 00:04:25"
-# __copyright__ = "Copyright (C) 2009 Marc Spiegelman"
-# __license__   = "GNU LGPL Version 2.1"
-
-
-# set up pressure/velocity function spaces
-P2 = VectorElement("Lagrange","triangle", 2)
-VP1 = VectorElement("Lagrange","triangle",1)
-P1 = FiniteElement("Lagrange","triangle", 1)
-
-
-
-# set up porosity, pressure/velocity Functions
-f = Function(P1)
-p = Function(P1)
-V = Function(P2)
-
-
-# regularized permeability function
-eps = 5.e-3
-zero = 0.
-def K(f, eps):
-    return (f+eps)*(f+eps)
-
-
-# define new BDM function spaces
-BDM = FiniteElement("BDM","triangle", 1)
-
-# Define projection problem
-w = TestFunction(VP1)
-u = TrialFunction(VP1)
-
-a = dot(w,u)*dx
-L = f*dot(w,V)*dx + K(f,zero)*(-dot(w,grad(p))+w[1])*dx
-
diff -r 925bd37bea8a -r 0b9832b2bf6b MADDs-5/MADDs-5a/cpp/forms/MeltFlux_P2.ufl
--- a/MADDs-5/MADDs-5a/cpp/forms/MeltFlux_P2.ufl	Sun Dec 06 14:02:56 2009 -0500
+++ b/MADDs-5/MADDs-5a/cpp/forms/MeltFlux_P2.ufl	Sun Dec 06 14:03:20 2009 -0500
@@ -44,8 +44,8 @@ V = Function(VP2)
 # regularized permeability function
 eps = Constant(triangle)
 zero = 0.
-def K(f, eps):
-    return (f+eps)*(f+eps)
+K = (f+eps)**2
+K0 = f**2
 
 
 # define new BDM function spaces
@@ -56,5 +56,5 @@ u = TrialFunction(VP1)
 u = TrialFunction(VP1)
 
 a = inner(w,u)*dx
-L = f*inner(w,V)*dx + K(f,eps)*(-inner(w,grad(p)))*dx + K(f,zero)*(-inner(w,grad(pstar))+w[1])*dx
+L = f*inner(w,V)*dx + K*(-inner(w,grad(p)))*dx + K0*(-inner(w,grad(pstar))+w[1])*dx
 
diff -r 925bd37bea8a -r 0b9832b2bf6b MADDs-5/MADDs-5a/cpp/forms/Projection.form
--- a/MADDs-5/MADDs-5a/cpp/forms/Projection.form	Sun Dec 06 14:02:56 2009 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,18 +0,0 @@
-# Copyright (C) 2008 Anders Logg.
-# Licensed under the GNU LGPL Version 2.1.
-#
-# First added:  2008-03-17
-# Last changed: 2008-03-17
-#
-# The bilinear form a(v, u) and linear form L(v) for
-# projection onto piecewise quadratics.
-#
-# Compile this form with FFC: ffc -l dolfin Projection.form.
-
-P1 = VectorElement("Lagrange", "triangle", 1)
-v = TestFunction(P1)
-u = TrialFunction(P1)
-f = Function(P1)
-
-a = dot(v,u)*dx
-L = dot(v,f)*dx
diff -r 925bd37bea8a -r 0b9832b2bf6b MADDs-5/MADDs-5a/cpp/forms/Projection_P2.ufl
--- a/MADDs-5/MADDs-5a/cpp/forms/Projection_P2.ufl	Sun Dec 06 14:02:56 2009 -0500
+++ b/MADDs-5/MADDs-5a/cpp/forms/Projection_P2.ufl	Sun Dec 06 14:03:20 2009 -0500
@@ -9,7 +9,7 @@
 #
 # Compile this form with FFC: ffc -l dolfin Projection.ufl.
 
-P2 = VectorElement("Lagrange", triangle, 2)
+P2 = VectorElement("Lagrange", "triangle", 2)
 v = TestFunction(P2)
 u = TrialFunction(P2)
 f = Function(P2)
diff -r 925bd37bea8a -r 0b9832b2bf6b MADDs-5/MADDs-5a/cpp/forms/SemiLagrangianRHS.form
--- a/MADDs-5/MADDs-5a/cpp/forms/SemiLagrangianRHS.form	Sun Dec 06 14:02:56 2009 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,18 +0,0 @@
-# Copyright (C) 2008 Marc Spiegelman
-# Licensed under the GNU LGPL Version 2.1.
-#
-# Form for compiling RHS vector on a quadrature element
-#
-# Compile this form with FFC: ffc -l dolfin PressureEquation.form.
-
-P1 = FiniteElement("Lagrange", "triangle", 1)
-QE = QuadratureElement("triangle",2) # quadrature element for Semi-Lagrangian source term
-
-u  = TestFunction(P1)
-gStar    = Function(QE)      # source term calculated from last time step by semi-Lagrangian update
-
-
-L =  -u*gStar*dx 
-
-
-



More information about the CIG-COMMITS mailing list