This list functions as a project plan for the development of DOLFIN.

It works as follows: Pick something from the list, notify one of the
maintainers that you're working on it. When a task is done, it will
be deleted from this list and moved to the ChangeLog.

Ideally, each task should be assigned to a developer, including an
estimate of when the task should be ready.

Send suggestions, comments, and corrections to dolfin@fenics.org.

Manual
------

* Fix incomplete sections
* Write section on coding style
* Put programmer's reference online again

Assembly
--------

* Use MatSetOption(A, MAT_ROWS_SORTED), MatSetOption(A, MAT_COLUMNS_SORTED)?
* Use MatSetOption(A, MAT_USE_HASH_TABLE)?
* Make two forms share the same map and only update the map
* Compute number of nonzeros before assembly
* Boundary conditions for other than linear elements
* Parallel assembly

Mesh
----

* Move to Sieve
* Speed up uniform mesh refinement
* Optimize mesh refinement
o [jj] Schema for mesh XML format
* Connectivity, automate computation of all 16 connections
* Geometry representation, including boundaries
* Mesh generation using triangle or tetgen?
* Clean up iterators?
* Seems to be something wrong with trimesh-32.xml.gz
* Compute normals of edges

Linear Algebra
--------------

* Cleanups and testing

Function
--------

* Input/output for time-series

Input/Output
------------

* Improve script dolfin-convert
* Save edges in MATLAB format

Solvers
-------

Multi-adaptive solver
---------------------

o [jj, logg] Is Newton working correctly for high-order methods?
o [jj, logg] Save solution for new solver
o [jj, logg] Save dual solution backwards
o [jj, logg] Error estimates
o [jj, logg] Automatic computation of stability factors as function of time T
o [jj, logg] Use two files for MATLAB format

Modules
-------

* Adaptivity

Parameters
----------

o Load default parameters from file
o Add function to display all parameters

General
-------

* Add benchmark again, add old benchmark results and put bench in src/bench/

* Write FAQ and put on web page:

  Q: When to use -DPETSC_USE_EXTERN_CXX?
  A: When calling PETSc from C (not recommended), recompile PETSc.

  Q: Parallel mesh?
  A: Waiting for Matt.

  Q: What does DOLFIN mean?
  A: Dynamic Object-oriented Library for FINite element computation.

  Q: Is it fast?
  A: Yes.

  Q: Can I help?
  A: Yes.

* New repository dolfin-contrib?
* Don't use cut in src/config script
* Replace unsigned int and int with uint when possible
* Replace Array and List with NewArray and NewList everywhere
* Replace stdio with iostream and fstream
* Fix setprecision() for cout
* Use symbolic links for meshes, see example src/demo/fem
* Collect diagnostic and error messages into one file? Translations?

Some suggestions for PETSc
--------------------------

Use namespaces, don't define macros like restrict which prevents
users of PETSc to declare functions with that name.

Dependencies
------------

* SciPy
* ParaView
* MayaVi
* PETSc
* FFC
* FIAT
* libxml2
* Hypre?
