beginning:  november 21,  2001:  version 1.08.
----------------------------------------------

2001/11/22:  correction  of operator == and != 
2001/11/23 , version: 1.09: correction  (with g++) 
template<class A>  struct SameType, type of OK must be int and not bool 

2001/11/24   add fonctionality in plot,  bb=[[x1,y1],[x2,y2]] 
 add  loop if enter  character +,-,=,c,C,r  in graphic window.
2001/11/28
 correction bug initialization of QuadTree if less than 4 points in the quadtree
 files  QuadTree.cpp and FQuadTree.hpp
 add exec("xxx..."); //to execute on system command. "xxx ... " 
 add  dumptable(cout); //to show all internal table
2001/11/29:  
  Version ans graphique + ajout d'option dans plot (cf. doc)
  correction ajoute renum() des maillage crees. 
2001/12/10
  Correct missing check in plot  
     ex:  plot(1);  trap before now, genere a compile error
  Correct in the interpolation is full not conforme FE, 
  do not prolonged by continuity. change 
  add after line 479 in file lgfem.cpp
  if (outside && !KK.tfe->NbDfOnVertex && !KK.tfe->NbDfOnEdge) 
    return   SetAny<R>(0.0); 
2001/12/12
  correction in gibbs (mesh renum) reconstruct the array of
  triangle for each vertex (PB. of interpolation in non 
  convexe domain) Big bug.

Make version 1.14
-----------------

2001/12/14
  correction in trunc mesh, bug if empty mesh is created,
  and move  a little the test point in a triangle 
  is not exactly the barycenter.  

