Change log
==========

2019.2.0.dev0
-------------

- No changes yet.

2019.1.0 (2019-04-19)
---------------------

- Support for shape calculus operations, see file:
  ``python/test/unit/fem/test_coordinatederivative.py``
- Support for PETSc and SLEPc 3.10.
- Documented Python elastodynamics demo.
- Various bug fixes, e.g. memory leaks, build issues.
- Enhancements and additions to pybind11-based Python interface.

2018.1.0 (2018-06-14)
---------------------

- Remove python2 support.
- Remove SWIG (now use pybind11 for wrapping C++)
- Rename ``mpi_comm_world()`` to ``MPI.comm_world``.
- Removed ``from fenics import *``, use ``from dolfin import *``
- Rename ``ERROR``, ``CRITICAL`` etc. to ``LogLevel.ERROR``, ``LogLevel.CRITICAL``.

2017.2.0 (2017-12-05)
---------------------

- Remove ``UnitQuadMesh`` and ``UnitHexMesh``. Now use ``UnitSquareMesh`` and
  ``UnitCubeMesh`` with cell type qualifiers.
- Remove ``MeshEditor::open`` without cell type. Now you must explicitly
  specify CellType when opening a ``Mesh`` with ``MeshEditor``.
- Rename ``Mesh::size_global`` to ``Mesh::num_entities_global``.
- Remove ``Mesh::size``. Use ``Mesh::num_entities`` instead.
- Improved mesh topology computation performance.
- Remove excessive calls to MPI init. It may now be necessary in some
  cases to explicitly intialise MPI.
- Improvements to sparsity pattern computation.
- Addition of some interfaces using ``Eigen::Map/ref`` in addition to
  ``dolfin::Array(View)``.  ``dolfin::Array(View)``interfaces will be
  removed in favour of Eigen interfaces in the next release.
- Update pkg-config (dolfin.pc) file.
- CMake modernisations, with more use of exported targets.
- Add experimental pybind11 generated Python interface. Will replace
  the SWIG generated interface in the 2018.1 release.
- Remove redundant SLEPc interfaces. Fixes issue `#908
  <https://bitbucket.org/fenics-project/dolfin/issues/908>`_.
- Bump required Boost version to 1.55.
- Remove PETScUserPreconditioner (was unused and untested).
- Remove VTK plotting backend. Plotting is no longer available from
  the C++ interface. Basic plotting is available using ``matplotlib``
  and ``x3dom`` backends via the ``plot()`` free function in the
  Python interface. Users are advised to move to e.g.  Paraview for
  more demanding plotting needs.
- Updates for ``ufc::finite_element::evaluate_vertex_values``
  interface change.
- Add new methods ``XDMFFile::write_checkpoint``,
  ``XDMFFile::read_checkpoint`` to write and read (checkpoint)
  functions.
- Implement marking vertex and edge mesh functions by
  ``SubDomain::mark()`` using ``on_boundary`` flag.
- Fix quadratic scaling in PETSc matrix allocation with global dofs;
  assembly with ``Real`` space now exhibits linear scaling in number
  of dofs.
- Add assembly for quadrilateral and hexahedral meshes with CG and DG
  elements.
- Updates for some demos and tests to show usage of quadrilateral and
  hexahedral meshes.
- Deprecate ``CellSize`` (equivalent to ``2*Circumradius``)
  in favour of new ``CellDiameter``; add ``MinCellEdgeLength``
  and ``MaxCellEdgeLength``
- Deprecate subclassing of ``Expression`` in Python; new Python class
  ``UserExpression`` introduced for user overloads
- Deprecate ``VertexFunction``, ``EdgeFunction``, ``FaceFunction``,
  ``FacetFunction``, ``CellFunction``; use ``MeshFunction`` instead


2017.1.0 (2017-05-09)
---------------------

- Refactor PETScLUSolver to use functionality from
  PETScKrylovSolver. Simplify interface for solving transposed
  systems. Fixes #815.
- Switch default Python version to Python 3. Use
  `-DDOLFIN_USE_PYTHON3=off` to build with Python 2.
- Remove redundant ``solve_transpose`` functions (use solve with bool
  argument instead)
- Remove OpenMpAsssmebler
- Remove MPI communicator as argument in GenericVector::init functions
  (communicator should be passed via constructor)
- Remove ``Function::operator[+-*/]`` to prevent memory corruption problems
  (does not affect Python interface)
- Fix XDMF3 output of time series. The default output method is now to assume
  that all functions have different meshes, and that the meshes change from
  time step to time step. Two parameters control the output, one limits each
  function to only one mesh for the whole time series, turn off the default
  on parameter ``rewrite_function_mesh`` to enable this. You can also make
  all functions share the same mesh and time series, which currently is better
  supported in Paraview than the alternative, turn on ``functions_share_mesh``
  for this. These two parameters can also be combined in case all functions
  share the same mesh at all time steps. This creates minimal size files.
- Add ``PETScSNESSolver`` and ``PETScTAOSolver`` constructor accepting
  both communicator and type
- Expression("f[0]*f[1]", f=obj) notation now supported for non-scalar
  GenericFunction obj
- Expression("f", f=obj) notation now supports obj of MeshFunction types
  (only cell based)
- Fix MPI deadlock in case of instant compilation failure
- Allow using ``Timer`` as context manager and add ``timed`` decorator
  to measure timings of functions and methods
- Add ``NonlinearProblem::J_pc`` and support preconditioning matrix in
  ``NewtonSolver``, ``PETScSNESSolver`` and ``PETScTAOSolver``

2016.2.0 [2016-11-30]
---------------------

- Updates to XDMFFile interface, now fully supporting MeshFunction and
  MeshValueCollection with multiple named datasets in one file (useful for
  volume/boundary markers). Time series now only when a time is explicitly
  specified for each step. Full support for ASCII/XML XDMF.
- Improved X3DOM support
- Improved detection of UFC
- Add CMake option `-DDOLFIN_USE_PYTHON3` to create a Python 3 build
- Require CMake version 3.5 or higher
- Add pylit to generate demo doc from rst
- More careful checks of Dirichlet BC function spaces
- Change definition of FunctionSpace::component()
- Adaptive solving now works for tensor-valued unknowns
- Improve logging of PETSc errors; details logged at level TRACE


2016.1.0 [2016-06-23]
---------------------
- Remove support for 'uint'-valued MeshFunction (replaced by 'size_t')
- Major performance improvements and simplifications of the XDMF IO.
- Remove Zoltan graph partitioning interface
- Add new algorithm for computing mesh entiites. Typical speed-up of
  two with gcc and four with clang. Reduced memory usage for meshes
  with irregularly numbered cells.
- Remove STLMatrix, STLVector, MUMPSLUSolver and PastixLUSolver
  classes
- Remove PETScPreconditioner::set_near_nullspace and add
  PETScMatrix::set_near_nullspace
- Build system updates for VTK 7.0
- Remove XDMF from File interface. XDMF is XML based, and has many
  possibilities for file access, which are not accessible through the
  limited File interface and "<<" ">>" operators. Instead of File, use
  XDMFFile, and use XDMFFile.read() and XDMFFile.write() for
  I/O. Demos and tests have been updated to show usage.  XDMF now also
  supports ASCII I/O in serial, useful for compatibility with users
  who do not have the HDF5 library available.
