 # -*- org -*-
# This file is better edited using Emacs

#+TITLE: Feel++ News
#+AUTHOR: Christophe Prud'homme
#+DATE: <2011-02-26 Sat>
#+EMAIL: christophe.prudhomme@ujf-grenoble.fr
#+OPTIONS: toc:t
#+LATEX_class: cparticle

* New in 0.91.0

** Contributors for this release

 - Vincent Doyeux
 - Christophe Prud'homme
 - Vincent Chabannes
 - Abdoulaye Samake

** Programming Environment

*** Developer changes

 - cmake: in-source builds forbidden
 - cmake: guards againts invalid CMAKE_BUILD_TYPE
 - cmake: added sse, altivec and neon optimizations
 - cmake: fix bug in make_directory
 - cmake: even more minimal configuration in doc/tutorial
 - fix compilation in APPLE and s390 platforms

** Libraries

*** feelcore

 - added a config file with extension .cfg based on Boost.program_options in
   Application classes
 - provide systemConfigRepository() and localConfigRepository() in Environment
   class which return respectively the local and system location of the config
   file

*** feelalg

 - merge the two implementations of aitken relaxation method and provide a
   simplified interface

*** feeldiscr

 - added implementation of $L_2$ and $H_1$ projector which renders rather
   seamless these projection.

*** feelfilters

 - update geotool to support markers for 1D meshes

*** feelvf

 - support for passing shared_ptr<> to the differential operators and to on()

** Documentation

*** Tutorial

 - updated tutorial
 - updated doxygen documentation


* New in 0.90.0

