This file lists TODO items for DOLFIN. As usual, the priority depends
on the current interests of the various DOLFIN developers.

To edit this file, it is convenient to install org-mode in Emacs.
It is available as part of Emacs 22 and can be invoked by M-x org-mode.
This gives convenient expand/collapse of bullets by pressing TAB.

* Parallelisation

** Expose only DofMap in DOLFIN (not ufc::dof_map)
** Reordering in DofMap
** Implement broadcast for Mesh (in MPIMeshCommunicator)
** Implement broadcast for MeshFunction (in MPIMeshCommunicator)
** Generalise Assembler for parallel assembly
   - Should be possible to do with minor changes
   - Add something similar to what is done now for assembling
     over subdomains:

     if (partition(*cell) != this_process)
       continue;

** Figure out what to do with Functions
** Parallelize necessary parts of Mesh
   - Store both global and local indices for cell/vertex, add mesh
     functions for this
   - IO: read/write mesh in parallel (each processor reads/writes only
     its own part), should be doable with small extension of
     MeshEditor and XMLMesh
   - Adapt BoundaryComputation for parallel mesh, use knowledge about
     which vertices are shared to decide if a facet is a global or
     local boundary
   - Use parallel mesh information in DofMap to simplify
     implementation - should only need map from local to global cell/vertex
   - Use parallel mesh information in ParMETIS partitioning implementation

* Manual

** Write incomplete sections
** Write appendix on coding style
** Document Python interface

* Assembly



* Linear Algebra

** Refine PETSc wrappers for parallel assembly and solve
** Finalize GenericFoo interfaces and merge linear algebra with PyCC
   - Assigned to: Martin, Garth, Anders

* Mesh

** Implement 1D meshes
** 1D and 2D cells in R^3
** Check coarsening
** Continue work on refinement
** Collect meshes on wiki

* Function

** Input/output for time-series
** Tensor-valued functions
** 'quadrature' function

* Input/Output

** Figure out what to do with i/o when running in parallel

* Solvers

** Create template for users to create solvers that use the DOLFIN library

* ODE solvers

** Solve dual and compute error estimate
** Automatic computation of stability factors as function of time T

* PDE solvers

** Improve NonlinearPDE
** Create TimeDependentPDE
   - Use ODE solvers

* Parameters

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

* Demos

** Add Python versions of all demos

** Working
   mesh/meshfunction
   mesh/partitioning
   mesh/refinement
   pde/convection-diffusion
   pde/dg
   pde/elasticity
   pde/functional
   pde/mixed-poisson
   pde/periodic
   pde/poisson
   pde/poisson1D
   pde/stokes/stabilized
   pde/stokes/taylor-hood
   plot
   quadrature

** Not working (in Python)
   fem
   la/eigensolver
   mesh/subdomains
   nls/nonlinearpoisson
   ode/aliev-panfilov
   pde/lift-drag
   pde/nonlinear-poisson

** Not added (in Python)
   ode/complex
   ode/stiff
   ode/courtemanche
   ode/homotopy/economy
   ode/homotopy/simple
   ode/harmonic
   ode/lorenz
   ode/method-weights
   nls/cahn-hilliard

* PyDOLFIN
** Fix memory leak warning for Array of Function*
** Needing to convert numpy.bool to bool in inside

* General

** Replace stdio with iostream and fstream
** Fix setprecision() for cout