- Require polynomial degree or finite element for Expressions in the
  Python interface (fixes Issue #355,
  https://bitbucket.org/fenics-project/dolfin/issues/355)
- Switch to Google Test framwork for C++ unit tests
- Fix bug when reading domain data from mesh file for a ghosted mesh
- Add interface for manipulating mesh geometry using (higher-order) FE
  functions: free functions set_coordinates, get_coordinates,
  create_mesh
- Fix bug when reading domain data from mesh file for a ghosted mesh.
- Remove reference versions of constructors for many classes that
  store a pointer/reference to the object passed to the
  constructor. This is an intrusive interface change for C++ users,
  but necessary to improve code maintainabilty and to improve memory
  safety. The Python interface is (virtually) unaffected.
- Remove class SubSpace. Using FunctionSpace::sub(...) instead
- Remove reference versions constructors of NonlinearVariationalSolver
- Remove setting of bounds from NonlinearVariationalSolver (was
  already available through NonlinearVariationalProblem)
- Update Trilinos support to include Amesos2, and better support from
  Python
- Rewrite interface of TensorLayout and SparsityPattern;
  local-to-global maps now handled using new IndexMap class;
  GenericSparsityPattern class removed
- Remove QT (was an optional dependency)
- PETScTAOSolver::solve() now returns a pair of number of iterations
  (std::size_t) and whether iteration converged (bool)
- Better quality refinement in 2D in Plaza algorithm, by choosing
  refinement pattern based on max/min edge ratio
- Removed refine_cell() method in CellTypes
- Enable marker refinement to work in parallel for 1D meshes too
- Add std::abort to Python exception hook to avoid parallel deadlocks
- Extend dof_to_vertex_map with unowned dofs, thus making
  dof_to_vertex_map an inverse of vertex_to_dof_map
- Clean-up in PyDOLFIN function space design, issue #576
- Deprecate MixedFunctionSpace and EnrichedFunctionSpace in favour of
  initialization by suitable UFL element
- Add experimental matplotlib-based plotting backend, see mplot demo
- Remove method argument of DirichletBC::get_boundary_values()
- Change return types of free functions adapt() to shared_ptr


1.6.0 [2015-07-28]
------------------
- Remove redundant pressure boundary condition in Stokes demos
- Require Point in RectangleMesh and BoxMesh constructors
- Remove BinaryFile (TimeSeries now requires HDF5)
- Add (highly experimental) support for Tpetra matrices and vectors
  from Trilinos, interfacing to Belos, Amesos2, IfPack2 and Muelu.
- Enable (highly experimental) support for Quadrilateral and
  Hexahedral meshes, including some I/O, but no assembly yet.
- Enable UMFPACK and CHOLMOD solvers with Eigen backend
- Add an MPI_Comm to logger, currently defaulted to MPI_COMM_WORLD
  allowing better control over output in parallel
- Experimental output of quadratic geometry in XDMF files, allows more
  exact visualisation of P2 Functions
- Remove GenericMatrix::compressed (see Issue #61)
- Deprecate and PETScKryloveSolver::set_nullspace() and add
  PETScMatrix::set_nullspace()
- Remove uBLAS backend
- Remove UmfpackLUSolver and CholmodSolver
- Add EigenMatrix/Vector::data()
- Remove GenericMatrix/Vector::data() and GenericMatrix/Vector::data()
  (to use backends that support data(), cast first to backend type,
  e.g.  A = A.as_backend_type()
- Remove cmake.local, replaced by fenics-install-component.sh
- Make interior facet integrals define - and + cells ordered by
  cell_domains value.
- Remove deprecated arguments *_domains from assemble() and Form().
- Change measure definition notation from dx[mesh_function] to
  dx(subdomain_data=mesh_function).
- Set locale to "C" before reading from file
- Change GenericDofMap::cell_dofs return type from const
  std::vector<..>& to ArrayView<const ..>
- Add ArrayView class for views into arrays
- Change fall back linear algebra backend to Eigen
- Add Eigen linear algebra backend
- Remove deprecated GenericDofMap::geometric_dim function (fixes Issue
  #443)
- Add quadrature rules for multimesh/cut-cell integration up to order
  6
- Implement MPI reductions and XML ouput of Table class
- list_timings() is now collective and returns MPI average across
  processes
- Add dump_timings_to_xml()
- Add enum TimingType { wall, user, system } for selecting wall-clock,
  user and system time in timing routines
- Bump required SWIG version to 3.0.3
- Increase default maximum iterations in NewtonSolver to 50.
- Deprecate Python free function homogenize(bc) in favour of member
  function DirichletBC::homogenize()


1.5.0 [2015-01-12]
------------------
- DG demos working in parallel
- Simplify re-use of LU factorisations
- CMake 3 compatibility
- Make underlying SLEPc object accessible
- Full support for linear algebra backends with 64-bit integers
- Add smoothed aggregation AMG elasticity demo
- Add support for slepc4py
- Some self-assignment fixes in mesh data structures
- Deprecated GenericDofMap::geometric_dimension()
- Experimental support for ghosted meshes (overlapping region in
  parallel)
- Significant memory reduction in dofmap storage
- Re-write dofmap construction with significant performance and
  scaling improvements in parallel
- Switch to local (process-wise) indexing for dof indices
- Support local (process-wise) indexing in linear algerbra backends
- Added support for PETSc 3.5, require version >= 3.3
- Exposed DofMap::tabulate_local_to_global_dofs,
  MeshEntity::sharing_processes in Python
- Added GenericDofmap::local_dimension("all"|"owned"|"unowned")
- Added access to SLEPc or slepc4py EPS object of SLEPcEigenSolver
  (requires slepc4py version >= 3.5.1)
- LinearOperator can now be accessed using petsc4py
- Add interface (PETScTAOSolver) for the PETSc nonlinear
  (bound-constrained) optimisation solver (TAO)
- Add GenericMatrix::nnz() function to return number of nonzero
  entries in matrix (fixes #110)
- Add smoothed aggregation algerbraic multigrid demo for elasticity
- Add argument 'function' to project, to store the result into a
  preallocated function
- Remove CGAL dependency and mesh generation, now provided by mshr
- Python 2.7 required
- Add experimental Python 3 support. Need swig version 3.0.3 or later
- Move to py.test, speed up unit tests and make tests more robust in
  parallel
- Repeated initialization of PETScMatrix is now an error
- MPI interface change: num_processes -> size, process_number -> rank
- Add optional argument project(..., function=f), to avoid superfluous
  allocation
- Remove excessive printing of points during extrapolation
- Clean up DG demos by dropping restrictions of Constants: c('+') -> c
- Fix systemassembler warning when a and L both provide the same
  subdomain data.
- Require mesh instead of cell argument to FacetArea, FacetNormal,
  CellSize, CellVolume, SpatialCoordinate, Circumradius,
  MinFacetEdgeLength, MaxFacetEdgeLength
- Remove argument reset_sparsity to assemble()
- Simplify assemble() and Form() signature: remove arguments mesh,
  coefficients, function_spaces, common_cell. These are now all found
  by inspecting the UFL form
- Speed up assembly of forms with multiple integrals depending on
  different functions, e.g. f*dx(1) + g*dx(2).
- Handle accessing of GenericVectors using numpy arrays in python
  layer instead of in hard-to-maintain C++ layer
- Add support for mpi groups in jit-compilation
- Make access to HDFAttributes more dict like
- Add 1st and 2nd order Rush Larsen schemes for the
  PointIntegralSolver
- Add vertex assembler for PointIntegrals
- Add support for assembly of custom_integral
- Add support for multimesh assembly, function spaces, dofmaps and
  functions
- Fix to Cell-Point collision detection to prevent Points inside the
  mesh from falling between Cells due to rounding errors
- Enable reordering of cells and vertices in parallel via SCOTCH and
  the Giibs-Poole-Stockmeyer algorithm
- Efficiency improvements in dof assignment in parallel, working on
  HPC up to 24000 cores
- Introduction of PlazaRefinement methods based on refinement of the
  Mesh skeleton, giving better quality refinement in 3D in parallel
- Basic support for 'ghost cells' allowing integration over interior
  facets in parallel


1.4.0 [2014-06-02]
------------------
- Feature: Add set_diagonal (with GenericVector) to GenericMatrix
- Fix many bugs associated with cell orientations on manifolds
- Force all global dofs to be ordered last and to be on the last
  process in parallel
- Speed up dof reordering of mixed space including global dofs by
  removing the latter from graph reordering
- Force all dofs on a shared facet to be owned by the same process
- Add FEniCS ('fenics') Python module, identical with DOLFIN Python
  module
- Add function Form::set_some_coefficients()
- Remove Boost.MPI dependency
- Change GenericMatrix::compresss to return a new matrix (7be3a29)
- Add function GenericTensor::empty()
- Deprecate resizing of linear algebra via the GenericFoo interfaces
  (fixes #213)
- Deprecate MPI::process_number() in favour of MPI::rank(MPI_Comm)
- Use PETSc built-in reference counting to manage lifetime of wrapped
  PETSc objects
- Remove random access function from MeshEntityIterator (fixes #178)
- Add support for VTK 6 (fixes #149)
- Use MPI communicator in interfaces. Permits the creation of
  distributed and local objects, e.g. Meshes.
- Reduce memory usage and increase speed of mesh topology computation


1.3.0 [2014-01-07]
------------------
- Feature: Enable assignment of sparse MeshValueCollections to
  MeshFunctions
- Feature: Add free function assign that is used for sub function
  assignment
- Feature: Add class FunctionAssigner that cache dofs for sub function
  assignment
- Fix runtime dependency on checking swig version
- Deprecate DofMap member methods vertex_to_dof_map and
  dof_to_vertex_map
- Add free functions: vertex_to_dof_map and dof_to_vertex_map, and
  correct the ordering of the map.
- Introduce CompiledSubDomain a more robust version of
  compiled_subdomains, which is now deprecated
- CMake now takes care of calling the correct generate-foo script if
  so needed.
- Feature: Add new built-in computational geometry library
  (BoundingBoxTree)
- Feature: Add support for setting name and label to an Expression
  when constructed
- Feature: Add support for passing a scalar GenericFunction as default
  value to a CompiledExpression
- Feature: Add support for distance queries for 3-D meshes
- Feature: Add PointIntegralSolver, which uses the MultiStageSchemes
  to solve local ODEs at Vertices
- Feature: Add RKSolver and MultiStageScheme for general time integral
  solvers
- Feature: Add support for assigning a Function with linear
  combinations of Functions, which lives in the same FunctionSpace
- Added Python wrapper for SystemAssembler
- Added a demo using compiled_extension_module with separate source
  files
- Fixes for NumPy 1.7
- Remove DOLFIN wrapper code (moved to FFC)
- Add set_options_prefix to PETScKrylovSolver
- Remove base class BoundarCondition
- Set block size for PETScMatrix when available from TensorLayout
- Add support to get block compressed format from STLMatrix
- Add detection of block structures in the dofmap for vector equations
- Expose PETSc GAMG parameters
- Modify SystemAssembler to support separate assembly of A and b


1.2.0 [2013-03-24]
------------------
- Fixes bug where child/parent hierarchy in Python were destroyed
- Add utility script dolfin-get-demos
- MeshFunctions in python now support iterable protocol
- Add timed VTK output for Mesh and MeshFunction in addtion to
  Functions
- Expose ufc::dofmap::tabulate_entity_dofs to GenericDofMap interface
- Expose ufc::dofmap::num_entity_dofs to GenericDofMap interface
- Allow setting of row dof coordinates in preconditioners (only works
  with PETSc backed for now)
- Expose more PETSc/ML parameters
- Improve speed to tabulating coordinates in some DofMap functions
- Feature: Add support for passing a Constant as default value to a
  CompiledExpression
- Fix bug in dimension check for 1-D ALE
- Remove some redundant graph code
- Improvements in speed of parallel dual graph builder
- Fix bug in XMDF output for cell-based Functions
- Fixes for latest version of clang compiler
- LocalSolver class added to efficiently solve cell-wise problems
- New implementation of periodic boundary conditions. Now incorporated
  into the dofmap
- Optional arguments to assemblers removed
- SymmetricAssembler removed
- Domains for assemblers can now only be attached to forms
- SubMesh can now be constructed without a CellFunction argument, if
  the MeshDomain contains marked celldomains.
- MeshDomains are propagated to a SubMesh during construction
- Simplify generation of a MeshFunction from MeshDomains: No need to
  call mesh_function with mesh
- Rename dolfin-config.cmake to DOLFINConfig.cmake
- Use CMake to configure JIT compilation of extension modules
- Feature: Add vertex_to_dof_map to DofMap, which map vertex indices
  to dolfin dofs
- Feature: Add support for solving on m dimensional meshes embedded in
  n >= m dimensions


1.1.0 [2013-01-08]
------------------
- Add support for solving singular problems with Krylov solvers (PETSc
  only)
- Add new typedef dolfin::la_index for consistent indexing with linear
  algebra backends.
- Change default unsigned integer type to std::size_t
- Add support to attaching operator null space to preconditioner
  (required for smoothed aggregation AMG)
- Add basic interface to the PETSc AMG preconditioner
- Make SCOTCH default graph partitioner (GNU-compatible free license,
  unlike ParMETIS)
- Add scalable construction of mesh dual graph for mesh partitioning
- Improve performance of mesh building in parallel
- Add mesh output to SVG
- Add support for Facet and cell markers to mesh converted from
  Diffpack
- Add support for Facet and cell markers/attributes to mesh converted
  from Triangle
- Change interface for auto-adaptive solvers: these now take the goal
  functional as a constructor argument
- Add memory usage monitor: monitor_memory_usage()
- Compare mesh hash in interpolate_vertex_values
- Add hash() for Mesh and MeshTopology
- Expose GenericVector::operator{+=,-=,+,-}(double) to Python
- Add function Function::compute_vertex_values not needing a mesh
  argument
- Add support for XDMF and HDF5
- Add new interface LinearOperator for matrix-free linear systems
- Remove MTL4 linear algebra backend
- Rename down_cast --> as_type in C++ / as_backend_type in Python
- Remove KrylovMatrix interface
- Remove quadrature classes
- JIT compiled C++ code can now include a dolfin namespace
- Expression string parsing now understand C++ namespace such as
  std::cosh
- Fix bug in Expression so one can pass min, max
- Fix bug in SystemAssembler, where mesh.init(D-1, D) was not called
  before assemble
- Fix bug where the reference count of Py_None was not increased
- Fix bug in reading TimeSeries of size smaller than 3
- Improve code design for Mesh FooIterators to avoid dubious down cast
- Bug fix in destruction of PETSc user preconditioners
- Add CellVolume(mesh) convenience wrapper to Python interface for UFL
  function
- Fix bug in producing outward pointing normals of BoundaryMesh
- Fix bug introduced by SWIG 2.0.5, where typemaps of templated
  typedefs are not handled correctly
- Fix bug introduced by SWIG 2.0.5, which treated uint as Python long
- Add check that sample points for TimeSeries are monotone
- Fix handling of parameter "report" in Krylov solvers
- Add new linear algebra backend "PETScCusp" for GPU-accelerated
  linear algebra
- Add sparray method in the Python interface of GenericMatrix,
  requires scipy.sparse
- Make methods that return a view of contiguous c-arrays, via a NumPy
  array, keep a reference from the object so it wont get out of scope
- Add parameter: "use_petsc_signal_handler", which enables/disable
  PETSc system signals
- Avoid unnecessary resize of result vector for A*b
- MPI functionality for distributing values between neighbours
- SystemAssembler now works in parallel with topological/geometric
  boundary search
- New symmetric assembler with ability for stand-alone RHS assemble
- Major speed-up of DirichletBC computation and mesh marking
- Major speed-up of assembly of functions and expressions
- Major speed-up of mesh topology computation
- Add simple 2D and 3D mesh generation (via CGAL)
- Add creation of mesh from triangulations of points (via CGAL)
- Split the SWIG interface into six combined modules instead of one
- Add has_foo to easy check what solver and preconditioners are
  available
- Add convenience functions for listing available
  linear_algebra_backends
- Change naming convention for cpp unit tests test.cpp -> Foo.cpp
- Added cpp unit test for GenericVector::operator{-,+,*,/}= for all la
  backends
- Add functionality for rotating meshes
- Add mesh generation based on NETGEN constructive solid geometry
- Generalize SparsityPattern and STLMatrix to support column-wise
  storage
- Add interfaces to wrap PaStiX and MUMPS direct solvers
- Add CoordinateMatrix class
- Make STLMatrix work in parallel
- Remove all tr1::tuple and use boost::tuple
- Fix wrong link in Python quick reference.


1.0.0 [2011-12-07]
------------------
- Change return value of IntervalCell::facet_area() 0.0 --> 1.0.
- Recompile all forms with FFC 1.0.0
- Fix for CGAL 3.9 on OS X
- Improve docstrings for Box and Rectangle
- Check number of dofs on local patch in extrapolation


1.0-rc2 [2011-11-28]
--------------------
- Fix bug in 1D mesh refinement
- Fix bug in handling of subdirectories for TimeSeries
- Fix logic behind vector assignment, especially in parallel


1.0-rc1 [2011-11-21]
--------------------
- 33 bugs fixed
- Implement traversal of bounding box trees for all codimensions
- Edit and improve all error messages
- Added [un]equality operator to FunctionSpace
- Remove batch compilation of Expression (Expressions) from Python
  interface
- Added get_value to MeshValueCollection
- Added assignment operator to MeshValueCollection


1.0-beta2 [2011-10-26]
----------------------
- Change search path of parameter file to
  ~/.fenics/dolfin_parameters.xml
- Add functions Parameters::has_parameter,
  Parameters::has_parameter_set
- Added option to store all connectivities in a mesh for TimeSeries
  (false by default)
- Added option for gzip compressed binary files for TimeSeries
- Propagate global parameters to Krylov and LU solvers
- Fix OpenMp assemble of scalars
- Make OpenMP assemble over sub domains work
- DirichletBC.get_boundary_values, FunctionSpace.collapse now return a
  dict in Python
- Changed name of has_la_backend to has_linear_algebra_backend
- Added has_foo functions which can be used instead of the HAS_FOO
  defines
- Less trict check on kwargs for compiled Expression
- Add option to not right-justify tables
- Rename summary --> list_timings
- Add function list_linear_solver_methods
- Add function list_lu_solver_methods
- Add function list_krylov_solver_methods
- Add function list_krylov_solver_preconditioners
- Support subdomains in SystemAssembler (not for interior facet
  integrals)
- Add option functionality apply("flush") to PETScMatrix
- Add option finalize_tensor=true to assemble functions
- Solver parameters can now be passed to solve
- Remove deprecated function Variable::disp()
- Remove deprecated function logging()
- Add new class MeshValueCollection
- Add new class MeshDomains replacing old storage of boundary markers
  as part of MeshData. The following names are no longer supported:
  - boundary_facet_cells
  - boundary_facet_numbers
  - boundary_indicators
  - material_indicators
  - cell_domains
  - interior_facet_domains
  - exterior_facet_domains
- Rename XML tag <meshfunction> --> <mesh_function>
- Rename SubMesh data "global_vertex_indices" -->
  "parent_vertex_indices"
- Get XML input/output of boundary markers working again
- Get FacetArea working again


1.0-beta [2011-08-11]
---------------------
- Print percentage of non-zero entries when computing sparsity
  patterns
- Use ufl.Real for Constant in Python interface
- Add Dirichlet boundary condition argument to Python project function
- Add remove functionality for parameter sets
- Added out typemap for vector of shared_ptr objects
- Fix typemap bug for list of shared_ptr objects
- Support parallel XML vector io
- Add support for gzipped XML output
- Use pugixml for XML output
- Move XML SAX parser to libxml2 SAX2 interface
- Simplify XML io
- Change interface for variational problems, class VariationalProblem
  removed
- Add solve interface: solve(a == L), solve(F == 0)
- Add new classes Linear/NonlinearVariationalProblem
- Add new classes Linear/NonlinearVariationalSolver
- Ad form class aliases ResidualForm and Jacobian form in wrapper code
- Default argument to variables in Expression are passed as kwargs in
  the Python interface
- Add has_openmp as utility function in Python interface
- Add improved error reporting using dolfin_error
- Use Boost to compute Legendre polynolials
- Remove ode code
- Handle parsing of unrecognized command-line parameters
- All const std::vector<foo>& now return a read-only NumPy array
- Make a robust macro for generating a NumPy array from data
- Exposing low level fem functionality to Python, by adding a Cell ->
  ufc::cell typemap
- Added ufl_cell as a method to Mesh in Python interface
- Fix memory leak in Zoltan interface
- Remove some 'new' for arrays in favour of std::vector
- Added cell as an optional argument to Constant
- Prevent the use of non contiguous NumPy arrays for most typemaps
- Point can now be used to evaluate a Function or Expression in Python
- Fixed dimension check for Function and Expression eval in Python
- Fix compressed VTK output for tensors in 2D


0.9.11 [2011-05-16]
-------------------
- Change license from LGPL v2.1 to LGPL v3 or later
- Moved meshconverter to dolfin_utils
- Add support for conversion of material markers for Gmsh meshes
- Add support for point sources (class PointSource)
- Rename logging --> set_log_active
- Add parameter "clear_on_write" to TimeSeries
- Add support for input/output of nested parameter sets
- Check for dimensions in linear solvers
- Add support for automated error control for variational problems
- Add support for refinement of MeshFunctions after mesh refinement
- Change order of test and trial spaces in Form constructors
- Make SWIG version >= 2.0 a requirement
- Recognize subdomain data in Assembler from both Form and Mesh
- Add storage for subdomains (cell_domains etc) in Form class
- Rename MeshData "boundary facet cells" --> "boundary_facet_cells"
- Rename MeshData "boundary facet numbers" -->
  "boundary_facet_numbers"
- Rename MeshData "boundary indicators" --> "boundary_indicators"
- Rename MeshData "exterior facet domains" -->
  "exterior_facet_domains"
- Updates for UFC 2.0.1
- Add FiniteElement::evaluate_basis_derivatives_all
- Add support for VTK output of facet-based MeshFunctions
- Change default log level from PROGRESS to INFO
- Add copy functions to FiniteElement and DofMap
- Simplify DofMap
- Interpolate vector values when reading from time series


0.9.10 [2011-02-23]
-------------------
- Updates for UFC 2.0.0
- Handle TimeSeries stored backward in time (automatic reversal)
- Automatic storage of hierarchy during refinement
- Remove directory/library 'main', merged into 'common'
- dolfin_init --> init, dolfin_set_precision --> set_precision
- Remove need for mesh argument to functional assembly when possible
- Add function set_output_stream
- Add operator () for evaluation at points for Function/Expression in
  C++
- Add abs() to GenericVector interface
- Fix bug for local refinement of manifolds
- Interface change: VariationalProblem now takes: a, L or F, (dF)
- Map linear algebra objects to processes consistently with mesh
  partition
- Lots of improvemenst to parallel assembly, dof maps and linear
  algebra
- Add lists supported_elements and supported_elements_for_plotting in
  Python
- Add script dolfin-plot for plotting meshes and elements from the
  command-line
- Add support for plotting elements from Python
- Add experimental OpenMP assembler
- Thread-safe fixed in Function class
- Make GenericFunction::eval thread-safe (Data class removed)
- Optimize and speedup topology computation (mesh.init())
- Add function Mesh::clean() for cleaning out auxilliary topology data
- Improve speed and accuracy of timers
- Fix bug in 3D uniform mesh refinement
- Add built-in meshes UnitTriangle and UnitTetrahedron
- Only create output directories when they don't exist
- Make it impossible to set the linear algebra backend to something
  illegal
- Overload value_shape instead of dim for userdefined Python
  Expressions
- Permit unset parameters
- Search only for BLAS library (not cblas.h)


0.9.9 [2010-09-01]
------------------
- Change build system to CMake
- Add named MeshFunctions: VertexFunction, EdgeFunction, FaceFunction,
  FacetFunction, CellFunction
- Allow setting constant boundary conditions directly without using
  Constant
- Allow setting boundary conditions based on string ("x[0] == 0.0")
- Create missing directories if specified as part of file names
- Allow re-use of preconditioners for most backends
- Fixes for UMFPACK solver on some 32 bit machines
- Provide access to more Hypre preconditioners via PETSc
- Updates for SLEPc 3.1
- Improve and implement re-use of LU factorizations for all backends
- Fix bug in refinement of MeshFunctions


0.9.8 [2010-07-01]
------------------
- Optimize and improve StabilityAnalysis.
- Use own implementation of binary search in ODESolution (takes
  advantage of previous values as initial guess)
- Improve reading ODESolution spanning multiple files
- Dramatic speedup of progress bar (and algorithms using it)
- Fix bug in writing meshes embedded higher dimensions to M-files
- Zero vector in uBLASVector::resize() to fix spurious bug in Krylov
  solver
- Handle named fields (u.rename()) in VTK output
- Bug fix in computation of FacetArea for tetrahedrons
- Add support for direct plotting of Dirichlet boundary conditions:
  plot(bc)
- Updates for PETSc 3.1
- Add relaxation parameter to NewtonSolver
- Implement collapse of renumbered dof maps (serial and parallel)
- Simplification of DofMapBuilder for parallel dof maps
- Improve and simplify DofMap
- Add Armadillo dependency for dense linear algebra
- Remove LAPACKFoo wrappers
- Add abstract base class GenericDofMap
- Zero small values in VTK output to avoid VTK crashes
- Handle MeshFunction/markers in homogenize bc
- Make preconditioner selectable in VariationalProblem (new parameter)
- Read/write meshes in binary format
- Add parameter "use_ident" in DirichletBC
- Issue error by default when solvers don't converge (parameter
  "error_on_convergence")
- Add option to print matrix/vector for a VariationalProblem
- Trilinos backend now works in parallel
- Remove Mesh refine members functions. Use free refine(...) functions
  instead
- Remove AdapativeObjects
- Add Stokes demo using the MINI element
- Interface change: operator+ now used to denote enriched function
  spaces
- Interface change: operator+ --> operator* for mixed elements
- Add option 'allow_extrapolation' useful when interpolating to
  refined meshes
- Add SpatialCoordinates demo
- Add functionality for accessing time series sample times:
  vector_times(), mesh_times()
- Add functionality for snapping mesh to curved boundaries during
  refinement
- Add functionality for smoothing the boundary of a mesh
- Speedup assembly over exterior facets by not using BoundaryMesh
- Mesh refinement improvements, remove unecessary copying in Python
  interface
- Clean PETSc and Epetra Krylov solvers
- Add separate preconditioner classes for PETSc and Epetra solvers
- Add function ident_zeros for inserting one on diagonal for zero rows
- Add LU support for Trilinos interface


0.9.7 [2010-02-17]
------------------
- Add support for specifying facet orientation in assembly over
  interior facets
- Allow user to choose which LU package PETScLUSolver uses
- Add computation of intersection between arbitrary mesh entities
- Random access to MeshEntitiyIterators
- Modify SWIG flags to prevent leak when using SWIG director feature
- Fix memory leak in std::vector<Foo*> typemaps
- Add interface for SCOTCH for parallel mesh partitioning
- Bug fix in SubDomain::mark, fixes bug in DirichletBC based on
  SubDomain::inside
- Improvements in time series class, recognizing old stored values
- Add FacetCell class useful in algorithms iterating over boundary
  facets
- Rename reconstruct --> extrapolate
- Remove GTS dependency


0.9.6 [2010-02-03]
------------------
- Simplify access to form compiler parameters, now integrated with
  global parameters
- Add DofMap member function to return set of dofs
- Fix memory leak in the LA interface
- Do not import cos, sin, exp from NumPy to avoid clash with UFL
  functions
- Fix bug in MTL4Vector assignment
- Remove sandbox (moved to separate repository)
- Remove matrix factory (dolfin/mf)
- Update .ufl files for changes in UFL
- Added swig/import/foo.i for easy type importing from dolfin modules
- Allow optional argument cell when creating Expression
- Change name of Expression argument cpparg --> cppcode
- Add simple constructor (dim0, dim1) for C++ matrix Expressions
- Add example demonstrating the use of cpparg (C++ code in Python)
- Add least squares solver for dense systems (wrapper for DGELS)
- New linear algebra wrappers for LAPACK matrices and vectors
- Experimental support for reconstruction of higher order functions
- Modified interface for eval() and inside() in C++ using Array
- Introduce new Array class for simplified wrapping of arrays in SWIG
- Improved functionality for intersection detection
- Re-implementation of intersection detection using CGAL


0.9.5 [2009-12-03]
------------------
- Set appropriate parameters for symmetric eigenvalue problems with
  SLEPc
- Fix for performance regression in recent uBLAS releases
- Simplify Expression interface: f = Expression("sin(x[0])")
- Simplify Constant interface: c = Constant(1.0)
- Fix bug in periodic boundary conditions
- Add simple script dolfin-tetgen for generating DOLFIN XML meshes
  from STL
- Make XML parser append/overwrite parameter set when reading
  parameters from file
- Refinement of function spaces and automatic interpolation of member
  functions
- Allow setting global parameters for Krylov solver
- Fix handling of Constants in Python interface to avoid repeated JIT
  compilation
- Allow simple specification of subdomains in Python without needing
  to subclass SubDomain
- Add function homogenize() for simple creation of homogeneous BCs
  from given BCs
- Add copy constructor and possibility to change value for DirichletBC
- Add simple wrapper for ufl.cell.n. FacetNormal(mesh) now works again
  in Python.
- Support apply(A), apply(b) and apply(b, x) in PeriodicBC
- Enable setting spectral transformation for SLEPc eigenvalue solver

0.9.4 [2009-10-12]
------------------
- Remove set, get and operator() methods from MeshFunction
- Added const and none const T &operator[uint/MeshEntity] to
  MeshFunction
- More clean up in SWIG interface files, remove global renames and
  ignores
- Update Python interface to Expression, with extended tests for value
  ranks
- Removed DiscreteFunction class
- Require value_shape and geometric_dimension in Expression
- Introduce new class Expression replacing user-defined Functions
- interpolate_vertex_values --> compute_vertex_values
- std::map<std::string, Coefficient> replaces generated CoefficientSet
  code
- Cleanup logic in Function class as a result of new Expression class
- Introduce new Coefficient base class for form coefficients
- Replace CellSize::min,max by Mesh::hmin,hmax
- Use MUMPS instead of UMFPACK as default direct solver in both serial
  and parallel
- Fix bug in SystemAssembler
- Remove support for PETSc 2.3 and support PETSc 3.0.0 only
- Remove FacetNormal Function. Use UFL facet normal instead.
- Add update() function to FunctionSpace and DofMap for use in
  adaptive mesh refinement
- Require mesh in constructor of functionals (C++) or argument to
  assemble (Python)


0.9.3 [2009-09-25]
------------------
- Add global parameter "ffc_representation" for form representation in
  FFC JIT compiler
- Make norm() function handle both vectors and functions in Python
- Speedup periodic boundary conditions and make work for mixed
  (vector-valued) elements
- Add possibilities to use any number numpy array when assigning
  matrices and vectors
- Add possibilities to use any integer numpy array for indices in
  matrices and vectors
- Fix for int typemaps in PyDOLFIN
- Split mult into mult and transpmult
- Filter out PETSc argument when parsing command-line parameters
- Extend comments to SWIG interface files
- Add copyright statements to SWIG interface files (not finished yet)
- Add typemaps for misc std::vector<types> in PyDOLFIN
- Remove dependencies on std_vector.i reducing SWIG wrapper code size
- Use relative %includes in dolfin.i
- Changed names on SWIG interface files dolfin_foo.i -> foo.i
- Add function interpolate() in Python interface
- Fix typmaps for uint in python 2.6
- Use TypeError instead of ValueError in typechecks in typmaps.i
- Add in/out shared_ptr<Epetra_FEFoo> typemaps for PyDOLFIN
- Fix JIT compiling in parallel
- Add a compile_extension_module function in PyDOLFIN
- Fix bug in Python vector assignment
- Add support for compressed base64 encoded VTK files (using zlib)
- Add support for base64 encoded VTK files
- Experimental support for parallel assembly and solve
- Bug fix in project() function, update to UFL syntax
- Remove disp() functions and replace by info(foo, true)
- Add fem unit test (Python)
- Clean up SystemAssembler
- Enable assemble_system through PyDOLFIN
- Add 'norm' to GenericMatrix
- Efficiency improvements in NewtonSolver
- Rename NewtonSolver::get_iteration() to NewtonSolver::iteration()
- Improvements to EpetraKrylovSolver::solve
- Add constructor Vector::Vector(const GenericVector& x)
- Remove SCons deprecation warnings
- Memory leak fix in PETScKrylovSolver
- Rename dolfin_assert -> assert and use C++ version
- Fix debug/optimise flags
- Remove AvgMeshSize, InvMeshSize, InvFacetArea from SpecialFunctions
- Rename MeshSize -> CellSize
- Rewrite parameter system with improved support for command-line
  parsing, localization of parameters (per class) and usability from
  Python
- Remove OutflowFacet from SpecialFunctions
- Rename interpolate(double*) --> interpolate_vertex_values(double*)
- Add Python version of Cahn-Hilliard demo
- Fix bug in assemble.py
- Permit interpolation of functions between non-matching meshes
- Remove Function::Function(std::string filename)
- Transition to new XML io
- Remove GenericSparsityPattern::sort
- Require sorted/unsorted parameter in SparsityPattern constructor
- Improve performance of SparsityPattern::insert
- Replace enums with strings for linear algebra and built-in meshes
- Allow direct access to Constant value
- Initialize entities in MeshEntity constructor automatically and
  check range
- Add unit tests to the memorycheck
- Add call to clean up libxml2 parser at exit
- Remove unecessary arguments in DofMap member functions
- Remove reference constructors from DofMap, FiniteElement and
  FunctionSpace
- Use a shared_ptr to store the mesh in DofMap objects
- Interface change for wrapper code: PoissonBilinearForm -->
  Poisson::BilinearForm
- Add function info_underline() for writing underlined messages
- Rename message() --> info() for "compatibility" with Python logging
  module
- Add elementwise multiplication in GeneriVector interface
- GenericVector interface in PyDOLFIN now support the sequence
  protocol
- Rename of camelCaps functions names: fooBar --> foo_bar Note:
  mesh.numVertices() --> mesh.num_vertices(), mesh.numCells() -->
  mesh.num_cells()
- Add slicing capabilities for GenericMatrix interface in PyDOLFIN
  (only getitem)
- Add slicing capabilities for GenericVector interface in PyDOLFIN
- Add sum to GenericVector interface


0.9.2 [2009-04-07]
------------------
- Enable setting parameters for Newton solver in VariationalProblem
- Simplified and improved implementation of C++ plotting, calling
  Viper on command-line
- Remove precompiled elements and projections
- Automatically interpolate user-defined functions on assignment
- Add new built-in function MeshCoordinates, useful in ALE simulations
- Add new constructor to Function class, Function(V, "vector.xml")
- Remove class Array (using std::vector instead)
- Add vector_mapping data to MeshData
- Use std::vector instead of Array in MeshData
- Add assignment operator and copy constructor for MeshFunction
- Add function mesh.move(other_mesh) for moving mesh according to
  matching mesh (for FSI)
- Add function mesh.move(u) for moving mesh according to displacement
  function (for FSI)
- Add macro dolfin_not_implemented()
- Add new interpolate() function for interpolation of user-defined
  function to discrete
- Make _function_space protected in Function
- Added access to crs data from python for uBLAS and MTL4 backend


0.9.1 [2009-02-17]
------------------
- Check Rectangle and Box for non-zero dimensions
- ODE solvers now solve the dual problem
- New class SubMesh for simple extraction of matching meshes for sub
  domains
- Improvements of multiprecision ODE solver
- Fix Function class copy constructor
- Bug fixes for errornorm(), updates for new interface
- Interface update for MeshData: createMeshFunction -->
  create_mesh_function etc
- Interface update for Rectangle and Box
- Add elastodynamics demo
- Fix memory leak in IntersectionDetector/GTSInterface
- Add check for swig version, in jit and compile functions
- Bug fix in dolfin-order script for gzipped files
- Make shared_ptr work across C++/Python interface
- Replace std::tr1::shared_ptr with boost::shared_ptr
- Bug fix in transfinite mean-value interpolation
- Less annoying progress bar (silent when progress is fast)
- Fix assignment operator for MeshData
- Improved adaptive mesh refinement (recursive Rivara) producing
  better quality meshes

0.9.0 [2009-01-05]
------------------
- Cross-platform fixes
- PETScMatrix::copy fix
- Some Trilinos fixes
- Improvements in MeshData class
- Do not use initial guess in Newton solver
- Change OutflowFacet to IsOutflowFacet and change syntax
- Used shared_ptr for underling linear algebra objects
- Cache subspaces in FunctionSpace
- Improved plotting, now support plot(grad(u)), plot(div(u)) etc
- Simple handling of JIT-compiled functions
- Sign change (bug fix) in increment for Newton solver
- New class VariationalProblem replacing LinearPDE and NonlinearPDE
- Parallel parsing and partitioning of meshes (experimental)
- Add script dolfin-order for ordering mesh files
- Add new class SubSpace (replacing SubSystem)
- Add new class FunctionSpace
- Complete redesign of Function class hierarchy, now a single Function
  class
- Increased use of shared_ptr in Function, FunctionSpace, etc
- New interface for boundary conditions, form not necessary
- Allow simple setting of coefficient functions based on names (not
  their index)
- Don't order mesh automatically, meshes must now be ordered
  explicitly
- Simpler definition of user-defined functions (constructors not
  necessary)
- Make mesh iterators const to allow for const-correct Mesh code


0.8.1 [2008-10-20]
------------------
- Add option to use ML multigrid preconditioner through PETSc
- Interface change for ODE solvers: uBLASVector --> double*
- Remove homotopy solver
- Remove typedef real, now using plain double instead
- Add various operators -=, += to GenericMatrix
- Don't use -Werror when compiling SWIG generated code
- Remove init(n) and init(m, n) from GenericVector/Matrix. Use resize
  and zero instead
- Add new function is_combatible() for checking compatibility of
  boundary conditions
- Use x as initial guess in Krylov solvers (PETSc, uBLAS, ITL)
- Add new function errornorm()
- Add harmonic ALE mesh smoothing
- Refinements of Graph class
- Add CholmodCholeskySlover (direct solver for symmetric matrices)
- Implement application of Dirichlet boundary conditions within
  assembly loop
- Improve efficiency of SparsityPattern
- Allow a variable number of smoothings
- Add class Table for pretty-printing of tables
- Add experimental MTL4 linear algebra backend
- Add OutflowFacet to SpecialFunctions for DG transport problems
- Remove unmaintained OpenDX file format
- Fix problem with mesh smoothing near nonconvex corners
- Simple projection of functions in Python
- Add file format: XYZ for use with Xd3d
- Add built-in meshes: UnitCircle, Box, Rectangle, UnitSphere


0.8.0 [2008-06-23]
------------------
- Fix input of matrix data from XML
- Add function normalize()
- Integration with VMTK for reading DOLFIN XML meshes produced by VMTK
- Extend mesh XML format to handle boundary indicators
- Add support for attaching arbitrarily named data to meshes
- Add support for dynamically choosing the linear algebra backend
- Add Epetra/Trilinos linear solvers
- Add setrow() to matrix interface
- Add new solver SingularSolver for solving singular (pressure)
  systems
- Add MeshSize::min(), max() for easy computation of smallest/largest
  mesh size
- LinearSolver now handles all backends and linear solvers
- Add access to normal in Function, useful for inflow boundary
  conditions
- Remove GMRES and LU classes, use solve() instead
- Improve solve() function, now handles both LU and Krylov +
  preconditioners
- Add ALE mesh interpolation (moving mesh according to new boundary
  coordinates)


0.7.3 [2008-04-30]
------------------
- Add support for Epetra/Trilinos
- Bug fix for order of values in interpolate_vertex_values, now
  according to UFC
- Boundary meshes are now always oriented with respect to outward
  facet normals
- Improved linear algebra, both in C++ and Python
- Make periodic boundary conditions work in Python
- Fix saving of user-defined functions
- Improve plotting
- Simple computation of various norms of functions from Python
- Evaluation of Functions at arbitrary points in a mesh
- Fix bug in assembling over exterior facets (subdomains were ignored)
- Make progress bar less annoying
- New scons-based build system replaces autotools
- Fix bug when choosing iterative solver from Python


0.7.2 [2008-02-18]
------------------
- Improve sparsity pattern generator efficiency
- Dimension-independent sparsity pattern generator
- Add support for setting strong boundary values for DG elements
- Add option setting boundary conditions based on geometrical search
- Check UMFPACK return argument for warnings/errors
- Simplify setting simple Dirichlet boundary conditions
- Much improved integration with FFC in PyDOLFIN
- Caching of forms by JIT compiler now works
- Updates for UFC 1.1
- Catch exceptions in PyDOLFIN
- Work on linear algebra interfaces GenericTensor/Matrix/Vector
- Add linear algebra factory (backend) interface
- Add support for 1D meshes
- Make Assembler independent of linear algebra backend
- Add manager for handling sub systems (PETSc and MPI)
- Add parallel broadcast of Mesh and MeshFunction
- Add experimental support for parallel assembly
- Use PETSc MPI matrices when running in parallel
- Add predefined functions FacetNormal and AvgMeshSize
- Add left/right/crisscross options for UnitSquare
- Add more Python demos
- Add support for Exodus II format in dolfin-convert
- Autogenerate docstrings for PyDOLFIN
- Various small bug fixes and improvements


0.7.1 [2007-08-31]
------------------
- Integrate FFC form language into PyDOLFIN
- Just-in-time (JIT) compilation of variational forms
- Conversion from from Diffpack grid format to DOLFIN XML
- Name change: BoundaryCondition --> DirichletBC
- Add support for periodic boundary conditions: class PeriodicBC
- Redesign default linear algebra interface (Matrix, Vector,
  KrylovSolver, etc)
- Add function to return Vector associated with a DiscreteFunction


0.7.0-1 [2007-06-22]
--------------------
- Recompile all forms with latest FFC release
- Remove typedefs SparseMatrix and SparseVector
- Fix includes in LinearPDE
- Rename DofMaps -> DofMapSet


0.7.0 [2007-06-20]
------------------
- Move to UFC interface for code generation
- Major rewrite, restructure, cleanup
- Add support for Brezzi-Douglas-Marini (BDM) elements
- Add support for Raviart-Thomas (RT) elements
- Add support for Discontinuous Galerkin (DG) methods
- Add support for mesh partitioning (through SCOTCH)
- Handle both UMFPACK and UFSPARSE
- Local mesh refinement
- Mesh smoothing
- Built-in plotting (through Viper)
- Cleanup log system
- Numerous fixes for mesh, in particular MeshFunction
- Much improved Python bindings for mesh
- Fix Python interface for vertex and cell maps in boundary
  computation


0.6.4 [2006-12-01]
------------------
- Switch from Python Numeric to Python NumPy
- Improved mesh Python bindings
- Add input/output support for MeshFunction
- Change Mesh::vertices() --> Mesh::coordinates()
- Fix bug in output of mesh to MATLAB format
- Add plasticty module (experimental)
- Fix configure test for Python dev (patch from Åsmund Ødegård)
- Add mesh benchmark
- Fix memory leak in mesh (data not deleted correctly in MeshTopology)
- Fix detection of curses libraries
- Remove Tecplot output format


0.6.3 [2006-10-27]
------------------
- Move to new mesh library
- Remove dolfin-config and move to pkg-config
- Remove unused classes PArray, PList, Table, Tensor
- Visualization of 2D solutions in OpenDX is now supported (3D
  supported before)
- Add support for evaluation of functionals
- Fix bug in Vector::sum() for uBLAS vectors


0.6.2-1 [2006-09-06]
--------------------
- Fix compilation error when using --enable-petsc
  (dolfin::uBLASVector::PETScVector undefined)


0.6.2 [2006-09-05]
------------------
- Finish chapter in manual on linear algebra
- Enable PyDOLFIN by default, use --disable-pydolfin to disable
- Disable PETSc by default, use --enable-petsc to enable
- Modify ODE solver interface for u0() and f()
- Add class ConvectionMatrix
- Readd classes LoadVector, MassMatrix, StiffnessMatrix
- Add matrix factory for simple creation of standard finite element
  matrices
- Collect static solvers in LU and GMRES
- Bug fixes for Python interface PyDOLFIN
- Enable use of direct solver for ODE solver (experimental)
- Remove demo bistable
- Restructure and cleanup linear algebra
- Use UMFPACK for LU solver with uBLAS matrix types
- Add templated wrapper class for different uBLAS matrix types
- Add ILU preconditioning for uBLAS matrices
- Add Krylov solver for uBLAS sparse matrices (GMRES and BICGSTAB)
- Add first version of new mesh library (NewMesh, experimental)
- Add Parametrized::readParameters() to trigger reading of values on
  set()
- Remove output of zeros in Octave matrix file format
- Use uBLAS-based vector for Vector if PETSc disabled
- Add wrappers for uBLAS compressed_matrix class
- Compute eigenvalues using SLEPc (an extension of PETSc)
- Clean up assembly and linear algebra
- Add function to solve Ax = b for dense matrices and dense vectors
- Make it possible to compile without PETSc (--disable-petsc)
- Much improved ODE solvers
- Complete multi-adaptive benchmarks reaction and wave
- Assemble boundary integrals
- FEM class cleaned up.
- Fix multi-adaptive benchmark problem reaction
- Small fixes for Intel C++ compiler version 9.1
- Test for Intel C++ compiler and configure appropriately
- Add new classes DenseMatrix and DenseVector (wrappers for ublas)
- Fix bug in conversion from Gmsh format


0.6.1 [2006-03-28]
------------------
- Regenerate build system in makedist script
- Update for new FFC syntax: BasisFunction --> TestFunction,
  TrialFunction
- Fixes for conversion script dolfin-convert
- Initial cleanups and fixes for ODE solvers
- Numerous small fixes to improve portability
- Remove dolfin:: qualifier on output << in Parameter.h
- Don't use anonymous classes in demos, gives errors with some
  compilers
- Remove KrylovSolver::solver()
- Fix bug in convection-diffusion demo (boundary condition for
  pressure), use direct solver
- LinearPDE and NewonSolver use umfpack LU solver by default (if
  available) when doing direct solve
- Set PETSc matrix type through Matrix constructor
- Allow linear solver and preconditioner type to be passed to
  NewtonSolver
- Fix bug in Stokes demos (wrong boundary conditions)
- Cleanup Krylov solver
- Remove KrylovSolver::setPreconditioner() etc. and move to
  constructors
- Remove KrylovSolver::setRtol() etc. and replace with parameters
- Fix remaining name changes: noFoo() --> numFoo()
- Add Cahn-Hilliard equation demo
- NewtonSolver option to use residual or incremental convergence
  criterion
- Add separate function to nls to test for convergence of Newton
  iterations
- Fix bug in dolfin-config (wrong version number)


0.6.0 [2006-03-01]
------------------
- Fix bug in XML output format (writing multiple objects)
- Fix bug in XML matrix output format (handle zero rows)
- Add new nonlinear PDE demo
- Restructure PDE class to use envelope-letter design
- Add precompiled finite elements for q <= 5
- Add FiniteElementSpec and factor function for FiniteElement
- Add input/output of Function to DOLFIN XML
- Name change: dof --> node
- Name change: noFoo() --> numFoo()
- Add conversion from gmsh format in dolfin-convert script
- Updates for PETSc 2.3.1
- Add new type of Function (constant)
- Simplify use of Function class
- Add new demo Stokes + convection-diffusion
- Add new demo Stokes (equal-order stabilized)
- Add new demo Stokes (Taylor-Hood)
- Add new parameter for KrylovSolvers: "monitor convergence"
- Add conversion script dolfin-convert for various mesh formats
- Add new demo elasticity
- Move poisson demo to src/demo/pde/poisson
- Move to Mercurial (hg) from CVS
- Use libtool to build libraries (including shared)

0.5.12 [2006-01-12]
-------------------
- Make Stokes solver dimension independent (2D/3D)
- Make Poisson solver dimension independent (2D/3D)
- Fix sparse matrix output format for MATLAB
- Modify demo problem for Stokes, add exact solution and compute error
- Change interface for boundary conditions: operator() --> eval()
- Add two benchmark problems for the Navier-Stokes solver
- Add support for 2D/3D selection in Navier-Stokes solver
- Move tic()/toc() to timing.h
- Navier-Stokes solver back online
- Make Solver a subclass of Parametrized
- Add support for localization of parameters
- Redesign of parameter system

0.5.11 [2005-12-15]
-------------------
- Add script monitor for monitoring memory usage
- Remove meminfo.h (not portable)
- Remove dependence on parameter system in log system
- Don't use drand48() (not portable)
- Don't use strcasecmp() (not portable)
- Remove sysinfo.h and class System (not portable)
- Don't include <sys/utsname.h> (not portable)
- Change ::show() --> ::disp() everywhere
- Clean out old quadrature classes on triangles and tetrahedra
- Clean out old sparse matrix code
- Update chapter on Functions in manual
- Use std::map to store parameters
- Implement class KrylovSolver
- Name change: Node --> Vertex
- Add nonlinear solver demos
- Add support for picking sub functions and components of functions
- Update interface for FiniteElement for latest FFC version
- Improve and restructure implementation of the Function class
- Dynamically adjust safety factor during integration
- Improve output Matrix::disp()
- Check residual at end of time step, reject step if too large
- Implement Vector::sum()
- Implement nonlinear solver
- New option for ODE solver: "save final solution" --> solution.data
- New ODE test problem: reaction
- Fixes for automake 1.9 (nobase_include_HEADERS)
- Reorganize build system, remove fake install and require make
  install
- Add checks for non-standard PETSc component HYPRE in NSE solver
- Make GMRES solver return the number of iterations
- Add installation script for Python interface
- Add Matrix Market format (Haiko Etzel)
- Automatically reinitialize GMRES solver when system size changes
- Implement cout << for class Vector

0.5.10 [2005-10-11]
-------------------
- Modify ODE solver interface: add T to constructor
- Fix compilation on AMD 64 bit systems (add -fPIC)
- Add new BLAS mode for form evaluation
- Change enum types in File to lowercase
- Change default file type for .m to Octave
- Add experimental Python interface PyDOLFIN
- Fix compilation for gcc 4.0

0.5.9 [2005-09-23]
------------------
- Add Stokes module
- Support for arbitrary mixed elements through FFC
- VTK output interface now handles time-dependent functions
  automatically
- Fix cout for empty matrix
- Change dolfin_start() --> dolfin_end()
- Add chapters to manual: about, log system, parameters, reference
  elements, installation, contributing, license
- Use new template fenicsmanual.cls for manual
- Add compiler flag -U__STRICT_ANSI__ when compiling under Cygwin
- Add class EigenvalueSolver

0.5.8 [2005-07-05]
------------------
- Add new output format Paraview/VTK (Garth N. Wells)
- Update Tecplot interface
- Move to PETSc 2.3.0
- Complete support for general order Lagrange elements in triangles
  and tetrahedra
- Add test problem in src/demo/fem/convergence/ for general Lagrange
  elements
- Make FEM::assemble() estimate the number of nonzeros in each row
- Implement Matrix::init(M, N, nzmax)
- Add Matrix::nz(), Matrix::nzsum() and Matrix::nzmax()
- Improve Mesh::disp()
- Add FiniteElement::disp() and FEM::disp() (useful for debugging)
- Remove old class SparseMatrix
- Change FEM::setBC() --> FEM::applyBC()
- Change Mesh::tetrahedrons --> Mesh::tetrahedra
- Implement Dirichlet boundary conditions for tetrahedra
- Implement Face::contains(const Point& p)
- Add test for shape dimension of mesh and form in FEM::assemble()
- Move src/demo/fem/ demo to src/demo/fem/simple/
- Add README file in src/demo/poisson/ (simple manual)
- Add simple demo program src/demo/poisson/
- Update computation of alignment of faces to match FFC/FIAT

0.5.7 [2005-06-23]
------------------
- Clean up ODE test problems
- Implement automatic detection of sparsity pattern from given matrix
- Clean up homotopy solver
- Implement automatic computation of Jacobian
- Add support for assembly of non-square systems (Andy Terrel)
- Make ODE solver report average number of iterations
- Make progress bar write first update at 0%
- Initialize all values of u before solution in multi-adaptive solver,
  not only components given by dependencies
- Allow user to modify and verify a converging homotopy path
- Make homotopy solver save a list of the solutions
- Add Matrix::norm()
- Add new test problem for CES economy
- Remove cast from Parameter to const char* (use std::string)
- Make solution data filename optional for homotopy solver
- Append homotopy solution data to file during solution
- Add dolfin::seed(int) for optionally seeding random number generator
- Remove dolfin::max,min (use std::max,min)
- Add polynomial-integer (true polynomial) form of general CES system
- Compute multi-adaptive efficiency index
- Updates for gcc 4.0 (patches by Garth N. Wells)
- Add Matrix::mult(const real x[], uint row) (temporary fix, assumes
  uniprocessor case)
- Add Matrix::mult(const Vector& x, uint row) (temporary fix, assumes
  uniprocessor case)
- Update shortcuts MassMatrix and StiffnessMatrix to new system
- Add missing friend to Face.h (reported by Garth N. Wells)

0.5.6 [2005-05-17]
------------------
- Implementation of boundary conditions for general order Lagrange
  (experimental)
- Use interpolation function automatically generated by FFC
- Put computation of map into class AffineMap
- Clean up assembly
- Use dof maps automatically generated by FFC (experimental)
- Modify interface FiniteElement for new version of FFC
- Update ODE homotopy test problems
- Add cross product to class Point
- Sort mesh entities locally according to ordering used by FIAT and
  FFC
- Add new format for dof maps (preparation for higher-order elements)
- Code cleanups: NewFoo --> Foo complete
- Updates for new version of FFC (0.1.7)
- Bypass log system when finalizing PETSc (may be out of scope)

0.5.5 [2005-04-26]
------------------
- Fix broken log system, curses works again
- Much improved multi-adaptive time-stepping
- Move elasticity module to new system based on FFC
- Add boundary conditions for systems
- Improve regulation of time steps
- Clean out old assembly classes
- Clean out old form classes
- Remove kernel module map
- Remove kernel module element
- Move convection-diffusion module to new system based on FFC
- Add iterators for cell neighbors of edges and faces
- Implement polynomial for of CES economy
- Rename all new linear algebra classes: NewFoo --> Foo
- Clean out old linear algebra
- Speedup setting of boundary conditions (add MAT_KEEP_ZEROED_ROWS)
- Fix bug for option --disable-curses

0.5.4 [2005-03-29]
------------------
- Remove option to compile with PETSc 2.2.0 (2.2.1 required)
- Make make install work again (fix missing includes)
- Add support for mixing multiple finite elements (through FFC)
- Improve functionality of homotopy solver
- Simple creation of piecewise linear functions (without having an
  element)
- Simple creation of piecewise linear elements
- Add support of automatic creation of simple meshes (unit cube, unit
  square)

0.5.3 [2005-02-26]
------------------
- Change to PETSc version 2.2.1
- Add flag --with-petsc=<path> to configure script
- Move Poisson's equation to system based on FFC
- Add support for automatic creation of homotopies
- Make all ODE solvers automatically handle complex ODEs: (M) z' =
  f(z,t)
- Implement version of mono-adaptive solver for implicit ODEs: M u' =
  f(u,t)
- Implement Newton's method for multi- and mono-adaptive ODE solvers
- Update PETSc wrappers NewVector, NewMatrix, and NewGMRES
- Fix initialization of PETSc
- Add mono-adaptive cG(q) and dG(q) solvers (experimental)
- Implementation of new assebly: NewFEM, using output from FFC
- Add access to mesh for nodes, cells, faces and edges
- Add Tecplot I/O interface; contributed by Garth N. Wells

0.5.2 [2005-01-26]
------------------
- Benchmarks for DOLFIN vs PETSc (src/demo/form and src/demo/test)
- Complete rewrite of the multi-adaptive ODE solver (experimental)
- Add wrapper for PETSc GMRES solver
- Update class Point with new operators
- Complete rewrite of the multi-adaptive solver to improve performance
- Add PETSc wrappers NewMatrix and NewVector
- Add DOLFIN/PETSc benchmarks

0.5.1 [2004-11-10]
------------------
- Experimental support for automatic generation of forms using FFC
- Allow user to supply Jacobian to ODE solver
- Add optional test to check if a dependency already exists (Sparsity)
- Modify sparse matrix output (Matrix::show())
- Add FGMRES solver in new format (patch from eriksv)
- Add non-const version of quick-access of sparse matrices
- Add linear mappings for simple computation of derivatives
- Add check of matrix dimensions for ODE sparsity pattern
- Include missing cmath in Function.cpp

0.5.0 [2004-08-18]
------------------
- First prototype of new form evaluation system
- New classes Jacobi, SOR, Richardson (preconditioners and linear
  solvers)
- Add integrals on the boundary (ds), partly working
- Add maps from boundary of reference cell
- Add evaluation of map from reference cell
- New Matrix functions: max, min, norm, and sum of rows and columns
  (erik)
- Derivatives/gradients of ElementFunction (coefficients f.ex.)
  implemented
- Enable assignment to all elements of a NewArray
- Add functions Boundary::noNodes(), noFaces(), noEdges()
- New class GaussSeidel (preconditioner and linear solver)
- New classes Preconditioner and LinearSolver
- Bug fix for tetrahedral mesh refinement (ingelstrom)
- Add iterators for Edge and Face on Boundary
- Add functionality to Map: bdet() and cell()
- Add connectivity face-cell and edge-cell
- New interface for assembly: Galerkin --> FEM
- Bug fix for PDE systems of size > 3

0.4.11 [2004-04-23]
-------------------
- Add multigrid solver (experimental)
- Update manual

0.4.10
------
- Automatic model reduction (experimental)
- Fix bug in ParticleSystem (divide by mass)
- Improve control of integration (add function ODE::update())
- Load/save parameters in XML-format
- Add assembly test
- Add simple StiffnessMatrix, MassMatrix, and LoadVector
- Change dK --> dx
- Change dx() --> ddx()
- Add support for GiD file format
- Add performance tests for multi-adaptivity (both stiff and
  non-stiff)
- First version of Newton for the multi-adaptive solver
- Test for Newton for the multi-adaptive solver

0.4.9
-----
- Add multi-adaptive solver for the bistable equation
- Add BiCGSTAB solver (thsv)
- Fix bug in SOR (thsv)
- Improved visual program for OpenDX
- Fix OpenDX file format for scalar functions
- Allow access to samples of multi-adaptive solution
- New patch from thsv for gcc 3.4.0 and 3.5.0
- Make progress step a parameter
- New function ODE::sparse(const Matrix& A)
- Access nodes, cells, edges, faces by id
- New function Matrix::lump()

0.4.8
-----
- Add support for systems (jansson and bengzon)
- Add new module wave
- Add new module wave-vector
- Add new module elasticity
- Add new module elasticity-stationary
- Multi-adaptive updates
- Fix compilation error in LogStream
- Fix local Newton iteration for higher order elements
- Init matrix to given type
- Add output of cG(q) and dG(q) weights in matrix format
- Fix numbering of frames from plotslab script
- Add png output for plotslab script
- Add script for running stiff test problems, plot solutions
- Fix bug in MeshInit (node neighbors of node)
- Modify output of sysinfo()
- Compile with -Wall -Werror -pedantic -ansi -std=c++98 (thsv)

0.4.7
-----
- Make all stiff test problems work
- Display status report also when using step()
- Improve adaptive damping for stiff problems (remove spikes)
- Modify Octave/Matlab format for solution data (speed improvement)
- Adaptive sampling of solution (optional)
- Restructure stiff test problems
- Check if value of right-hand side is valid
- Modify divergence test in AdaptiveIterationLevel1

0.4.6
-----
- Save vectors and matrices from Matlab/Octave (foufas)
- Rename writexml.m to xmlmesh.m
- Inlining of important functions
- Optimize evaluation of elements
- Optimize Lagrange polynomials
- Optimize sparsity: use stl containers
- Optimize choice of discrete residual for multi-adaptive solver
- Don't save solution in benchmark proble
- Improve computation of divergence factor for underdamped systems
- Don't check residual on first slab for fixed time step
- Decrease largest (default) time step to 0.1
- Add missing <cmath> in TimeStepper
- Move real into dolfin namespace

0.4.5
-----
- Rename function.h to enable compilation under Cygwin
- Add new benchmark problem for multi-adaptive solver
- Bug fix for ParticleSystem
- Initialization of first time step
- Improve time step regulation (threshold)
- Improve stabilization
- Improve TimeStepper interface (Ko Project)
- Use iterators instead of recursively calling TimeSlab::update()
- Clean up ODESolver
- Add iterators for elements in time slabs and element groups
- Add -f to creation of symbolic links

0.4.4
-----
- Add support for 3D graphics in Octave using Open Inventor (jj)

0.4.3
-----
- Stabilization of multi-adaptive solver (experimental)
- Improved non-support for curses (--disable-curses)
- New class MechanicalSystem for simulating mechanical systems
- Save debug info from primal and dual (plotslab.m)
- Fix bug in progress bar
- Add missing include file in Components.h (kakr)
- New function dolfin_end(const char* msg, ...)
- Move numerical differentiation to RHS
- New class Event for limited display of messages
- Fix bug in LogStream (large numbers in floating point format)
- Specify individual time steps for different components
- Compile without warnings
- Add -Werror to option enable-debug
- Specify individual methods for different components
- Fix bug in dGqMethods
- Fix bug (delete old block) in ElementData
- Add parameters for method and order
- New test problem reaction
- New class FixedPointIteration
- Fix bug in grid refinement

0.4.2
-----
- Fix bug in computation of residual (divide by k)
- Add automatic generation and solution of the dual problem
- Automatic selection of file names for primal and dual
- Fix bug in progress bar (TerminalLogger)
- Many updates of multi-adaptive solver
- Add class ODEFunction
- Update function class hierarchies
- Move functions to a separate directory
- Store multi-adaptive solution binary on disk with cache

0.4.1
-----
- First version of multi-adaptive solver working
- Clean up file formats
- Start changing from int to unsigned int where necessary
- Fix bool->int when using stdard in Parameter
- Add NewArray and NewList (will replace Array and List)

0.4.0
-----
- Initiation of the FEniCS project
- Change syntax of mesh files: grid -> mesh
- Create symbolic links instead of copying files
- Tanganyika -> ODE
- Add Heat module
- Grid -> Mesh
- Move forms and mappings to separate libraries
- Fix missing include of DirectSolver.h

0.3.12
------
- Adaptive grid refinement (!)
- Add User Manual
- Add function dolfin_log() to turn logging on/off
- Change from pointers to references for Node, Cell, Edge, Face
- Update writexml.m
- Add new grid files and rename old grid files

0.3.11
------
- Add configure option --disable-curses
- Grid refinement updates
- Make OpenDX file format work for grids (output)
- Add volume() and diameter() in cell
- New classes TriGridRefinement and TetGridRefinement
- Add iterators for faces and edges on a boundary
- New class GridHierarchy

0.3.10
------
- Use new boundary structure in Galerkin
- Make dolfin_start() and dolfin_end() work
- Make dolfin_assert() raise segmentation fault for plain text mode
- Add configure option --enable-debug
- Use autoreconf instead of scripts/preconfigure
- Rename configure.in -> configure.ac
- New class FaceIterator
- New class Face
- Move computation of boundary from GridInit to BoundaryInit
- New class BoundaryData
- New class BoundaryInit
- New class Boundary
- Make InitGrid compute edges
- Add test program for generic matrix in src/demo/la
- Clean up Grid classes
- Add new class GridRefinementData
- Move data from Cell to GenericCell
- Make GMRES work with user defined matrix, only mult() needed
- GMRES now uses only one function to compute residual()
- Change Matrix structure (a modified envelope/letter)
- Update script checkerror.m for Poisson
- Add function dolfin_info_aptr()
- Add cast to element pointer for iterators
- Clean up and improve the Tensor class
- New class: List
- Name change: List -> Table
- Name change: ShortList -> Array
- Make functions in GridRefinement static
- Make functions in GridInit static
- Fix bug in GridInit (eriksv)
- Add output to OpenDX format for 3D grids
- Clean up ShortList class
- Clean up List class
- New class ODE, Equation replaced by PDE
- Add Lorenz test problem
- Add new problem type for ODEs
- Add new module ode
- Work on multi-adaptive ODE solver (lots of new stuff)
- Work on grid refinement
- Write all macros in LoggerMacros in one line
- Add transpose functions to Matrix (Erik)

0.3.9
-----
- Update Krylov solver (Erik, Johan)
- Add new LU factorization and LU solve (Niklas)
- Add benchmark test in src/demo/bench
- Add silent logger

0.3.8
-----
- Make sure dolfin-config is regenerated every time
- Add demo program for cG(q) and dG(q)
- Add dG(q) precalc of nodal points and weights
- Add cG(q) precalc of nodal points and weights
- Fix a bug in configure.in (AC_INIT with README)
- Add Lagrange polynomials
- Add multiplication with transpose
- Add scalar products with rows and columns
- Add A[i][j] index operator for quick access to dense matrix

0.3.7
-----
- Add new Matlab-like syntax like A(i,all) = x or A(3,all) = A(4,all)
- Add dolfin_assert() macro enabled if debug is defined
- Redesign of Matrix/DenseMatrix/SparseMatrix to use Matrix as common
  interface
- Include missing cmath in Legendre.cpp and GaussianQuadrature.cpp

0.3.6
-----
- Add output functionality in DenseMatrix
- Add high precision solver to DirectSolver
- Clean up error messages in Matrix
- Make solvers directly accessible through Matrix and DenseMatrix
- Add quadrature (Gauss, Radau, and Lobatto) from Tanganyika
- Start merge with Tanganyika
- Add support for automatic documentation using doxygen
- Update configure scripts
- Add greeting at end of compilation

0.3.5
-----
- Define version number only in the file configure.in
- Fix compilation problem (missing depcomp)

0.3.4
-----
- Fix bugs in some of the ElementFunction operators
- Make convection-diffusion solver work again
- Fix bug in integration, move multiplication with the determinant
- Fix memory leaks in ElementFunction
- Add parameter to choose output format
- Make OctaveFile and MatlabFile subclasses of MFile
- Add classes ScalarExpressionFunction and VectorExpressionFunction
- Make progress bars work cleaner
- Get ctrl-c in curses logger
- Remove <Problem>Settings-classes and use dolfin_parameter()
- Redesign settings to match the structure of the log system
- Add vector functions: Function::Vector
- Add vector element functions: ElementFunction::Vector

0.3.3
-----
- Increased functionality of curses-based interface
- Add progress bars to log system

0.3.2
-----
- More work on grid refinement
- Add new curses based log system

0.3.1
-----
- Makefile updates: make install should now work properly
- KrylovSolver updates
- Preparation for grid refinement
- Matrix and Vector updates

0.3.0
-----
- Make poisson work again, other modules still not working
- Add output format for octave
- Fix code to compile with g++-3.2 -Wall -Werror
- New operators for Matrix
- New and faster GMRES solver (speedup factor 4)
- Changed name from SparseMatrix to Matrix
- Remove old unused code
- Add subdirectory math containing mathematical functions
- Better access for A(i,j) += to improve speed in assembling
- Add benchmark for linear algebra
- New definition of finite element
- Add algebra for function spaces
- Convert grids in data/grids to xml.gz
- Add iterators for Nodes and Cells
- Change from .hh to .h
- Add operators to Vector class (foufas)
- Add dependence on libxml2
- Change from .C to .cpp to make Jim happy.
- Change input/output functionality to streams
- Change to new data structure for Grid
- Change to object-oriented API at top level
- Add use of C++ namespaces
- Complete and major restructuring of the code
- Fix compilation error in src/config
- Fix name of keyword for convection-diffusion

0.2.11-1
--------
- Fix compilation error (`source`) on Solaris

0.2.11
------
- Automate build process to simplify addition of new modules
- Fix bug in matlab_write_field() (walter)
- Fix bug in SparseMatrix::GetCopy() (foufas)

0.2.10-1
--------
- Fix compilation errors on RedHat (thsv)

0.2.10
------
- Fix compilation of problems to use correct compiler
- Change default test problems to the ones in the report
- Improve memory management using mpatrol for tracking allocations
- Change bool to int for va_arg, seems to be a problem with gcc > 3.0
- Improve input / output support: GiD, Matlab, OpenDX

0.2.8
-----
- Navier-Stokes starting to work again
- Add Navier-Stokes 2d
- Bug fixes

0.2.7
-----
- Add support for 2D problems
- Add module convection-diffusion
- Add local/global fields in equation/problem
- Bug fixes
- Navier-Stokes updates (still broken)

0.2.6 [2002-02-19]
------------------
- Navier-Stokes updates (still broken)
- Output to matlab format

0.2.5
-----
- Add variational formulation with overloaded operators for systems
- ShapeFunction/LocalField/FiniteElement according to Scott & Brenner

0.2.4
-----
- Add boundary conditions
- Poisson seems to work ok

0.2.3
-----
- Add GMRES solver
- Add CG solver
- Add direct solver
- Add Poisson solver
- Big changes to the organisation of the source tree
- Add kwdist.sh script
- Bug fixes

0.2.2:
------
- Remove curses temporarily

0.2.1:
------
- Remove all PETSc stuff. Finally!
- Gauss-Seidel cannot handle the pressure equation

0.2.0:
------
- First GPL release
- Remove all of Klas Samuelssons proprietary grid code
- Adaptivity and refinement broken, include in next release
