Provided by: python3-ffc_2019.2.0~legacy20230509.35df986-4_all 

NAME
FFC - the FEniCS Form Compiler
SYNOPSIS
ffc [-h] [-V] [-S] [-v] [-s] [-e] [-l language] [-r representation] [-f option] [-O] [-q quadrature-rule]
... input.ufl ...
DESCRIPTION
Compile multilinear forms into efficient low-level code.
The FEniCS Form Compiler FFC accepts as input one or more files, each specifying one or more multilinear
forms, and compiles the given forms into efficient low-level code for automatic assembly of the tensors
representing the multilinear forms. In particular, FFC compiles a pair of bilinear and linear forms
defining a variational problem into code that can be used to efficiently assemble the corresponding
linear system.
By default, FFC generates code according to the UFC specification version 1.0 (Unified Form-assembly
Code, see http://www.fenics.org/) but this can be controlled by specifying a different output language
(option -l). It is also possible to add new output languages to FFC.
For a full description of FFC, including a specification of the form language used to define the
multilinear forms, see the FFC user manual available on the FEniCS web page: http://www.fenics.org/
OPTIONS
-h, --help
Display help text and exit.
-V, --version
Display version number and exit.
-S, --signature
Display UFC signature and exit.
-v, --verbose
Verbose mode, more output is printed. Conflicts with -s.
-s, --silent
Silent mode, no output is printed. Conflicts with -v.
-e, --error-control
Error control mode, a set of additional forms useful for goal-oriented error control is generated
and compiled.
-l language, --language language
Specify output language, one of 'ufc' (default) or 'dolfin' (UFC with a small layer of DOLFIN-
specific bindings).
-r representation, --representation representation
Specify representation for precomputation and code generation, one of 'quadrature' (default) or
'tensor'.
-f option
Specify code generation options. The list of options available depends on the specified language
(format). Current options include -fblas, -fno-foo, -fprecision=n, -fprecompute_basis_const,
-fprecompute_ip_const, -fsimplify_expressions, -feliminate_zeros, -fquadrature_degree=n and,
-fsplit, -fno_ferari, described in detail below.
-f blas
Generate code that uses BLAS to compute tensor products. This option is currently ignored, but
can be used to reduce the code size when the BLAS option is (re-)implemented in future versions.
-f no-foo
Don't generate code for UFC function with name 'foo'. Typical options include -fno-evaluate_basis
and -fno-evaluate_basis_derivatives to reduce the size of the generated code when these functions
are not needed.
-f precision=n
Set the number of significant digits to n in the generated code. The default value of n is 15.
-f precompute_basis_const
Optimisation option for quadrature representation. This option is ignored if optimisation is not
used (see -O option), and it also implies the -fprecompute_ip_const option. This option will
generate code that precompute terms which are constant in the loops involving basis indices. This
can result in a reduction of the operation count and thereby improve the runtime efficiency of the
generated code. However, the improvements depends on the GCC compiler options as well as the
characteristics of the variational form.
-f precompute_ip_const
Like the -fprecompute_basis_const option with the only difference that code will be generated to
compute terms which are constant in the loops involving the integration points only.
-f simplify_expressions
Optimisation option for quadrature representation. This option is ignored if optimisation is not
used (see -O option). Before simplifying the expressions to compute the local element tensor, they
are expanded in order to identify and precompute terms which are constant with respect to geometry
and integration points. This operation can be very expensive since it involves creating many new
terms which might result in memory being exhausted.
-f eliminate_zeros
Optimisation option for quadrature representation. This option is ignored if optimisation is not
used (see -O option). Tables containing basis function values will be compressed such that they
only contain non zero values. This will reduce the loop ranges and thereby the number of
operations, but since a mapping is introduced, in order to insert values correctly into the
element matrix, some overhead is introduced. This optimisation option is usually most effective in
combination with one of the other optimisation options.
-f quadrature_degree=n
Will generate a quadrature rule accurate up to degree n regardless of the polynomial degree of the
form. This option is only valid for UFL forms and the specified degree will apply to ALL terms of
the given form for which no degree has been specified through metadata! As default FFC will
determine the degree automatically from the form.
-f split
Generate separate files for declarations and the implementation.
-f no_ferari
Skip FErari optimizations, even if the -O flag is set. This only has effect when the tensor
representation is used. This option can be used in combination with the -O flag to avoid
potentially very long compilation times by instructing FFC to only optimize when the quadrature
representation is used.
-O, --optimize
Generate optimized code with a lower operation count compared to non-optimized code for the
assembly of the local element tensor. This will in general increase the run-time performance of
the code. If the representation (see -r option) is 'tensor' then FFC will use FErari
optimizations. This option requires FErari and should be used with caution since it may be very
costly (at compile-time) for other than simple forms. If the representation is 'quadrature' the
compile-time increase tends to be much less drastic compared to FErari for very complex forms. The
-O option for quadrature representation turns on the following optimisation flags:
-fsimplify_expressions -feliminate_zeros
-o directory, --output-directory directory
Specify the directory where the generated files should be written to. The default output directory
is the current ('.') directory.
-q rule, --quadrature-rule rule
Specify the quadrature rule that should be used when integrating the forms. This will affect both
tensor and quadrature representation. Currently, available options are 'default' and 'canonical'.
The 'default' option covers hand implemented quadrature rules for triangles and tetrahedra with a
degree of precision less than or equal to six. The 'canonical' option relies on FIAT to compute
the quadrature rule which is based on the Gauss--Legendre--Jacobi rule mapped onto simplices. By
default, FFC will try to use the 'default' option as this will typically result in the most
efficient code being generated. If this is not possible (if the polynomial degree of the integrand
is larger than six, or if the cell is not one of 'triangle' or 'tetrahedron'), FFC will
automatically apply the 'canonical' rule. If the number of integration points used by the
'canonical' rule is too big for efficient computation, the option -fquadrature_degree can be used.
BUGS
See https://fenicsproject.org/support/ for channels to send comments,
questions, bug reports etc.
AUTHOR
Written by Anders Logg (logg@simula.no) with help from Kristian Ølgaard, Marie Rognes, Garth N. Wells and
many others.
FFC(1)