- 0.
- Language, parsing
- Input: Python code or .ufl file
- Output: UFL form
This stage consists of parsing and expressing a form in the UFL
form language. This stage is handled by UFL.
- 1.
- Analysis
- Input: UFL form
- Output: Preprocessed UFL form and FormData (metadata)
This stage preprocesses the UFL form and extracts form metadata.
It may also perform simplifications on the form.
- 2.
- Code representation
- Input: Preprocessed UFL form and FormData (metadata)
- Output: Intermediate Representation (IR)
This stage examines the input and generates all data needed for
code generation. This includes generation of finite element basis functions,
extraction of data for mapping of degrees of freedom and possible
precomputation of integrals. Most of the complexity of compilation is
handled in this stage.
The IR is stored as a dictionary, mapping names of UFC functions
to data needed for generation of the corresponding code.
- 3.
- Code generation
- Input: Intermediate Representation (IR)
- Output: C code
This stage examines the IR and generates the actual C code for the
body of each UFC function.
The code is stored as a dictionary, mapping names of UFC functions
to strings containing the C code of the body of each function.
- 4.
- Code formatting
- Input: C code
- Output: C code files
This stage examines the generated C++ code and formats it
according to the UFC format, generating as output one or more .h/.c files
conforming to the UFC format.