2002/01/14
  correction in probem.cpp line 1309  bug when we write   qft= ...  , in int2d 
   if (nargs[0]) return *GetAny<const Fem2D::QuadratureFormular*>((*nargs[1])...
  becomes:
   if (nargs[0]) return *GetAny<const Fem2D::QuadratureFormular*>((*nargs[0])...
2002/01/15
  in lgfem.cpp remove line 522  reffecran();//bug if not graphique some time
  in file MeshGeom.cpp line 108 bug if name == 0 ;  add test before the cout like 
    if(name) cout << " ... " << name << .... 
  correct the name of the exec file (FreeFee++ -> FreeFem++) in Makefile
2002/02/03
  in Mesh2.cpp in preinit() add call to srand(),
    to get the same  mesh with the same data. 
  correct 
  mesh tth=th; 
  
Make version 1.15
-----------------

2002/02/20
   Add periodic boundary condition see the manual //\index{periodic}

Make version 1.16
-----------------

  Add Parallele Mpi 
  correct bug in SegmentationFault.edp missing placing of delete[] operator
  put declaration in  for
  wait =xx change the default value of wait
  ofstream f("foo.txt",append)  open a file in append mode
   add NoUseOfWait=true;    never wait for run test easly\index{NoUseOfWait}

Make version 1.17 2002/03/20
----------------------------

  Make default iso value changing with zoom option.
  Add GMRES solver   dimKrylov= ,  tgv= //\index{GMRES}\index{problem!dimKrylov=}\index{solve!tgv=}\index{problem!tgv=}
 
april 2002
  Make the current version without CheckPtr, and 
  correct some bug in string allocation (forgetting +1 in some length)
  Improving the speed of the software
  add CPUTime global bool variable to print the CPU time of each instruction.
  correct some printing without verbosity 
  adding some checking in array management 
  Add option in the Makefile (gnumake)

Make version 1.18 the 2002/04/08  
--------------------------------
  
  Big correction in automatic cast see  bugv1.18.edp
  correction in interpolation of  label see also bugv1.18.edp
  Big correction in construction of non-symetrix matrix (see BUG)



Make version 1.19 2002/04/18
----------------------------

   Correction in Quadtree integer overflow when 
   interpolate solution of from one big domain to a very small one.

   Correction in embedded function (return problem)
   Correction in return type of function (right value an note left value)
   Correction cast bool to int, so lots of bug in expression 
   like  (region==2)*5 given alway 0, invisibl before 1.18 (because bug in
   automatics cast)

Make version 1.20 2002/04/25
----------------------------

  Correction of bug in interpolation on non convexe domain.
  correction of bug in periodic boundary condition (pb of sens(in french))
  correction some compilation bug under g++ v3.0 in RNM file
  correction find common point buildmesh (change threshold value)

Make version 1.21 2002/04/29
----------------------------

  Add Non linear Conjugued Gradient (CGNL) routine.
  correct bug in linearGC with non zero right and size.

Make version 1.22 2002/05/02
----------------------------

 all optimisation tool from //\url{http://coool.mines.edu/}
 Add BFGS optimisation tools form  cool //\index{BFGS}
 correct bug in CGNL, correct tgv=, in linear form //\index{CGNL}
 make algo.edp example 

Make version 1.23 2002/05/13
----------------------------

  correct bug of the symetric matrix are independ of  x,y,..
   add line at  285, in file problem.cpp: 
          MeshPointStack(stack)->set(T(pi),pi,Ku);

  correct bug in sign of int1d in linearform, 
    so change in exemple fluidstructure, schwarz-no-overlap, LaplaceP1, 
    aalapacien, lapacienprecon
  correct some bug in -= operator with  result of *. */ 
  add some operator:
    -square(u) = u^2  //\index{square}
    -intalledges(Th)(...) to compute integrale on all edges of all triangle //\index{intalledges}  
    for error indicator add global :
    -lenEdge the len of the current edge //\index{lenEdge}
    -hTriangle the size of the current triangle //\index{hTriangle}
    -area the area of the current triangle //\index{area} 

Make version 1.24
-----------------

  add in BamgFreeFem.cpp after line 211 to set name 
    Tn->name= new char[strlen("msh2bamg")+1];
    strcpy(Tn->name,"msh2bamg");
   add -  of linearform and bilinearform see LaplaceP1bis.edp 

   correct: July 8, 2002
   Vh u1,u2,v1,v2; 
   bug in problem(u1,u2,v1,v2,.... ) = 
   in file: FESSpace.hpp line 193:
   { throwassert(dim_which_sub_fem[N-1]>=0 && dim_which_sub_fem[N-1]< nb_sub_fem);
     for(int i=0,n0=0,l=0,i0=0; i<k;  i++,n0+=t.N,i0+=t.NbDoF)
         for (int j=0;j<t.pij_alpha.N();j++,l++) {
           pij_alpha[l].i=t.pij_alpha[j].i+i0;
           pij_alpha[l].p=t.pij_alpha[j].p;
           pij_alpha[l].j=t.pij_alpha[j].j+n0;
         }                         
    } 

    add plot of list of border //\index{plot!border}

    add init array:

    real[int] a=[1,2,3,5.6,7,8,9]; //\index{array!initialisation}

Make version 1.25 
-----------------

 13 aout 2002 Major Bug in : FESpace.hpp ligne 199

  All the non scalar problem with same kind
     of finite element do not work: 

    FESpace.hpp ligne 199
      for(int i=0,n0=0,l=0,i0=0; i<k;  i++,n0+=t.N,i0+=t.NbDoF)
        for (int j=0;j<t.pij_alpha.N();j++,l++) {
          pij_alpha[l].i=t.pij_alpha[j].i+i0;
          pij_alpha[l].p=t.pij_alpha[j].p;
          pij_alpha[l].j=t.pij_alpha[j].j+n0;
          }                         
    become
     // Warning the componant is moving first 
        for (int j=0,l=0;j<t.pij_alpha.N();j++) // for all sub DF
          for(int i=0,i0=0; i<k; i++,l++) // for componate
          {
          pij_alpha[l].i=t.pij_alpha[j].i*k+i;   //  DoF number
          pij_alpha[l].p=t.pij_alpha[j].p;       //  point of interpolation
          pij_alpha[l].j=t.pij_alpha[j].j+i*t.N; //  componante of interpolation
          }                         
 
   two corrections in problem.cpp :
     2 missing  delete     (example laplacienprecon.edp)
     2 delete -> delete [] (example testFE.edp) 

 26 septembre 2002 
   add New Finite element RTortho (a conforme //\index{RTortho}
    FE in $H(curl)$ like RT  conforme FE in $H(div)$.
    see exemple aaRT.epd
   correct the computation of dx(v) and dy(u) in [u,v] RT finite element
    function. 
   compile on hpux 11 with gcc 3.2 see Makefile-hp9000s700
   correct argument passing in GMRES routine

Make version 1.26 le 26 septembre 2002
--------------------------------------

 05 nov. 2002 Correct very small mistake in bamglib  part.

 19 nov 2002:
  add:
   -tanh function //\index{tanh}
   -qf2pT4P1 a triangular QuadratureFormular  
	(4P1 the qf2pT QuadratureFormular) //\index{qf2pT4P1}
   small change une meshadapt to just compute the metrix see exemple
      convectapt.edp 
    make interpolation matrix between to FEspace (not wet finish)

 3/12/2002 
  make correction to get a not to bad linenumber in error.
  add add test is used of unset x,y to make a error.
  add checkmovemesh(Th,[x+u,y+v]) function to return the //\index{checkmovemesh}
  value of the area of the minimal triangle of the movemesh.
  see mesh.edp example.

 23/12/2002:
  add eigen value solver  //\index{eigenvalue}
  see eigen README_ARPACK to compile
  see  examples++-eigen to test.

Make  version 1.28 2/1/2003 
---------------------
09/1/2003: 
 add sub array option in array:  //\index{array!sub}
  real[int] tab(100);
  tab(:) = array from 0 to 99=tab.n-1
  tab(2:10)  sub array from 2 to 10
  tab(2:10:2)  sub array from 2 to 10 by step 2
  tab(2:10:2)[0] = 5 ; => modificaton of tab[2] = 5;
  tab(2:10:2)[1] = 6 ; => modificaton of tab[2+2] = 6;
  
  
16/01/2003
add macro generation like cpp preprosseur://\index{macro}
this is usefull to make automatic diff
exemple: 
real cc=2;
macro f(u) (cc*(exp(u)-1)) //
macro df(f) (cc*(exp(f)))  //
real u=1;
cout << (cc*(exp(u)-1)) << endl;
cout << f(u) << endl;
cout << df(f(u)) << endl;

see macro.edp  for more detail:
  
22/01/2003 
in file lex.cpp add .c_str() for compilation problem 
on g++ 2.95   
  
15/04/2003
add new finite element:
 P1b  P1 + Bubble  //\index{P1b}
 P1dc P1 discontinious //\index{P1dc}
 P2dc P2 discontinious //\index{P2dc}

correct bug periodic BC with vectorial FESpace, 
add the code.

Make version 1.31
-----------------  

23/04/2003
  small correction to compile with  g++ 2.95.2 in eigen value tools

26/04/2003
  add function triangulate(filename) to build the //\index{triangulate}
  Delaunay Triangulation of a set of points in R^2.
 to build a function form a set of : x y f(x,y)
 see exemple mesh.edp  


make version 1.32 (29/04/2003)
-----------------

 -add optimization in automatique interpolation 
  CPU of all tutoral exemples 172 s( mon my Mac) new version 1.33 (with graphics)
  CPU of all tutoral exemples 167 s( mon my Mac) new version 1.33 (without graphics)
  CPU of all tutoral exemples 169 s( mon my Mac) new version 1.32 (without graphics)
  bofbof.
  
 -correct bug in macro generation, a macro existe just in a block {..}.

 //  lex.cpp  
    if ( ret =='{') { /*cout << " listMacroDef->push_back"<< endl; */
      listMacroDef->push_back( MapMacroDef() );}
  else if (ret == '}') {/*cout << " listMacroDef->pop_back"<< endl;  */
       listMacroDef->pop_back( );}

 -small correction to be compatible with g++ version 3.3

Make version 1.33 01/07/2003
-----------------------------

 - small correction in parallelempi.cpp add a ; line 159

 - comment line 519 in file AFunction.hpp (pb with g++ 3.3.1)
	 // operator Expression() const {return f;}
  (double definition)see line 527
	  operator  const  E_F0 *  () const {return f;}

 - correct Makefile for mpi version
 

21/08/2003:
 -  Bug in optmization in case on non constant robin boundary condition
    correct 
 -  add grey=1  ion plot command to make  grey plot, and //\index{grey=}\index{plot!grey=}
   correct small mistake ( on mac and X11 , ...)
 
 
Make version 1.34 (22/08/2003)
------------------------------

16/09/2003
 - bug in local variable stack if the size is larger the 8 ( complex)
  complex a;real b;
  a=0;b=1; 
  // here a is 0+i; 
  correction is:
  voila la correction dans AFunction.hpp vers la ligne 1486: 
  template<class T>
  inline Type_Expr  NewVariable(aType t,size_t &off) 
   { 
     size_t o= align8(off);//  align    
   //  off += t->un\_ptr\_type->size;
   // bug    off += t->size;
    off += t->un_ptr_type->size; // correction 
    return  Type_Expr(t,new T(o,t));
   }

02/11/2003
  -correct probleme of renumbering the traingles of a  mesh 
   when reading in the bamg software (with readmesh command).
   This implies error when we restore mesh and non P1 finite element
   solution, see example saveandrestore.edp. 
  
28/11/2003
  -correction of bug in window version 
   add the umfpack sparce linear solver (this solver have some problem
   in some case), so I do'nt put this one in default linearsolver. 
   remark, I think is due to the way of taking Dirichlet boundary condition
   Huge value on diagonal (tgv=1e30) and Stokes matrice.//\index{problem!tgv=}\index{solve!tgv=}

  -put this file on the web
  -put on the web 
  -the codewarroir projet to build arpack ands umfpack lib.
  
Make version 1.36   
-------------------

 - Change the graphic window in Window xx version

8/12/2003
 - repare in mpi version  get mesh via mpi
 - forget build quadtree soo the interpolation bugs
 - add 4 line in file parallelempi.cpp in mesh serialization (recivied
   //  add 3 line FH 08/12/2003  forget build quadtree sorry      
       Fem2D::R2 Pn,Px;
       a->BoundingBox(Pn,Px);
       a->quadtree=new FQuadTree(m,Pn,Px,m->nv);
      
18/12/2003
  - add in mpi version://\index{broadcast}
    broadcast(processor(1),th); //  broadcast  th from proc 1 to all other.
    see the mpi exemple
    change the precision to 6 to 12 is savemesh.
  - add tool to change the default precision on ostream or ofstream 
    with the C++ syntaxe
    see saverestore.edp example.
    cout.precision(12); //\index{precision}
  - add UMFPACK linear solver ( not well test)   //\index{UMFPACK}
    http://www.cise.ufl.edu/research/sparse/umfpack
  - add full matrix with few operator //\index{matrix!full}
     real [int,int] A(10,10); 
     A= 2;
     A(5,5) = 2;
     cout << A << endl;
  -add array of mesh //\index{array!mesh}

08/01/2004
   - merge all mesh example in one file call mesh.edp
   - add discontinuous Galerkin method (see LapDG2.edp example)
   - add syntaxe to get mesh information  (see end of mesh.edp exemple)
   - add meshsplit  function to make conformal recusive locat mesh spliting //\index{meshsplit}
     (see mesh.edp example)
   - add dynamic load via dlopen  see load.edp in example++-load  //\index{dynamic load}

Make version 1.37 
-----------------

15/01/2004
  - change metrix= in metric= the in adapted mesh metric=[m11,m12,m22]//  \index{meshadapt!metric=}
    (change the ordre to compatible with the fonction order with IsMetric=1)

02/02/2004
  - change printing in gmres algorithme
  - print the size of matrix 
06/02/2004
  - change intalledges  in change of discontinuous Galerkin loop also boundary edge//\index{intalledges}
	 jump(u) is external - internal value of u with normal go to internal to external 
	 jump(u)  on boundary is -internal value of u //\index{jump}
	 average(u)  on boundary is internal value of u  //\index{average}
  - add nTonEdge to get the number of Triangles which see the  current edge//\index{nTonEdge}
  so see the new LapDG2.edp example for full detail
07/02/2004
  - correct bug in real[string] map; // map array  \index{array!string}
        change in get_element and operator <  of String 
  - add int array 
Make Version 1.38
----------------
  - remove (void) line 14 of throwassert.hpp file (erreur compile g++3.3.5 )
  make change in macro expansion of shell (no perfect to day)
     
 16/04/2004 
  - add matrix tools 
    bluid interpolation interpolation matric from a FEspace VH  to an other FEspace Vh
       matrix Ih=matrix B= interplotematrix(VH,Vh); 
	// where  Vh correspond to  line and Vh to column 
       the named parameters can be 
          t= true or false  (to bluid the transpose or not matrix)
          op=0 ,1 or 2 (to build the interpolation of value, dx,dy )
          inside=true or false  (to remove or not  all ouside interpolation  quadrature point)
     build diagonal  sparce  matrix (type is morse)
     do the matrice product of to sparce matrix (type is morse)
   add build a sparce matrix from a full matrix so if you have install UMFPACK solver
     it is possible to solve systeme with full matrix.
   add set function to change the solver 
   see exemple  sparce-matrix.edp 
	   
  - correct bug flag ouside of mesh 
    add line in file fem.cpp line 864
       outside=true; 
     so some time the P0 interpolatation is no zero
     add new king of mesh of multiplicator data :
     mesh emptyTh=emptymesh(Th); // to build a mesh with no internal point 
     see mesh.edp example

Make Version 1.40
-----------------

  - add les linear combination of sparce matrice
  - set a sparce solver to a sparce matrice (to day just UMFPACK)
  - transforme a full matrix in sparce matrix
  - add istream f("toto");
     f.good() or f.EOF to test state the file 
     remark: the state is set after the read so the previous value is wrong

02/06/2004
----------
  -  correction in call macro with string "..." parameter  
24/06/2004
----------
   add tools to bluid periodic adapmesh  see sphere.edp of exemple
   add HaveUMFPACK global variable see sparse-matrix.edp exemple   
   Change all the structure of the software 
   Use ./configure to build all the make file see (README)
   you can build the Window version with g++ under cygwin 
   ( http: cygwin.... )

Make Version 1.41 
-----------------

07/07/2004 
----------
an anonymous CVS server is avialable to get FreeFem++ source
cvs -d :pserver:anonymous@idared.ann.jussieu.fr:/Users/pubcvs/cvs login
(password = freefem++)
cvs -d :pserver:anonymous@idared.ann.jussieu.fr:/Users/pubcvs/cvs freefem++ co
the TAG release_1_41_before_packaging is created

30/08/04
--------
 Correct  divide by 0 in plot instruction  when the bounding box is flat.
 Set default solver to LU because UMFPACK sometime by bad result.
 Correct all g++-3.4 error
 Optimize Choleski and Crout solver (divide cpu time by two on pentium)
 Add stuff for adding new finite element due to the new software achitecture.

31/08/04
--------
 Add string[string] array
 correct bug in  macro expansion 
     macro parameter will be not expanded 
  example of bug:
     macro a(i) i //
     macro b  a(x)  //  bug here 
     b = 1 ; // we get "i=1" or we want "x =1"

Make Version 1.42
-----------------

11/10/04
--------
 Add Finite element with complex value, and matrix<complex> 
 see sparse-cmatrix.edp  and  FEComplex.edp files
 for a full examples

 Vh<complex> ur; 
 varf av(u,v)=int(Th)(u*v*(1i+1));
 Matrix<complex> A = vav(Vh,Vh); 
 // warning don't mixte Matrix<complex> and Matrix<real> in a expression     
 
19/10/04
--------
  correct UMFPACK driver problem, ands set this solver as a default 
    solver.
  add finite element connectivite inquire ice FE.epd exemple 
  fespace Wh(Th,P2);
   Wh.nt //  given the number of element 
   Wh.ndof //  given the number of degree of freedom
   Wh.ndofK //  given the number of degree of freedom on one element 
   Wh(k,i)  // given the number of i  degree of freedom of element k.
   //  with $0 <= i <  Wh.ndofK $ and  $0 <= k <  Wh.nt $ 

}
  build the source and compile version 1.43 
01/11/04
--------
   correct problem on period adapted mesh if orientation are reverse.
   add cvs tag release_1_43
   Now  the current version is 1.44 (CVS)

04/11/004
---------
   correct problem in LinearGMRES and LinearGC 
   in LinearCG algorithme for solving A*x = b0+b
   the matrix function can compute A*x or A*x-b0 ,
   and the other part b of the right end side can  exist or not.
   But in LinearGMRES must the function must compute A*x and 
   b0 can't exist. 
   see algo.edp  exist for  a full example

06/12/2004
__________
  change  function name interplotematrix to interpolate
  correct  bug introduce in 04/12 change
  a new graphic FreeFem++-cs: integrated development environment (located in src/ide)
  see REAME and maunal-full.pdf
  add new examples++-tutorial
  mat_interpol.edp  # to test interpolate function
  shur-comp.edp  # a shur complement domaine decomposition

11/12/2004
 TAG release_1_44
 now the current version is 1.45

29/12/2004  
   add concat operator # in macro generator.

04/01/2005
   add new quadrature formular on edge (a,b) :qf1pElump  : 1/2(f(a)+f(b))*length(ab)

05/01/2005
  correction bug  unset FE variable dans le .edp   =>
  use a null pointeur (in sol) to set the *X  array in  problem.cpp
   (*X)[K(df)]= (*sol[kfe])[SK(kdf)] ;  
   make some time make a seg trap error. 
06/01/2005
   rewrite the macro generation tool to be more to suppress some bug
   in argument subtition
   correct error in line numbering in case of newline in string
   cosmetic change in output 

20/01/2005
   count () in macro parameter to handle   couple of () in macro parameter.
   macro sum(a,b) (a+b); 
   sum((1),2) // now works and given (1)+2
   sum(atan2(2,1),2) // now works and given atan2(2,1)+2
   
   correct bug in linear combination of sparce matrix:
   the correction is:
    change line 1069, in file MatriceCreuse_tpl.hpp
           mij[make_pair(i,j)] = coef*a[k];
    to
           mij[make_pair(i,j)] += coef*a[k];
    
    Correct a segfault if second derivative of test function exist in 
    problem definition.  The Change in problem.cpp:
    resize : KN<double> buf(Vh.MaximalNbOfDF()*3*Vh.N);
    to     : KN<double> buf(Vh.MaximalNbOfDF()*last_operatortype*Vh.N);

   
24/01/2005
   add  named parameter nbtx=..  in buildmesh  function to change the default 
   maximal number of vertex in the build mesh.

26/01/2005
   correct pb with  --disable-pdf in configure.ac
   correct pdflatex and latex compilation 
   correct  FreeFem++.app problem when usind in a shell script FreeFem++-CoCoa
   correct web site and distrib file  freefem++-1.45-2.tar.gz

02/02/2005
   correct problem with socket in FLTK in freefem++-cs  (not wet finish) ALH
   add nbvx=  named parameter to change the default maximum number vertices in creted mesh
   in builmesh (see mesh.edp exemple)  
   
10/02/2005
   add 2 new quadrature formular qf7pT and qf9pT with respectively 15 and 21 points
   add  P2b a new finite element  : P2 + bubble 
   make drag and drop on ide version + copy paste 

14/02/2005
   create a error  when you do   uh = ..  when uh is a  componant of a vectorial fe 
     element function (for exemple fespace Vh(Th,TR), Vh [uh,vh]; uh = 1 (error here ;)
     because it's impossible to build   uh and vh independantly.

17/02/2005
   FreeFem++-cs: Communication speed between client and server has been
   increased ten-fold (ALH)

   
23/02/2005
     add jump and mean of complex function  (FH)

23/02/2005
    FreeFem++-cs: grammar-driven syntax highlighting works on
    (examples++-tutorial/...) Laplace.edp, adapt.edp and
    adaptindicatorP1.edp (ALH)
