# Bilinear and linear forms  a = dot(grad(v), grad(u))*dx + k*djump(v)*djump(u)*dc  L = v*f*dx
### Specialised Generated Code  
From the high-level input, low-level code which is specific to the considered equation is automatically generated by the form compiler. FFC generates C++ code which conforms to the Unified Form-assembly Code (UFC) specification [14; 15] (the generated code conforms to the upcoming version 1.2 of UFC). The UFC specification is a C++ interface for the assembly of variational forms and provides a specification against which automated code generators can work. An assembler that supports the UFC specification can therefore assemble the global matrices and vectors from the generated code without modification. In the context of the extended finite element method, the computation of element matrices and vectors, and the degree of freedom maps are affected by the discontinuity surfaces. To exploit the UFC specification, we follow a standard C++ polymorphic design and generate subclasses of the classes defined in the UFC specification. The automatically generated classes are initialised with a GenericPUM object (the design of this object is described later in the section) which provides the data which is dependent on the presence of discontinuity surfaces and is necessary to build element matrices and vectors for the extended finite element method. The member functions of the generated code which are called during assembly are part of the UFC specification, which is why the global system of equations can be assembled by any assembly code which supports the specification. We outline some key elements of the automatically generated code and describe their purpose. A number of other utility classes and functions in addition to those which we will describe are also generated, such as functions for evaluating basis functions and their derivatives at arbitrary points. The key classes generated by the form compiler address the degree of freedom maps, cell integrals (which include integration over a discontinuity surface within a cell) and forms, which represent mathematical variational forms. At the highest level of abstraction, given an object pum, forms are created. For example, for the Poisson equation, classes which represent the bilinear and linear forms are generated,  
UFC_PoissonBilinearForma(pum); UFC_PoissonLinearFormL(pum);  
Forms are self-aware of various properties, such as their rank, and are able to create the relevant degree of freedom maps, integral objects and finite elements. Forms are the main interface through which an application developer interacts with the automatically generated code. A generated form is a subclass of the UFC class ucc::form. Typically, a form is passed together with a matrix/vector and a mesh to an assembler to build the global matrix/vector. A form object is also able to create degree of freedom maps (which are subclasses of the UFC class ucc::dof_map). For the Poisson example, the form compiler will generate code for a class from which an object is created by  
Poisson_dof_map_0 dof_map(pum);  
This object is able to tabulate the degree of freedom map for a given cell. The degree of freedom map is aware of the discontinuity and the extra \"enriched\" degrees of freedom via the object pum. Degree offreedom map classes can perform various tasks, as defined in the UFC specification. The numeral in the class name is a convention in the generated code which indicates the particular degree of freedom map. Problems with multiple fields will involve multiple maps. However, the user is not exposed to this as the degree of freedom maps are accessed via the higher-level form object. This naming convention is followed for other generated classes. Objects which are able to compute an element matrix or vector are generated by the compiler and are subclasses of ufc::cell_integral from the UFC specification. A cell integral object for a Poisson problem can be created by  
Poisson_cell_integral_0 cell_integral(pum);  
For each form that appears in a problem (usually there is one bilinear form and one linear form), there will typically be a cell integral class.