** Programming Environment

 - Life has been rename Feel++ (Finite Element Embedded Language and Library in
   C++)
 - Feel++ supports Boost up to 1.46
 - Ported to Gcc 4.5. Very few changes were needed: (i) one 1-liner to fix a
   segfault with Gcc4.5 and (ii) fixed a warning that was quite annoying
 - Added OpenTURNS check (optional)
 - Start support python wrappers using OpenTURNS
 - added support for TBB (Thread Building Blocks). A first example is available
   in feel/feelalg/vectorublas.cpp.  Some integrate() functions (element wise
   and evaluate()) are also using it. It is still optional.
 - added support for octave warppers. An example is available in doc/tutorial.
 - ported to (intel) APPLE platforms thanks to [[http://www.macports.org][macports.org]]
 - added support for [[http://www.madlib.be][MAdLib]], a mesh adaptation library
 - added a cmake module for Feel++: FindFeel++.cmake. It is used both for
   building Feel++ and also to build applications or libraries once Feel++ is
   installed.


** Libraries

*** feelcore

 - Fix build on s390 and apple platforms

*** feelalg

 - new local/global interface for vectors and sparse matrices to add the
   contribution of a local/small vector/matrix into a global/large one

*** feelpoly

 - support for RaviartThomas RTk in 2D and 3D
 - Continuous or Discontinous expansion in multidomains is now taken care of in
   the basis definition. Either the basis is intrinsiquely Discontinous
   (e.g. Dubiner) or can be either Continuous or Discontinous (e.g. Lagrange)

*** feelmesh

 - renamed SimplexProduct to Hypercube class and files
 - added support to the GeoND class for Point Element Neighbors which is for a
   given element, the set of elements (including himself) that share a point
   with it. Provide dimension(number of elements) and measure

*** feeldiscr

 - support for vectorial valued function such as RaviartThomas
 - update the interpolation tool
 - added interface to the DofTable class to retrieve all the dof associated to
   an element in a Eigen vector as well as the dof signs (when modal basis are
   used)
 - advection/reaction operator: added support for other stabilisation methods
   SGS, GALS, SUPG (CIP was already implemented)
 - added support in opInterpolation for boost.parameter keywords
   Examples :
#+BEGIN_SRC c++
auto opI = opInterpolation( _domainSpace=Xh1,
                           _imageSpace=Xh2,
                           _range=boundaryfaces(Xh2->mesh()),
                           _backend=M_backend );

auto opI = opInterpolation( _domainSpace=Xh1,
                           _imageSpace=Xh2,
                           _backend=M_backend );
#+END_SRC
with by default : =_range=elements(Xh2->mesh())=

*** feelfilters

 - much better support for Gmsh.
   - added loadGMSHMesh() and saveGMSHMesh() free functions to save and load
     mesh from/to the GMSH msh format with many options
   - added an _update option to createGMSHMesh() to setup the mesh components
     after loading
   - enhanced the ExporterGMSH class and updated the interface so that it
     supports loading/saving high order elements in all 3 dimensions as well as
     associated data. Adapted the TimeSet class accordingly.
   - added a _refine=<level> option in createGMSHMesh() and loadGMSHMesh() if
     level=0 do nothing, other refine <level> times uniformely
   - added _force_rebuild=true|false to force regeneration of geo/msh files
   - added _update= option to tell the mesh which components of the mesh to
     build like edges or faces or to renumber the entities
 - renamed GmshTensorizedDomain to GmshHypercubeDomain

*** feelvf

 - update the interpolation tool
 - fixed dG or integration of multi-valued functions breakage
 - added meas() and measFace() keywords in the language
   - meas() : measure of the current element
   - measFace(): measure of the current face
 - added access to gradient (matrix K()) and inverse gradient transposed (matrix
   B()) as well as jacobian (scalar J()) of the geometric transformation as
   keywords of the language
 - added a new function .broken( [P0h] ) to integrate() which allows to evaluate
   the integral and store the results(local contributions) in a P0 field
   instead of summing them like in evaluate().
   p0 = P0h->element( "mean_f" );
   $p0 = \int_K f/meas(K)$ where K is an element of the mesh
   p0 = integrate( elements(mesh), f/meas() ).broken( P0h );
 - added nPEN() and measPEN() where PEN stands for Point Element Neighbors which
   is for a given element, the set of elements (including himself) that share a
   point with it. nPEN() returns the number of elements and measPEN() the
   measure of the set.
 - implement the new local/global interface that uses eigen. It simplifies a
   lots the local/global assembly code and allowed quite a bit of refactoring.
 - Fix bug in outward normal computation using high order geometric
   transformation

** Documentation

*** API

 - ported the tutorial to Doxygen
 - improved the Doxygen output

*** Tutorial

 - update the tutorial, generate automatically the figures for some of the
   examples
 - added the residualestimator example which provides a tutorial for residual
   based error estimator and mesh adaptation using MAdLib.

** Benchmarks

 - reorganized the benchmark directory

*** Laplacian

 - moved convergence to laplacian and split into ale, cG and dG directory. Now
   test for dG convergence in 1D, 2D and 3D

*** Navier-Stokes

 - moved stokes testcases to navierstokes/kovasznay directory, moved all
   stokes/navier-stokes benchmarks into the navierstokes directory

*** Perf

 - The performance benchmark has been updated and saves now the timings in files
   to ease the analysis


* New in 0.9.24
** Programming Environment
 - gcc >= 4.4 is now required in conjonction with -std=c++0x and the use of the
   new keyword auto available only in 4.4 and later
 - provide cmake option LIFE_MINIMAL_CONFIGURATION (default: OFF) to enable a
   minimal configuration for the configuration of Life
 - added fixes for PETSc 3.1 in FindPETSc.cmake

** Libraries

*** All
 - change the way we are retrieving the mpi communicator: we don't use the
   Application::processId() and Application::nProcess() anymore but rather the
   mpi::communicator from boost::mpi directly. This allows a less tight
   dependency between Application class and other classes for one thing.

*** lifecore
 - new class Environment initializes MPI, PETSc and SLEPc if not done already
   and finalizes them if the initialization was done by the same class. This
   avoid using/including the Application class/header unnecessarily.
 - minor bug fix in debug.cpp
 - Debug: disable now Debug() when compiling with -DNDEBUG which is the case in
   the cmake Release mode. This may slightly improve performances. Note that
   Log() is however still writing in the logfile.

*** lifemesh
 - fixed edge connectivity in 2D for high order geometrical elements
 - fixed edge and face connectivity in 3D for high order geometrical elements
 - provide various computation on geometric elements which are computed
   automatically when Mesh::updateForUse() is called
   - h, hFace
   - barycenter and barycenter of faces
   - normal at barycenters
   - measure and measure at faces

*** lifepoly
 - helper functions for GeoMap and PreCompute classes are now provided to ease
   their instantiation and usage

*** lifefilters
 - Exporter defines  --export=[0|1] in the command line which sets
   Exporter::doExport() to true or false. Then it is up to the developer to use
   it and save some time if he doesn't want to export the results at runtime.

*** lifealg
 - GraphCSR uses std::set instead of std::vector (see
   BilinearForm::computeGraph). This allows for faster graph computation.
 - SolverLinearPetsc: setting tolerances(absolute, relative and divergence) is
   easier through the Backend::solve function using Boost::parameter.
 - Fixes in PETSc matrix interface due to changes in Petsc 3.1 interface (namely
   MAT_KEEP_NONZERO_PATTERN)

*** lifevf
 - BilinearForm::computeGraph (in conjunction with GraphCSR) is now noticeably
   faster (this was taking much time). Other optimisation based on hints
   (DO_PATTERN_COUPLED and DOF_PATTERN_NEIGHBOR). You can choose between
   coupling all components (DOF_PATTERN_COUPLED) or decoupling them
   (DOF_PATTERN_DEFAULT and depending on trial and test space basis).

** Benchmarks
*** Convergence
 - Stokes: added some timings; now use properly DOF_PATTERN_NEIGHBOR, removed
   all _Q<>


* New in 0.9.23
** Libraries

*** lifediscr
 - mesh*: fix the mesh test cases that were failing the last few weeks

*** lifealg
 - MatrixPETSC::addMatrix() allows now DIFFERENT_NONZERO_PATTERN, remove some
   std::cout outputs that went in the release 0.9.22

*** lifefitters
 - Exporter::New(std::string,std::string): it now takes care of the the timeset
   allocation and returns a fully functional exporter

** Documentation

*** Tutorial
 - fixed the tutorial : make sure that the language reference and the license
   are present in the manual


* New in 0.9.22
** Documentation
 - added a Random Notes chapter to the manual

** Libraries

*** lifecore and lifealg
 - remove support for long double
 - Application accepts now constructor with only a AboutData class as argument,
   this is useful to integrate life in environment such as Python or Sofa.

*** lifepoly
 - start support for non transformation equivalent finite elements (eg. Hermite,
   RTk, Nk,...)
 - start support for Hermite finite elements

*** lifevf
 - the integration order is optional in the integrate(.), the order is computed
   automatically from the expression

** Applications

*** polyvis

 - start support for Hermite polynomials visualisation


* New in 0.9.21
** Programming environment
 - fixes for armel and s90 port
 - update FindOpenTURNS.cmake script

** Libraries
*** lifealg
 - fixed compilation if PETSc or Trilinos are not installed
 - added a matrix-vector multiplication interface to the class MatrixSparse
   which used the interface already available in the Vector class.


* New in 0.9.20
 - minor change


* New in 0.9.19
** Programming Environment

   - added support cmake support for OpenTURNS
     http://www.openturns.org

** Libraries
*** life/lifecore
   - allow Application class without (argc,argv). This permits to wrap
     Application classes in Python scripts. At the moment this is being used to
     write wrappers for OpenTURNS.
   - use boost::integer to compute the exact int#_type and #ifdef int64 support
     if it is not available on the platform.


* New in 0.9.18
** Programming Environment

  - improved Trilinos and PETSc cmake support
  - minor changes in manual (version...)

** Library

  - improvements to the kdtree structure


* New in 0.9.17
  - minor changes for Debian ports


* New in 0.9.16
** Programming environment
  - make trilinos optional. That should ease the porting on platforms where
    trilinos does not compile (yet)

** Libraries

 - improvements in the kdtree data structure


* New in 0.9.15
** Programming environment

 - port Life on non x86 platforms. The non x86 Debian platforms should now be
   able to compile Life.

** Benchmarks

 - decrease the number of failures in the benchmarks at
   http://my.cdash.org/index.php?project=Life


* New in 0.9.14
** Programming environment

 - add support for Metis (using either metis or the scotch interface), some
   applications can now be run in parallel using mpirun
   (e.g. doc/tutorial/life_doc_myintegrals)

** Benchmarks

 - stokes: added support for P_k/P_{k-1}, P_k/P_{k-2} and P_k/P_k (with CIP
   stabilisation), this is a 2D Kovasznay flow.
 - install the convergence benchmarks



* New in 0.9.13
** Programming environment

 - fixed installation of Life, was missing life/lifepoly headers

** Libraries

*** life/lifecore

 - /Factory/: added info about missing component in Factory when throwing
   exception

*** life/lifefilters

 - /Gmsh/: added simplex(3,1) domain in gmsh generator and accessible fromn
   Gmsh::Factory (from GmshSimplexDomain class).

** Application

 - polyvis: added cmake support to polyvis
 - polyvis: added ctests using polyvis
 - polysetvis: added new application polysetvis to plot pointsets for simplices
   and hypercubes in pdf


* New in 0.9.12
** Programming environment
   - tests in testsuite are prefixed by test_
   - benchmarks are prefixed by life_bench
   - convergence benchmarks are run with string and weak Dirichlet treatment if
     applicable

** Bugs
   - Bug in on() for 1D problem (Fixes #32)


* New in 0.9.11

** Programming environment

*** Directory layout and cmake

    - Now Life splits the entire framework into various modules and uses cmake as
      build system. REferences to the autotools and scons have been removed

    - A CDash dashboard is available at
      http://my.cdash.org/index.php?project=Life Tests are running every night
      and reported on the dashboard.

*** Shared libraries

   Now the libraries follow this versioning scheme

   So, shared library versions are described by three integers:
   - current: The most recent interface number that this library implements.
   - revision: The implementation number of the current interface.
   - age: The difference between the newest and oldest interfaces that this
     library implements.

   In other words, the library implements all the interface numbers in the range
   from number 'current - age' to current.

   Here are a set of rules that are used to update the library version information:
   1. Start with version information of ‘0:0:0’ for each  library.
   2. Update the version information only immediately before a public release of
      your software. More frequent updates are unnecessary, and only guarantee
      that the current interface number gets larger faster.
   3. If the library source code has changed at all since the last update, then
      increment revision (‘c:r:a’ becomes ‘c:r+1:a’).
   4. If any interfaces have been added, removed, or changed since the last
      update, increment current, and set revision to 0.
   5. If any interfaces have been added since the last public release, then
      increment age.
   6. If any interfaces have been removed since the last public release, then
      set age to 0.

   See http://www.gnu.org/software/libtool/manual/libtool.html#Versioning for
   more details


** Libraries


*** lifepoly

    - now Lagrange polynomials can be instantiated using only
      =Lagrange<Order,Scalar|Vectorial>=

*** lifediscr

    - Simplified =FunctionSpace<>=

    - Bdf: allow to set time step and final time, added =setSteady()= to set
      time step and final time to a very big value for the computation of the
      steady state

    - support for high order nodal basis function in case of periodic
      conditions in 1D and 2D is complete see #20

*** lifealg

    - Improve robustness of linear algebra backends see #21

    - Improve =SolverEigen= interface allowing for =boost::shared_ptr<>= and
      initializing from =po::variables_map=

    - Provide a standalone function =eigs()= using Boost.Parameter, the interface
      is quite simple and typically looks like
      =eigs( _matrixA=A, _matrixB=B, _spectrum=LARGEST_MAGNITUDE );=
      to solve for A x = \lambda B x

    - Fixed bug on 64 bits architecture for the construction of the FE CRS
      graph for trilinos

*** lifefilters

    - Simplify =Exporter= interface, old interface still supported, but might be
      obsoleted in a future release. The simplification is that the TimeSet
      data structure should not be used directly but through the Exporter class
      interface.

*** lifevf

    - reflect simplifications made in lifepoly and lifediscr

    - =mat()=,=vec()=: supports for trial and test functions added, now you can
      write =vec(0.,idt(v))=.

** Applications

*** Polyvis

    - resurrected a tool to visualize polynomial set called polyvis. It
      generates Ensight case files (to be visualized with Paraview) for Lagrange
      and Dubiner polynomials in 1D, 2D and 3D and Crouzeix-Raviart polynomials
      of order 1 in 2D in the triangle.

** Examples

   - reflect (simplification) changes made in =Exporter= class in all examples.

*** Generic

   - =sound=: use new eigs interface and simplify the code

** Benchmarks

*** Convergence

    - new benchmark system: added a Python framework to check for the
      convergence (e.g. L_2 or H_1 norms) for a few problems

    - added new benchmarks to =benchmark/convergence=: stokes and ale

* New in 0.9.10

** Libraries

*** lifediscr

    - started support for high order nodal basis function in case of periodic
      conditions

*** lifefilters

    - Gmsh : throw an exception if gmsh is execute when not available

** Documentation

*** Tutorial

    - updated the building section

    - updated the Backend<> section

    - started new examples (nonlinear pde)

** Build System

*** Configure

    - better feedback to users

    - a summary text file provides what is available and what is not

*** Gmsh

    - configure: better support




* New in 0.9.9
  - If Petsc is supported then use Petsc as default backend.

  - Slepc(Petsc) support has been updated to latest version.

  - Added periodic boundary conditions support in FunctionSpace<>.

  - New Build system framework still using the Autotools: the Life
  Developement Plateform (LDP).
   - split the directories into submodules which can hold extra (external
     to life) modules: examples, benchmarks, doc, applications, research
   - allow for easy creation of new projets which can build on top of the
     LDP.

   - [Experimental] System<FunctionSpaceType> framework implementation.

   - [Experimental] Shell matrices (only support matrix/vector
  multiplication) support.

