This file lists TODO items for FFC. As usual, the priority depends
on the current interests of the various FFC developers. To edit this
file, it is convenient to install org-mode in Emacs.

* Write introduction in manual
  - The introduction is currently empty

# This should be in the UFL manual, delete this?
* Write about a, L, M in manual
  - Missing in current manual

# This should be in the UFL manual, delete this?
* Write about lhs() and rhs() in manual

# Should this also be in UFL?
* Projections
  - Reimplement (worked before)
  - Add to manual

* Optimization
  - Reimplement (worked before)
  - Write about optimizations in manual
  - Add to man page

* BLAS mode
  - Reimplement level 2 BLAS (worked before)
  - Implement level 3 BLAS
  - Generate loops for geometry tensor
  - Add to man page

* Generate loops for geometry tensor in BLAS mode
  - It should be possible to reduce the size of the generated code
  for complicated forms by generating loops for the computation of
  the entries of the geometry tensor

* UFC, Implement missing functions
  - evaluate_basis_all()
  - evaluate_basis_derivatives_all()
  - evaluate_dofs()
  - num_entity_dofs()
  - tabulate_entity_dofs()

# This should be in the UFL manual, delete this?
* Time derivatives
  - Dt(u)

* Quad elements
  - Isoparametric mapping

# This should be in the UFL manual, delete this?
* Tensor-valued functions

* Fix all FIXMEs
  - There are a few of these: find src/ffc -name '*.py' | xargs grep FIXME

* Conversion to UFL
  - Skipping factorization in tensor representation, does it matter?
    Check speed against old FFC.
  - Estimation of quadrature_order not correct in UFL

* Conversion status

  ?  = Unknown
  -  = Shouldn't work
  x  = Does not compile
  c  = Compiles
  C  = Compiles and looks ok
  OK = Works perfectly

                      |  Tensor  |  Quadr. |
--------------------------------------------
Constant              |    C     |    OK   |
Elasticity            |    C     |    OK   |
EnergyNorm            |    x     |    OK   |
Equation              |    c     |    OK   |
FunctionOperators     |    c     |    OK*  |
Heat                  |    c     |    OK   |
Mass                  |    c     |    OK   |
MixedMixedElement     |    c     |    OK   |
MixedPoisson          |    c     |    OK   |
NavierStokes          |    c     |    OK   |
NeumannProblem        |    c     |    OK   |
Optimization          |    c     |    OK   |
P5tet                 |    c     |    OK   |
P5tri                 |    c     |    OK   |
PoissonDG             |    c     |    OK   |
PoissonSystem         |    c     |    OK   |
Poisson               |    C     |    OK   |
QuadratureElement     |    c     |    OK** |
Stokes                |    c     |    OK   |
SubDomains            |    c     |    OK   |
SubDomain             |    c     |    OK   |
TensorWeightedPoisson |    c     |    OK   |
VectorLaplaceGradCurl |    c     |    OK   |

Notes Quadr:
*  - Due to the difference in how tensor and quadrature applies function
     operators the norm when comparing two tensors is around 1.3e-1
** - Because the QuadratureElement in FFC specifies the number of points
     rather than the quadrature order, there is a difference when comparing
     FFC and UFL form files.
