diff --git a/contrib/bamg/bamglib/Mesh2.cpp b/contrib/bamg/bamglib/Mesh2.cpp
index ebfac325dfb11afac7f8bd672393b2403d313d92..101df21b0445fdb463e9de50a8140500491801c6 100644
--- a/contrib/bamg/bamglib/Mesh2.cpp
+++ b/contrib/bamg/bamglib/Mesh2.cpp
@@ -1,26 +1,26 @@
 // -*- Mode : c++ -*-
 //
-// SUMMARY  :      
-// USAGE    :        
-// ORG      : 
+// SUMMARY  :
+// USAGE    :
+// ORG      :
 // AUTHOR   : Frederic Hecht
 // E-MAIL   : hecht@ann.jussieu.fr
 //
 
 /*
- 
+
  This file is part of Freefem++
- 
+
  Freefem++ is free software; you can redistribute it and/or modify
  it under the terms of the GNU Lesser General Public License as published by
  the Free Software Foundation; either version 2.1 of the License, or
  (at your option) any later version.
- 
+
  Freefem++  is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU Lesser General Public License for more details.
- 
+
  You should have received a copy of the GNU Lesser General Public License
  along with Freefem++; if not, write to the Free Software
  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
@@ -36,10 +36,10 @@
 extern bool withrgraphique;
 #include <stdio.h>
 #include <string.h>
-#include <math.h> 
+#include <math.h>
 #include <time.h>
 #include <iostream>
-using namespace std; 
+using namespace std;
 
 #include "Mesh2.h"
 #include "QuadTree.h"
@@ -49,8 +49,8 @@ namespace bamg {
 
 
 #ifdef DEBUG1
-extern int SHOW ; // for debugging 
-int SHOW = 0; // for debugging 
+extern int SHOW ; // for debugging
+int SHOW = 0; // for debugging
 
 #endif
 
@@ -64,13 +64,13 @@ int hinterpole=1;
 long NbUnSwap =0;
 int  ForDebugging = 0;
 const Direction NoDirOfSearch = Direction();
-#ifndef NDEBUG 
-inline void MyAssert(int i,char*ex,char * file,long line) 
+#ifndef NDEBUG
+inline void MyAssert(int i,char*ex,char * file,long line)
 {
   if( i) {
     cerr << "Error Assert:" << ex << " in " << file << " line: " << line << endl;
 #ifdef  NOTFREEFEM
-    exit(1); 
+    exit(1);
 #else
     throw(ErrorExec("exit",1000));
 #endif
@@ -84,23 +84,23 @@ Int4 AGoodNumberPrimeWith(Int4 n)
 				 567890431L,  567890437L,  567890461L,  567890471L,
 				 567890483L,  567890489L,  567890497L,  567890507L,
 				 567890591L,  567890599L,  567890621L,  567890629L , 0};
-  
+
   Int4 o = 0;
   Int4 pi = BigPrimeNumber[1];
   for (int i=0; BigPrimeNumber[i]; i++) {
     Int4 r = BigPrimeNumber[i] % n;
     Int4 oo = Min(Min(r,n-r),Min(Abs(n-2*r),Abs(n-3*r)));
-    if ( o < oo) 
+    if ( o < oo)
       o=oo,pi=BigPrimeNumber[i];}
   //  cout << " AGoodNumberPrimeWith " << n << " " <<pi << " "<< o << endl;
-  return pi; 
+  return pi;
 }
 
 class Triangles;
-void MeshError(int Err,Triangles *Th){ 
+void MeshError(int Err,Triangles *Th){
  cerr << " Fatal error in the meshgenerator " << Err << endl ;
 #ifdef  NOTFREEFEM
-    exit(1); 
+    exit(1);
 #else
   throw(ErrorMesh("Bamg",Err,Th));
 #endif
@@ -109,42 +109,42 @@ void MeshError(int Err,Triangles *Th){
  ostream& operator <<(ostream& f, const  Triangle & ta)
   {
     if(CurrentTh)
-      f << "[" << CurrentTh->Number(ta) << "::" 
-     <<  CurrentTh->Number(ta.ns[0]) << "," 
-     <<  CurrentTh->Number(ta.ns[1]) << "," 
-     <<  CurrentTh->Number(ta.ns[2]) << "," 
-     << "{" <<  CurrentTh->Number(ta.at[0]) << " " << ta.aa[0] << "} " 
-     << "{" <<  CurrentTh->Number(ta.at[1]) << " " << ta.aa[1] << "} " 
-     << "{" <<  CurrentTh->Number(ta.at[2]) << " " << ta.aa[2] << "} " 
+      f << "[" << CurrentTh->Number(ta) << "::"
+     <<  CurrentTh->Number(ta.ns[0]) << ","
+     <<  CurrentTh->Number(ta.ns[1]) << ","
+     <<  CurrentTh->Number(ta.ns[2]) << ","
+     << "{" <<  CurrentTh->Number(ta.at[0]) << " " << ta.aa[0] << "} "
+     << "{" <<  CurrentTh->Number(ta.at[1]) << " " << ta.aa[1] << "} "
+     << "{" <<  CurrentTh->Number(ta.at[2]) << " " << ta.aa[2] << "} "
      << "]" ;
      else
-       f << "[" 
-     << ta.ns[0] << "," 
-     << ta.ns[1] << "," 
-     << ta.ns[2] << "," 
-     << "{" << ta.at[0] << " " << ta.aa[0] << "} " 
-     << "{" << ta.at[1] << " " << ta.aa[1] << "} " 
-     << "{" << ta.at[2] << " " << ta.aa[2] << "} " 
+       f << "["
+     << ta.ns[0] << ","
+     << ta.ns[1] << ","
+     << ta.ns[2] << ","
+     << "{" << ta.at[0] << " " << ta.aa[0] << "} "
+     << "{" << ta.at[1] << " " << ta.aa[1] << "} "
+     << "{" << ta.at[2] << " " << ta.aa[2] << "} "
      << "]" ;
    return f;}
 
 void  swap(Triangle *t1,Int1 a1,
                  Triangle *t2,Int1 a2,
                  Vertex *s1,Vertex *s2,Icoor2 det1,Icoor2 det2)
-{ // swap 
+{ // swap
   // --------------------------------------------------------------
   // Int1 a2=aa[a];// les 2 numero de l arete dans les 2 triangles
-  //                               
-  //               sb                     sb    
+  //
+  //               sb                     sb
   //             / | \                   /   \                      !
   //         as1/  |  \                 /a2   \                     !
   //           /   |   \               /    t2 \                    !
   //       s1 /t1  | t2 \s2  -->   s1 /___as2___\s2                 !
-  //          \  a1|a2  /             \   as1   /  
-  //           \   |   /               \ t1    /   
-  //            \  |  / as2             \   a1/    
-  //             \ | /                   \   /     
-  //              sa                       sa   
+  //          \  a1|a2  /             \   as1   /
+  //           \   |   /               \ t1    /
+  //            \  |  / as2             \   a1/
+  //             \ | /                   \   /
+  //              sa                       sa
   //  -------------------------------------------------------------
   int as1 = NextEdge[a1];
   int as2 = NextEdge[a2];
@@ -161,7 +161,7 @@ void  swap(Triangle *t1,Int1 a1,
 #endif
   (*t1)(VerticesOfTriangularEdge[a1][1]) = s2 ; // avant sb
   (*t2)(VerticesOfTriangularEdge[a2][1]) = s1  ; // avant sa
-  // mise a jour des 2 adjacences externes 
+  // mise a jour des 2 adjacences externes
   TriangleAdjacent taas1 = t1->Adj(as1),
     taas2 = t2->Adj(as2),
     tas1(t1,as1), tas2(t2,as2),
@@ -174,10 +174,10 @@ void  swap(Triangle *t1,Int1 a1,
   taas1.SetAdj2(ta2, taas1.GetAllFlag_UnSwap());
    // externe bas droite
   taas2.SetAdj2(ta1, taas2.GetAllFlag_UnSwap());
-  // remove the Mark  UnMarkSwap 
+  // remove the Mark  UnMarkSwap
   t1->SetUnMarkUnSwap(ap1);
   t2->SetUnMarkUnSwap(ap2);
-  // interne 
+  // interne
   tas1.SetAdj2(tas2);
 
   t1->det = det1;
@@ -189,17 +189,17 @@ void  swap(Triangle *t1,Int1 a1,
   t1->check();
   t2->check();
 #endif
-#ifdef DRAWING1 
+#ifdef DRAWING1
   couleur(1);
   t1->Draw();
   t2->Draw();
-#endif 
+#endif
 #ifdef DRAWING1
   if(  CurrentTh)
     CurrentTh->inquire();
 #endif
 
-} // end swap 
+} // end swap
 
 
 
@@ -209,26 +209,26 @@ Int4 FindTriangle(Triangles &Th, Real8 x, Real8 y, double* a,int & inside)
  {
    CurrentTh=&Th;
    assert(&Th);
-   I2 I = Th.toI2(R2(Min(Max(Th.pmin.x,x),Th.pmax.x),Min(Max(Th.pmin.y,y),Th.pmax.y))); 
+   I2 I = Th.toI2(R2(Min(Max(Th.pmin.x,x),Th.pmax.x),Min(Max(Th.pmin.y,y),Th.pmax.y)));
    Icoor2 dete[3];
    Triangle & tb = *Th.FindTriangleContening(I,dete);
-   
-   if  (tb.link) 
+
+   if  (tb.link)
      { // internal point in a true triangles
        a[0]= (Real8) dete[0]/ tb.det;
        a[1]= (Real8) dete[1] / tb.det;
        a[2] = (Real8) dete[2] / tb.det;
-	 inside = 1;	 
+	 inside = 1;
 	 return Th.Number(tb);
-     } 
-   else 
+     }
+   else
      {
-       inside = 0; 
+       inside = 0;
        double aa,bb;
-       TriangleAdjacent  ta=CloseBoundaryEdgeV2(I,&tb,aa,bb);	 
+       TriangleAdjacent  ta=CloseBoundaryEdgeV2(I,&tb,aa,bb);
        int k = ta;
        Triangle * tc = ta;
-       if (!tc->link) 
+       if (!tc->link)
 	 { ta = ta.Adj();
 	 tc=ta;
 	 k = ta;
@@ -244,18 +244,18 @@ Int4 FindTriangle(Triangles &Th, Real8 x, Real8 y, double* a,int & inside)
 
 
 TriangleAdjacent CloseBoundaryEdge(I2 A,Triangle *t, double &a,double &b) {
-// 
-  //  cout << " - ";   	 
+//
+  //  cout << " - ";
   int k=(*t)(0) ?  ((  (*t)(1) ? ( (*t)(2) ? -1 : 2) : 1  )) : 0;
   int dir=0;
   assert(k>=0);
-  int kkk=0;  
+  int kkk=0;
   Icoor2 IJ_IA,IJ_AJ;
-  TriangleAdjacent edge(t,OppositeEdge[k]);          
-  for (;;edge = dir >0 ? Next(Adj(Next(edge))) : Previous(Adj(Previous(edge)))) 
-   {  
-   
-    assert(kkk++<1000);      
+  TriangleAdjacent edge(t,OppositeEdge[k]);
+  for (;;edge = dir >0 ? Next(Adj(Next(edge))) : Previous(Adj(Previous(edge))))
+   {
+
+    assert(kkk++<1000);
     Vertex  &vI =  *edge.EdgeVertex(0);
     Vertex  &vJ =  *edge.EdgeVertex(1);
     I2 I=vI, J=vJ, IJ= J-I;
@@ -264,10 +264,10 @@ TriangleAdjacent CloseBoundaryEdge(I2 A,Triangle *t, double &a,double &b) {
     if (IJ_IA<0) {
      if (dir>0) {a=1;b=0;return edge;}// change of signe => I
      else {dir=-1;
-        continue;}};// go in direction i 
+        continue;}};// go in direction i
     IJ_AJ = (IJ ,(J-A));
     if (IJ_AJ<0) {
-    if(dir<0)  {a=0;b=1;return edge;}            
+    if(dir<0)  {a=0;b=1;return edge;}
     else {dir = 1;
        continue;}}// go in direction j
     double IJ2 = IJ_IA + IJ_AJ;
@@ -276,7 +276,7 @@ TriangleAdjacent CloseBoundaryEdge(I2 A,Triangle *t, double &a,double &b) {
     b= IJ_IA/IJ2;
     //    cout<< "CloseBoundaryEdge a = " << a << " b= " << b << endl;
     return edge;
-  } 
+  }
 }
 
 TriangleAdjacent Triangle::FindBoundaryEdge(int i) const
@@ -288,53 +288,53 @@ TriangleAdjacent Triangle::FindBoundaryEdge(int i) const
   Triangle   *t = (Triangle *) this , *ttc;
   int k=0,j = EdgesVertexTriangle[i][0],jc;
   int exterieur  = !link  ;
-  
-  do 
+
+  do
     {
       int exterieurp = exterieur;
-      k++; 
+      k++;
 #ifdef DEBUG
       assert( s == & (*t)[VerticesOfTriangularEdge[j][1]] );
 #endif
       ttc =  t->at[j];
       exterieur = !ttc->link;
-      if (exterieur+exterieurp == 1) 
+      if (exterieur+exterieurp == 1)
 	return TriangleAdjacent(t,j);
       jc = NextEdge[t->aa[j]&3];
       t = ttc;
       j = NextEdge[jc];
       assert(k<2000);
-    } while ( (this!= t)); 
+    } while ( (this!= t));
   return TriangleAdjacent(0,0);
- 
+
 }
 
 
-TriangleAdjacent CloseBoundaryEdgeV2(I2 C,Triangle *t, double &a,double &b) 
-{ 
- // walk around the vertex 
+TriangleAdjacent CloseBoundaryEdgeV2(I2 C,Triangle *t, double &a,double &b)
+{
+ // walk around the vertex
  // version 2 for remove the probleme if we fill the hole
   //int bug=1;
   //  Triangle *torigine = t;
   // restart:
   //   int dir=0;
   assert(t->link == 0);
-  // to have a starting edges 
-  // try the 3 edge bourna-- in case of internal hole 
-  // and choice  the best 
-  // 
-  // 
+  // to have a starting edges
+  // try the 3 edge bourna-- in case of internal hole
+  // and choice  the best
+  //
+  //
   // the probleme is in case of  the fine and long internal hole
   // for exemple neart the training edge of a wing
-  // 
+  //
   Vertex * s=0,*s1=0, *s0=0;
   Icoor2 imax = MaxICoor22;
   Icoor2 l0 = imax,l1 = imax;
   double dd2 =  imax;// infinity
-  TriangleAdjacent er; 
+  TriangleAdjacent er;
   int  cas=-2;
   for (int j=0;j<3;j++)
-    { 
+    {
       TriangleAdjacent ta=t->FindBoundaryEdge(j);
       if  (! (Triangle *) ta) continue;
       s0 = ta.EdgeVertex(0);
@@ -345,11 +345,11 @@ TriangleAdjacent CloseBoundaryEdgeV2(I2 C,Triangle *t, double &a,double &b)
       Icoor2  ACAC = (AC,AC), BCBC = (BC,BC);
       Icoor2  AB2  =   Norme2_2(AB); //  ||AB||^2
       Icoor2  ABAC  =   (AB,AC);         //  AB.AC|
-      
+
       double d2;
       if ( ABAC < 0 )   // DIST A
         {
-           if ( (d2=(double) ACAC)  <  dd2) 
+           if ( (d2=(double) ACAC)  <  dd2)
              {
 	       //  cout << " A "  << d2  << " " <<  dd2;
                er = ta;
@@ -361,7 +361,7 @@ TriangleAdjacent CloseBoundaryEdgeV2(I2 C,Triangle *t, double &a,double &b)
         }
       else if (ABAC > AB2)  // DIST B
         {
-           if ( (d2=(double) BCBC)  <  dd2) 
+           if ( (d2=(double) BCBC)  <  dd2)
              {
 	       // cout << " B "  << d2  << " " <<  dd2;
                dd2 = d2;
@@ -373,16 +373,16 @@ TriangleAdjacent CloseBoundaryEdgeV2(I2 C,Triangle *t, double &a,double &b)
              }
         }
       else  // DIST AB
-        { 
+        {
 
-          double det_2 =  (double) Det(AB,AC); 
+          double det_2 =  (double) Det(AB,AC);
           det_2 *= det_2; // square of area*2 of triangle ABC
-          d2 = det_2/ (double) AB2; // hauteur^2 in C of of triangle ABC      
-	  //	  cout << " AB " << d2 << " " << dd2 
-	  //      << " " << CurrentTh->Number(ta.EdgeVertex(0)) 
+          d2 = det_2/ (double) AB2; // hauteur^2 in C of of triangle ABC
+	  //	  cout << " AB " << d2 << " " << dd2
+	  //      << " " << CurrentTh->Number(ta.EdgeVertex(0))
 	  //     << " " << CurrentTh->Number(ta.EdgeVertex(1)) << " " ;
 
-          if (d2 < dd2) 
+          if (d2 < dd2)
 	       {
 	         dd2 = d2;
 	         er = ta;
@@ -401,33 +401,33 @@ TriangleAdjacent CloseBoundaryEdgeV2(I2 C,Triangle *t, double &a,double &b)
    // l1 = ||C s1||  , l0 = ||C s0||
    // where s0,s1 are the vertex of the edge er
 
-   if ( s) 
-     { 
+   if ( s)
+     {
        t=er;
-       TriangleAdjacent edge(er); 
-       
-       int kkk=0;  
+       TriangleAdjacent edge(er);
+
+       int kkk=0;
        int linkp = t->link == 0;
-       
+
        Triangle * tt=t=edge=Adj(Previous(edge));
        //  cout << CurrentTh->Number(t) << " " << linkp << endl;
        do  {  // loop around vertex s
-	 
+
 	 assert(edge.EdgeVertex(0)==s && kkk++<10000);
-	 
+
 	 int link = tt->link == 0;
-	 //	 cout << CurrentTh->Number(tt) << " " << link << " " << CurrentTh->Number(s) 
-	 //	      << " " << CurrentTh->Number(er.EdgeVertex(0)) 
-	 //	      << " " << CurrentTh->Number(er.EdgeVertex(1)) 
-	 //	      << " " << CurrentTh->Number(edge.EdgeVertex(0)) 
-	 //	      << " " << CurrentTh->Number(edge.EdgeVertex(1)) 
+	 //	 cout << CurrentTh->Number(tt) << " " << link << " " << CurrentTh->Number(s)
+	 //	      << " " << CurrentTh->Number(er.EdgeVertex(0))
+	 //	      << " " << CurrentTh->Number(er.EdgeVertex(1))
+	 //	      << " " << CurrentTh->Number(edge.EdgeVertex(0))
+	 //	      << " " << CurrentTh->Number(edge.EdgeVertex(1))
 	 //	      <<  endl;
-	 if ((link + linkp) == 1) 
-	   { // a boundary edge 
+	 if ((link + linkp) == 1)
+	   { // a boundary edge
 	     Vertex * st = edge.EdgeVertex(1);
 	     I2 I=*st;
 	     Icoor2  ll = Norme2_2 (C-I);
-	     if (ll < l1) {  // the other vertex is neart 
+	     if (ll < l1) {  // the other vertex is neart
 	       s1=st;
 	       l1=ll;
 	       er = edge;
@@ -443,7 +443,7 @@ TriangleAdjacent CloseBoundaryEdgeV2(I2 C,Triangle *t, double &a,double &b)
 	       }
 	     }
 	   }
-	 
+
 	 linkp=link;
 	 edge=Adj(Previous(edge));
 	 tt = edge;
@@ -455,23 +455,23 @@ TriangleAdjacent CloseBoundaryEdgeV2(I2 C,Triangle *t, double &a,double &b)
        I2 AB=B-A,AC=C-A,CB=B-C;
        double aa =  (double) (AB,AC);
        double bb =  (double) (AB,CB);
-       //  cout << " " << aa << " " << bb 
-       //    << " " << CurrentTh->Number(er.EdgeVertex(0)) 
+       //  cout << " " << aa << " " << bb
+       //    << " " << CurrentTh->Number(er.EdgeVertex(0))
        //	    << " " << CurrentTh->Number(er.EdgeVertex(1)) ;
        if (aa<0)       a=1,b=0;
        else if(bb<0)   a=0,b=1;
-       else  
+       else
 	 {
 	   a  = bb/(aa+bb);
 	   b  = aa/(aa+bb);
 	 }
      }
-   
-   //   cout <<" return= " <<  CurrentTh->Number(er.EdgeVertex(0)) << " " 
-   //	<<  CurrentTh->Number(er.EdgeVertex(1)) << " " << a 
+
+   //   cout <<" return= " <<  CurrentTh->Number(er.EdgeVertex(0)) << " "
+   //	<<  CurrentTh->Number(er.EdgeVertex(1)) << " " << a
    //	<< " " << b <<" " << l0 << " " <<l1 <<endl;
    return er;
-} 
+}
 
 
 
@@ -509,22 +509,22 @@ void ListofIntersectionTriangles::SplitEdge(const Triangles & Bh,
   //  int OnAVertices =0;
   Icoor2 dt[3];
   I2 a = Bh.toI2(A) ,b= Bh.toI2(B);// compute  the Icoor a,b
-  I2 vi,vj;  
+  I2 vi,vj;
   int iedge =-1;// not a edge
 
-  if(nbegin)  {// optimisation 
+  if(nbegin)  {// optimisation
     // we suppose  knowing the starting  triangle
     t=tbegin=lIntTria[ilast=(Size-1)].t;
-    if (tbegin->det>=0) 
-    ifirst = ilast;}  
-  else {// not optimisation 
+    if (tbegin->det>=0)
+    ifirst = ilast;}
+  else {// not optimisation
     init();
     t=tbegin = Bh.FindTriangleContening(a,deta);
     //    if(SHOW) cout <<t << " " << Real8(deta[0])/t->det<< " " << Real8(deta[1])/t->det
     //		  << " " << Real8(deta[2])/t->det << endl;
     if( t->det>=0)
       ilast=NewItem(t,Real8(deta[0])/t->det,Real8(deta[1])/t->det,Real8(deta[2])/t->det);
-    else 
+    else
      {// find the nearest boundary edge  of the vertex A
       // find a edge or such normal projection a the edge IJ is on the edge
       //   <=> IJ.IA >=0 && IJ.AJ >=0
@@ -543,7 +543,7 @@ void ListofIntersectionTriangles::SplitEdge(const Triangles & Bh,
 	return;
       }
      } // find the nearest boundary edge  of the vertex A
-   } // end not optimisation 
+   } // end not optimisation
   if (t->det<0) {  // outside departure
     while (t->det <0) { // intersection boundary edge and a,b,
       k=(*t)(0) ?  ((  (*t)(1) ? ( (*t)(2) ? -1 : 2) : 1  )) : 0;
@@ -557,20 +557,20 @@ void ListofIntersectionTriangles::SplitEdge(const Triangles & Bh,
       detj = bamg::det(a,b,vj);
      //  if(SHOW) {  penthickness(3);
 // 	Move(vi);Line(vj);CurrentTh->inquire();penthickness(1);
-//         cout << Bh.Number(tbegin) << " " << Bh.Number(t) << " i= " << i <<" j= " <<  j << " k=" << k 
-//       	   << " deti= " << deti << " detj= " << detj 
+//         cout << Bh.Number(tbegin) << " " << Bh.Number(t) << " i= " << i <<" j= " <<  j << " k=" << k
+//       	   << " deti= " << deti << " detj= " << detj
 // 	     << " v = " << Bh.Number((*t)[i]) << (*t)[i].r <<  " " << Bh.Number((*t)[j]) << (*t)[j].r  << endl;}
       if (deti>0) // go to  i direction on gamma
-	ocut = PreviousEdge[ocut];      
+	ocut = PreviousEdge[ocut];
       else if (detj<=0) // go to j direction on gamma
-	ocut = NextEdge[ocut];         
+	ocut = NextEdge[ocut];
       TriangleAdjacent tadj =t->Adj(ocut);
       t = tadj;
-      iedge= tadj; 
-      if (t == tbegin) { // 
+      iedge= tadj;
+      if (t == tbegin) { //
 	double ba,bb;
-	if (verbosity>7) 
-	  cout << "       SplitEdge: All the edge " << A << B << nbegin <<  det(vi,vj,b) 
+	if (verbosity>7)
+	  cout << "       SplitEdge: All the edge " << A << B << nbegin <<  det(vi,vj,b)
 	       << " deti= " << deti <<  " detj=" <<detj << endl;
 	TriangleAdjacent edge=CloseBoundaryEdge(a,t,ba,bb);
 	Vertex & v0 = *edge.EdgeVertex(0), & v1 = *edge.EdgeVertex(1);
@@ -594,12 +594,12 @@ void ListofIntersectionTriangles::SplitEdge(const Triangles & Bh,
 	Line(B);
         penthickness(1);
 	Bh.inquire();
-#endif	
+#endif
 	MeshError(997);*/
       }
     } //  end while (t->det <0)
     // theoriticaly we have: deti =<0 and detj>0
-  
+
       // computation of barycentric coor
     // test if the point b is on size on t
     // we revert vi,vj because vi,vj is def in Adj triangle
@@ -626,14 +626,14 @@ void ListofIntersectionTriangles::SplitEdge(const Triangles & Bh,
 	ilast=NewItem(t,ba[0],ba[1],ba[2]); }
   }  //  outside departure
 
-     
-   
+
+
   // recherche the intersection of [a,b] with Bh Mesh.
   // we know  a triangle ta contening the vertex a
   // we have 2 case for intersection [a,b] with a edge [A,B] of Bh
   // 1) the intersection point is in ]A,B[
   // 2)                        is A or B
-  // first version --- 
+  // first version ---
   for (;;) {
     //    t->Draw();
     if (iedge < 0) {
@@ -644,11 +644,11 @@ void ListofIntersectionTriangles::SplitEdge(const Triangles & Bh,
     else {
       i2 = iedge;
       i0 = NextEdge[i2];
-      i1 = NextEdge[i0]; 
+      i1 = NextEdge[i0];
       dt[VerticesOfTriangularEdge[iedge][0]] = detj;// we revert i,j because
       dt[VerticesOfTriangularEdge[iedge][1]] = deti;// we take the Triangle by the other side
       dt[iedge] = det(a,b,(*t)[OppositeVertex[iedge]]);}
-    
+
     // so we have just to see the transition from - to + of the det0..2 on edge of t
     // because we are going from a to b
     if       ((dt[i=VerticesOfTriangularEdge[i0][0]] <  0) &&
@@ -657,7 +657,7 @@ void ListofIntersectionTriangles::SplitEdge(const Triangles & Bh,
     else  if ((dt[i=VerticesOfTriangularEdge[i1][0]] <  0) &&
               (dt[j=VerticesOfTriangularEdge[i1][1]] >  0))
       ocut =i1;
-    else  if ((dt[i=VerticesOfTriangularEdge[i2][0]] <  0) && 
+    else  if ((dt[i=VerticesOfTriangularEdge[i2][0]] <  0) &&
               (dt[j=VerticesOfTriangularEdge[i2][1]] >  0))
       ocut =i2;
     else if   ((dt[i=VerticesOfTriangularEdge[i0][0]] == 0) &&
@@ -666,7 +666,7 @@ void ListofIntersectionTriangles::SplitEdge(const Triangles & Bh,
     else  if ((dt[i=VerticesOfTriangularEdge[i1][0]] == 0) &&
               (dt[j=VerticesOfTriangularEdge[i1][1]] >  0))
       ocut =i1;
-    else  if ((dt[i=VerticesOfTriangularEdge[i2][0]] == 0) && 
+    else  if ((dt[i=VerticesOfTriangularEdge[i2][0]] == 0) &&
               (dt[j=VerticesOfTriangularEdge[i2][1]] >  0))
       ocut =i2;
     else if   ((dt[i=VerticesOfTriangularEdge[i0][0]] <  0) &&
@@ -675,13 +675,13 @@ void ListofIntersectionTriangles::SplitEdge(const Triangles & Bh,
     else  if ((dt[i=VerticesOfTriangularEdge[i1][0]] <  0) &&
               (dt[j=VerticesOfTriangularEdge[i1][1]] == 0))
       ocut =i1;
-    else  if ((dt[i=VerticesOfTriangularEdge[i2][0]] <  0) && 
+    else  if ((dt[i=VerticesOfTriangularEdge[i2][0]] <  0) &&
               (dt[j=VerticesOfTriangularEdge[i2][1]] == 0))
       ocut =i2;
     else { //  On a edge (2 zero)
       k =0;
-      if (dt[0]) ocut=0,k++; 
-      if (dt[1]) ocut=1,k++; 
+      if (dt[0]) ocut=0,k++;
+      if (dt[1]) ocut=1,k++;
       if (dt[2]) ocut=2,k++;
       if(k == 1) {
         if (dt[ocut] >0) // triangle upper AB
@@ -691,8 +691,8 @@ void ListofIntersectionTriangles::SplitEdge(const Triangles & Bh,
       }
       else  {
         cerr << " Bug Split Edge " << endl;
-        cerr << " dt[0]= " << dt[0] 
-             << " dt[1]= " << dt[1] 
+        cerr << " dt[0]= " << dt[0]
+             << " dt[1]= " << dt[1]
              << " dt[2]= "<< dt[2] << endl;
         cerr << i0 << " " << i1 << " " << i2 << endl;
         cerr << " A = " << A << " B= " << B << endl;
@@ -700,36 +700,36 @@ void ListofIntersectionTriangles::SplitEdge(const Triangles & Bh,
         cerr << (*t)[0] << (*t)[1] << (*t)[0] << endl;
         cerr << " nbt = " << nbt << endl;
         MeshError(100);}}
-    
+
     k = OppositeVertex[ocut];
 
     Icoor2 detbij = bamg::det((*t)[i],(*t)[j],b);
 
-    
+
     if (detbij >= 0) { //we find the triangle contening b
       dt[0]=bamg::det((*t)[1],(*t)[2],b);
       dt[1]=bamg::det((*t)[2],(*t)[0],b);
       dt[2]=bamg::det((*t)[0],(*t)[1],b);
-#ifdef DEBUG 
+#ifdef DEBUG
       assert(dt[0] >= 0);
       assert(dt[1] >= 0);
       assert(dt[2] >= 0);
 #endif
       Real8 dd = t->det;
-      NewItem(t,dt[0]/dd,dt[1]/dd,dt[2]/dd);      
+      NewItem(t,dt[0]/dd,dt[1]/dd,dt[2]/dd);
       return ;}
-    else { // next triangle by  adjacent by edge ocut 
+    else { // next triangle by  adjacent by edge ocut
       deti = dt[i];
       detj = dt[j];
       Real4 dij = detj-deti;
       ba[i] =  detj/dij;
       ba[j] = -deti/dij;
       ba[3-i-j ] = 0;
-      ilast=NewItem(t, ba[0],ba[1],ba[2]);      
-      
+      ilast=NewItem(t, ba[0],ba[1],ba[2]);
+
       TriangleAdjacent ta =t->Adj(ocut);
       t = ta;
-      iedge= ta; 
+      iedge= ta;
       if (t->det <= 0)  {
         double ba,bb;
         TriangleAdjacent edge=CloseBoundaryEdge(b,t,ba,bb);
@@ -738,20 +738,20 @@ void ListofIntersectionTriangles::SplitEdge(const Triangles & Bh,
 	// ajoute le 03 frev 1997 par F. hecht
         return;
         }
-     }// we  go outside of omega 
+     }// we  go outside of omega
   } // for(;;)
- 
-   
+
+
 } // routine SplitEdge
 
 
-int  ListofIntersectionTriangles::NewItem(Triangle * tt,Real8 d0,Real8 d1,Real8 d2) { 
+int  ListofIntersectionTriangles::NewItem(Triangle * tt,Real8 d0,Real8 d1,Real8 d2) {
   register int n;
   R2 x(0,0);
   if ( d0) x =      (*tt)[0].r * d0;
   if ( d1) x = x +  (*tt)[1].r * d1;
   if ( d2) x = x +  (*tt)[2].r * d2;
-  // newer add same point 
+  // newer add same point
   if(!Size ||  Norme2_2(lIntTria[Size-1].x-x)) {
     if (Size==MaxSize) ReShape();
     lIntTria[Size].t=tt;
@@ -773,7 +773,7 @@ int  ListofIntersectionTriangles::NewItem(Triangle * tt,Real8 d0,Real8 d1,Real8
   else n=Size-1;
   return n;
 }
-int ListofIntersectionTriangles::NewItem(R2 A,const Metric & mm) {  
+int ListofIntersectionTriangles::NewItem(R2 A,const Metric & mm) {
   register int n;
   if(!Size ||  Norme2_2(lIntTria[Size-1].x-A)) {
     if (Size==MaxSize) ReShape();
@@ -786,32 +786,32 @@ int ListofIntersectionTriangles::NewItem(R2 A,const Metric & mm) {
     n=Size++;
    }
   else  n=Size-1;
- return  n; 
+ return  n;
 }
 
 Real8  ListofIntersectionTriangles::Length()
 {
   //  cout << " n= " << Size << ":" ;
   assert(Size>0);
-  // computation of the length      
+  // computation of the length
   R2 C;
   Metric Mx,My;
   int ii,jj;
   R2 x,y,xy;
-  
+
   SegInterpolation *SegI=lSegsI;
   SegI=lSegsI;
-  lSegsI[NbSeg].last=Size;// improvement 
-  
+  lSegsI[NbSeg].last=Size;// improvement
+
   int EndSeg=Size;
-     
+
   y = lIntTria[0].x;
   Real8 sxy, s = 0;
   lIntTria[0].s =0;
   SegI->lBegin=s;
 
-  for (jj=0,ii=1;ii<Size;jj=ii++) 
-    {  
+  for (jj=0,ii=1;ii<Size;jj=ii++)
+    {
       // seg jj,ii
       x=y;
       y = lIntTria[ii].x;
@@ -826,12 +826,12 @@ Real8  ListofIntersectionTriangles::Length()
       sxy =  LengthInterpole(Mx,My,xy);
       s += sxy;
       lIntTria[ii].s = s;
-      if (ii == EndSeg) 
+      if (ii == EndSeg)
 	SegI->lEnd=s,
 	  SegI++,
 	  EndSeg=SegI->last,
 	  SegI->lBegin=s;
-      
+
       //    cout << ii << " " << jj << x<< y <<xy << s <<  lIntTria[ii].m  ;
     }
   len = s;
@@ -847,7 +847,7 @@ Int4 ListofIntersectionTriangles::NewPoints(Vertex * vertices,Int4 & nbv,Int4  n
   const Int4 nbvold = nbv;
   Real8 s = Length();
   if (s <  1.5 ) return 0;
-  //////////////////////   
+  //////////////////////
   int ii = 1 ;
   R2 y,x;
   Metric My,Mx ;
@@ -858,35 +858,35 @@ Int4 ListofIntersectionTriangles::NewPoints(Vertex * vertices,Int4 & nbv,Int4  n
 
   int EndSeg=Size;
   SegInterpolation *SegI=0;
-  if (NbSeg) 
+  if (NbSeg)
     SegI=lSegsI,EndSeg=SegI->last;
-  
+
   for (int k=1;k<nbi;k++)
     {
-      while ((ii < Size) && ( lIntTria[ii].s <= si )) 
-	if (ii++ == EndSeg) 
+      while ((ii < Size) && ( lIntTria[ii].s <= si ))
+	if (ii++ == EndSeg)
 	  SegI++,EndSeg=SegI->last;
 
       int ii1=ii-1;
       x  =lIntTria[ii1].x;
       sx =lIntTria[ii1].s;
       Metric Mx=lIntTria[ii1].m;
-#ifdef DEBUG    
+#ifdef DEBUG
       double lx = lIntTria[ii-1].sn;
 #endif
       y  =lIntTria[ii].x;
       sy =lIntTria[ii].s;
       Metric My=lIntTria[ii].m;
-#ifdef DEBUG    
-      double ly =lIntTria[ii].sp;  
+#ifdef DEBUG
+      double ly =lIntTria[ii].sp;
       assert( sx <= si);
       assert( si <= sy);
       assert( sy != sx);
-#endif 
+#endif
 
       Real8 lxy = sy-sx;
       Real8 cy = abscisseInterpole(Mx,My,y-x,(si-sx)/lxy);
-      
+
       R2 C;
       Real8 cx = 1-cy;
       C = SegI ? SegI->F(si): x * cx + y *cy;
@@ -917,36 +917,36 @@ int SwapForForcingEdge(Vertex   *  & pva ,Vertex  * &   pvb ,
       TriangleAdjacent & tt1,Icoor2 & dets1, Icoor2 & detsa,Icoor2 & detsb, int & NbSwap)
 { // l'arete ta coupe l'arete pva pvb
   // de cas apres le swap sa coupe toujours
-  // on cherche l'arete suivante 
+  // on cherche l'arete suivante
   // on suppose que detsa >0 et detsb <0
-  // attention la routine echange pva et pvb 
+  // attention la routine echange pva et pvb
 
-   if(tt1.Locked()) return 0; // frontiere croise 
+   if(tt1.Locked()) return 0; // frontiere croise
 
   TriangleAdjacent tt2 = Adj(tt1);
   Triangle *t1=tt1,*t2=tt2;// les 2 triangles adjacent
   Int1 a1=tt1,a2=tt2;// les 2 numero de l arete dans les 2 triangles
   assert ( a1 >= 0 && a1 < 3 );
-   
+
   Vertex & sa= (* t1)[VerticesOfTriangularEdge[a1][0]];
   Vertex & s1= (*t1)[OppositeVertex[a1]];
   Vertex & s2= (*t2)[OppositeVertex[a2]];
-  
+
 
   Icoor2 dets2 = det(*pva,*pvb,s2);
 
 #ifdef DEBUG
   Vertex & sb= (*t1)[VerticesOfTriangularEdge[a1][1]];
-  Icoor2 wdets1 = det(*pva,*pvb,s1);  
+  Icoor2 wdets1 = det(*pva,*pvb,s1);
   Icoor2 wdetsa = det(*pva,*pvb,sa);
   Icoor2 wdetsb = det(*pva,*pvb,sb);
   assert(wdets1 == dets1);
   assert(wdetsa == detsa);
   assert(wdetsb == detsb);
 #endif
-  
+
   Icoor2 det1=t1->det , det2=t2->det ;
-#ifdef DEBUG  
+#ifdef DEBUG
   assert(det1>0 && det2 >0);
   Icoor2 ddet1 = det((*t1)[0],(*t1)[1],(*t1)[2]);
   Icoor2 ddet2 = det((*t2)[0],(*t2)[1],(*t2)[2]);
@@ -957,9 +957,9 @@ int SwapForForcingEdge(Vertex   *  & pva ,Vertex  * &   pvb ,
      }
    Icoor2 detvasasb = det(*pva,sa,sb);
    Icoor2 detvbsasb = det(*pvb,sa,sb);
-   if (  CurrentTh && !  ( ( (detvasasb <= 0) && (detvbsasb >= 0)) || ( (detvasasb >= 0) && (detvbsasb <= 0)))) 
+   if (  CurrentTh && !  ( ( (detvasasb <= 0) && (detvbsasb >= 0)) || ( (detvasasb >= 0) && (detvbsasb <= 0))))
      {
-       cout << " detvasasb =" <<  detvasasb << "detvbsasb = " <<  detvbsasb 
+       cout << " detvasasb =" <<  detvasasb << "detvbsasb = " <<  detvbsasb
 	    << " " << pva << " " << pvb << " "  <<CurrentTh <<endl;
 #ifdef DRAWING1
        reffecran();
@@ -968,7 +968,7 @@ int SwapForForcingEdge(Vertex   *  & pva ,Vertex  * &   pvb ,
        pva->MoveTo();pvb->LineTo();
        penthickness(1);
        CurrentTh->inquire();
-#endif       
+#endif
    }
      assert( ( (detvasasb <= 0) && (detvbsasb >= 0)) || ( (detvasasb >= 0) && (detvbsasb <= 0)));
 #endif
@@ -980,18 +980,18 @@ int SwapForForcingEdge(Vertex   *  & pva ,Vertex  * &   pvb ,
   Icoor2 ndet2 = detT - ndet1;
 
   int ToSwap =0; //pas de swap
-  if ((ndet1 >0) && (ndet2 >0)) 
-    { // on peut swaper  
+  if ((ndet1 >0) && (ndet2 >0))
+    { // on peut swaper
       if ((dets1 <=0 && dets2 <=0) || (dets2 >=0 && detsb >=0))
-        ToSwap =1; 
-      else // swap alleatoire 
-        if (BinaryRand()) 
-          ToSwap =2; 
+        ToSwap =1;
+      else // swap alleatoire
+        if (BinaryRand())
+          ToSwap =2;
     }
 #ifdef DEBUG
   if (ForDebugging) {
-    cerr << "swap = " << ToSwap << " ndet1 " << ndet1 << ", ndet2 " << ndet2 << "det1  " << det1 << " det2 " <<  det2  
-	 << " if1 = " << ((ndet1 >0) && (ndet2 >0)) 
+    cerr << "swap = " << ToSwap << " ndet1 " << ndet1 << ", ndet2 " << ndet2 << "det1  " << det1 << " det2 " <<  det2
+	 << " if1 = " << ((ndet1 >0) && (ndet2 >0))
 	 << " if2 = " << ((dets1 <=0 && dets2 <=0) || (dets2 >=0 && detsb >=0)) << endl;
 #ifdef DRAWING
   couleur(0);
@@ -1002,7 +1002,7 @@ int SwapForForcingEdge(Vertex   *  & pva ,Vertex  * &   pvb ,
 #endif
   if (ToSwap) NbSwap++,
      bamg::swap(t1,a1,t2,a2,&s1,&s2,ndet1,ndet2);
-  
+
 #ifdef DEBUG
   if (ForDebugging) {
 #ifdef DRAWING
@@ -1017,15 +1017,15 @@ int SwapForForcingEdge(Vertex   *  & pva ,Vertex  * &   pvb ,
 
   if (dets2 < 0) {// haut
     dets1 = ToSwap ? dets1 : detsa ;
-    detsa = dets2; 
+    detsa = dets2;
     tt1 =  Previous(tt2) ;}
-  else if (dets2 > 0){// bas 
+  else if (dets2 > 0){// bas
     dets1 = ToSwap ? dets1 : detsb ;
     detsb = dets2;
     //xxxx tt1 = ToSwap ? tt1 : Next(tt2);
     if(!ToSwap) tt1 =  Next(tt2);
     }
-  else { // changement de sens 
+  else { // changement de sens
      if (ForDebugging)  cout << "changement de sens" << endl;
     ret = -1;
     Exchange(pva,pvb);
@@ -1037,12 +1037,12 @@ int SwapForForcingEdge(Vertex   *  & pva ,Vertex  * &   pvb ,
     detsa=-detsa;
     detsb=-detsb;
 
-    if (ToSwap) 
+    if (ToSwap)
       if (dets2 < 0) {// haut
         dets1 = (ToSwap ? dets1 : detsa) ;
-        detsa = dets2; 
+        detsa = dets2;
         tt1 =  Previous(tt2) ;}
-      else if (dets2 > 0){// bas 
+      else if (dets2 > 0){// bas
         dets1 = (ToSwap ? dets1 : detsb) ;
         detsb =  dets2;
         if(!ToSwap) tt1 =  Next(tt2);
@@ -1055,22 +1055,22 @@ int SwapForForcingEdge(Vertex   *  & pva ,Vertex  * &   pvb ,
   return ret;
 }
 
-int ForceEdge(Vertex &a, Vertex & b,TriangleAdjacent & taret)  
-{ 
+int ForceEdge(Vertex &a, Vertex & b,TriangleAdjacent & taret)
+{
 #ifdef DEBUG
- restart: // for debug 
+ restart: // for debug
 #endif
   int NbSwap =0;
-  assert(a.t && b.t); // the 2 vertex is in a mesh 
+  assert(a.t && b.t); // the 2 vertex is in a mesh
   int k=0;
-  taret=TriangleAdjacent(0,0); // erreur 
-  
+  taret=TriangleAdjacent(0,0); // erreur
+
   TriangleAdjacent tta(a.t,EdgesVertexTriangle[a.vint][0]);
   Vertex   *v1, *v2 = tta.EdgeVertex(0),*vbegin =v2;
-  // we turn around a in the  direct sens  
-   
+  // we turn around a in the  direct sens
+
   Icoor2 det2 = v2 ? det(*v2,a,b): -1 , det1;
-  if(v2) // normal case 
+  if(v2) // normal case
     det2 = det(*v2,a,b);
   else { // no chance infini vertex try the next
     tta= Previous(Adj(tta));
@@ -1086,18 +1086,18 @@ int ForceEdge(Vertex &a, Vertex & b,TriangleAdjacent & taret)
 #endif
 
   while (v2 != &b) {
-    TriangleAdjacent tc = Previous(Adj(tta));    
-    v1 = v2; 
+    TriangleAdjacent tc = Previous(Adj(tta));
+    v1 = v2;
     v2 = tc.EdgeVertex(0);
     det1 = det2;
 #ifdef DEBUG
     assert( v1 ==  tta.EdgeVertex(0));
     assert( &a ==  tc.EdgeVertex(1) );
 #endif
-    det2 =  v2 ? det(*v2,a,b): det2; 
-    
-    if((det1 < 0) && (det2 >0)) { 
-      // try to force the edge 
+    det2 =  v2 ? det(*v2,a,b): det2;
+
+    if((det1 < 0) && (det2 >0)) {
+      // try to force the edge
       Vertex * va = &a, *vb = &b;
       tc = Previous(tc);
       assert ( v1 && v2);
@@ -1113,17 +1113,17 @@ int ForceEdge(Vertex &a, Vertex & b,TriangleAdjacent & taret)
           ForDebugging=1;
 	  goto restart;
 	}
-	
-#endif 
+
+#endif
       while ((ks=SwapForForcingEdge(  va,  vb, tc, detss, det1,det2,NbSwap)))
 	if(l++ > 10000000) {
-	  cerr << " Loop in forcing Egde AB" 
-               <<"\n vertex A " << a 
-               <<"\n vertex B " <<  b 
-               <<"\n nb de swap " << NbSwap 
+	  cerr << " Loop in forcing Egde AB"
+               <<"\n vertex A " << a
+               <<"\n vertex B " <<  b
+               <<"\n nb de swap " << NbSwap
                <<"\n nb of try  swap too big = " <<  l << " gearter than " <<  1000000 << endl;
-   
-         if ( CurrentTh ) 
+
+         if ( CurrentTh )
             cerr << " vertex number " << CurrentTh->Number(a) << " " <<  CurrentTh->Number(b) << endl;
 #ifdef DEBUG
 	  ForDebugging = 1;
@@ -1144,7 +1144,7 @@ int ForceEdge(Vertex &a, Vertex & b,TriangleAdjacent & taret)
             while (ks=SwapForForcingEdge(  va,  vb, tc, detss, det1,det2,NbSwap) && (l++ < 1000))
              cerr << " " << CurrentTh->Number(tc.EdgeVertex(0))<<" " <<CurrentTh->Number(tc.EdgeVertex(1)) << " ";
 	  }
-#endif	  
+#endif
 	  MeshError(990);
 	}
       Vertex *aa = tc.EdgeVertex(0), *bb = tc.EdgeVertex(1);
@@ -1155,7 +1155,7 @@ int ForceEdge(Vertex &a, Vertex & b,TriangleAdjacent & taret)
 	taret = tc;
 	return NbSwap;
       }
-      else 
+      else
       {
 	  taret = tc;
 	  return -2; // error  boundary is crossing
@@ -1166,25 +1166,25 @@ int ForceEdge(Vertex &a, Vertex & b,TriangleAdjacent & taret)
 	      cerr    << CurrentTh->Number(aa) << " " << CurrentTh->Number(bb) << " ] " << endl;
 	  }
 	  MeshError(991);
-*/	  
+*/
       }
     }
     tta = tc;
     assert(k++<2000);
-    if ( vbegin == v2 ) return -1;// error 
+    if ( vbegin == v2 ) return -1;// error
   }
 
   tta.SetLock();
   taret=tta;
   a.Optim(1,0);
   b.Optim(1,0);
-  return NbSwap; 
+  return NbSwap;
 }
 
 
 int Triangle::swap(Int2 a,int koption){
 #ifdef DEBUG
-  if(a &4 ) return 0;// arete lock 
+  if(a &4 ) return 0;// arete lock
   int munswap1 = a/4;
   a &=3;
 #else
@@ -1200,22 +1200,22 @@ int Triangle::swap(Int2 a,int koption){
 #else
   if(a2/4 !=0) return 0; // arete lock or MarkUnSwap
 #endif
-  
+
   register Vertex  *sa=t1->ns[VerticesOfTriangularEdge[a1][0]];
   register Vertex  *sb=t1->ns[VerticesOfTriangularEdge[a1][1]];
   register Vertex  *s1=t1->ns[OppositeVertex[a1]];
   register Vertex  *s2=t2->ns[OppositeVertex[a2]];
 
 #ifdef DEBUG
-  assert ( a >= 0 && a < 3 );  
+  assert ( a >= 0 && a < 3 );
 #endif
-  
+
    Icoor2 det1=t1->det , det2=t2->det ;
    Icoor2 detT = det1+det2;
    Icoor2 detA = Abs(det1) + Abs(det2);
    Icoor2 detMin = Min(det1,det2);
 
-   int OnSwap = 0;       
+   int OnSwap = 0;
    // si 2 triangle infini (bord) => detT = -2;
    if (sa == 0) {// les deux triangles sont frontieres
      det2=bamg::det(s2->i,sb->i,s1->i);
@@ -1227,9 +1227,9 @@ int Triangle::swap(Int2 a,int koption){
      det1 = bamg::det(s1->i,sa->i,s2->i);
      det2 = detT - det1;
      OnSwap = (Abs(det1) + Abs(det2)) < detA;
-   
+
      Icoor2 detMinNew=Min(det1,det2);
-     //     if (detMin<0 && (Abs(det1) + Abs(det2) == detA)) OnSwap=BinaryRand();// just for test   
+     //     if (detMin<0 && (Abs(det1) + Abs(det2) == detA)) OnSwap=BinaryRand();// just for test
      if (! OnSwap &&(detMinNew>0)) {
        OnSwap = detMin ==0;
        if (! OnSwap) {
@@ -1241,7 +1241,7 @@ int Triangle::swap(Int2 a,int koption){
 	   x21 = s2->i.x - s1->i.x,
 	   yb1 = sb->i.y - s1->i.y,
 	   y21 = s2->i.y - s1->i.y,
-	   xba = sb->i.x - sa->i.x, 
+	   xba = sb->i.x - sa->i.x,
 	   x2a = s2->i.x - sa->i.x,
 	   yba = sb->i.y - sa->i.y,
 	   y2a = s2->i.y - sa->i.y;
@@ -1251,18 +1251,18 @@ int Triangle::swap(Int2 a,int koption){
 	   sinb12 = double(det2),
 	   sinba2 = double(t2->det);
 
-	 
+
 	 // angle b12 > angle ba2 => cotg(angle b12) < cotg(angle ba2)
 	 OnSwap =  ((double) cosb12 * (double)  sinba2) <  ((double) cosba2 * (double) sinb12);
-//  	 if(CurrentTh) 
+//  	 if(CurrentTh)
 //  	   cout << "swap " << CurrentTh->Number(sa) << " " << CurrentTh->Number(sb) << " " ;
-//  	 cout <<  cosb12 << " " <<  sinba2 << " "  <<  cosba2 << " " << sinb12 
+//  	 cout <<  cosb12 << " " <<  sinba2 << " "  <<  cosba2 << " " << sinb12
 //  	      << " Onswap = " <<  OnSwap << endl;
 	  break;
 	 }
-	 else 
-	   {	
-	     // critere de Delaunay anisotrope 
+	 else
+	   {
+	     // critere de Delaunay anisotrope
 	     Real8 som;
 	     I2 AB=(I2) *sb - (I2) *sa;
 	     I2 MAB2=((I2) *sb + (I2) *sa);
@@ -1275,81 +1275,81 @@ int Triangle::swap(Int2 a,int koption){
 	       Metric M=s1->m;
 	       R2 ABo = M.Orthogonal(AB);
 	       R2 A1o = M.Orthogonal(A1);
-	       // (A+B)+ x ABo = (S1+B)/2+ y A1 
+	       // (A+B)+ x ABo = (S1+B)/2+ y A1
 	       // ABo x - A1o y =  (S1+B)/2-(A+B)/2 = (S1-B)/2 = D/2
 	       double dd = Abs(ABo.x*A1o.y)+Abs(ABo.y*A1o.x);
 	       double d = (ABo.x*A1o.y - ABo.y*A1o.x)*2; // because D/2
 	       if (Abs(d) > dd*1.e-3) {
 		 R2 C(MAB+ABo*((D.x*A1o.y - D.y*A1o.x)/d));
 		 som  = M(C - S2)/M(C - S1);
-	       } else 
+	       } else
 		{kopt=1;continue;}
-		
+
 	     }
 	     {
 	       Metric M=s2->m;
 	       R2 ABo = M.Orthogonal(AB);
 	       R2 A1o = M.Orthogonal(A1);
-	       // (A+B)+ x ABo = (S1+B)/2+ y A1 
-	       // ABo x - A1o y =  (S1+B)/2-(A+B)/2 = (S1-B)/2 = D/2 
+	       // (A+B)+ x ABo = (S1+B)/2+ y A1
+	       // ABo x - A1o y =  (S1+B)/2-(A+B)/2 = (S1-B)/2 = D/2
 	       double dd = Abs(ABo.x*A1o.y)+Abs(ABo.y*A1o.x);
 	       double d = (ABo.x*A1o.y - ABo.y*A1o.x)*2; // because D/2
 	       if(Abs(d) > dd*1.e-3) {
 		 R2 C(MAB+ABo*((D.x*A1o.y - D.y*A1o.x)/d));
 		 som  += M(C - S2)/M(C -  S1);
-	       } else 
+	       } else
 		{kopt=1;continue;}
 	     }
 	     OnSwap = som < 2;
 	     break;
 	 }
-  
-       } // OnSwap 
+
+       } // OnSwap
      } // (! OnSwap &&(det1 > 0) && (det2 > 0) )
    }
-#ifdef  DEBUG1   
+#ifdef  DEBUG1
    if (OnSwap &&  ( munswap1  || munswap2)) {
      cout << " erreur Mark unswap T " << CurrentTh->Number(t1) << " " <<  CurrentTh->Number(t2) << endl
 	  << *t1 << endl
           << *t2 << endl;
      return 0;
    }
-#endif 
-   if( OnSwap ) 
+#endif
+   if( OnSwap )
        bamg::swap(t1,a1,t2,a2,s1,s2,det1,det2);
    else {
      NbUnSwap ++;
-      t1->SetMarkUnSwap(a1);     
+      t1->SetMarkUnSwap(a1);
    }
    return OnSwap;
 }
 
 Real8  Vertex::Smoothing(Triangles & Th,const Triangles & BTh,Triangle  * & tstart ,Real8 omega)
 {
-#ifdef DEBUG  
+#ifdef DEBUG
   register  Int4 NbSwap =0;
 #endif
   register Vertex * s  = this;
   Vertex &vP = *s,vPsave=vP;
-  //  if (vP.on) return 0;// Don't move boundary vertex  
-  
+  //  if (vP.on) return 0;// Don't move boundary vertex
+
   register Triangle * tbegin= t , *tria = t , *ttc;
- 
+
   register int k=0,kk=0,j = EdgesVertexTriangle[vint][0],jc;
   R2 P(s->r),PNew(0,0);
   //  cout << BTh.quadtree << " " <<  BTh.quadtree->root << endl;
   // assert(BTh.quadtree && BTh.quadtree->root);
   do {
-	k++; 
-	
+	k++;
+
 #ifdef DEBUG
     assert( s == & (*tria)[VerticesOfTriangularEdge[j][1]] );
     assert( tria->det >0);
 #endif
     if (!tria->Hidden(j))
       {
-	Vertex &vQ = (*tria)[VerticesOfTriangularEdge[j][0]]; 
-	
+	Vertex &vQ = (*tria)[VerticesOfTriangularEdge[j][0]];
+
 	R2 Q = vQ,QP(P-Q);
 	Real8 lQP = LengthInterpole(vP,vQ,QP);
 	PNew += Q+QP/Max(lQP,1e-20);
@@ -1360,28 +1360,28 @@ Real8  Vertex::Smoothing(Triangles & Th,const Triangles & BTh,Triangle  * & tsta
      tria = ttc;
      j = NextEdge[jc];
      assert(k<2000);
-  } while ( tbegin != tria); 
+  } while ( tbegin != tria);
   if (kk<4) return 0;
   PNew = PNew/(Real8)kk;
   R2 Xmove((PNew-P)*omega);
   PNew = P+Xmove;
-  Real8 delta=Norme2_2(Xmove); 
-  
-  
-  // 
+  Real8 delta=Norme2_2(Xmove);
+
+
+  //
   Icoor2 deta[3];
   I2 IBTh  = BTh.toI2(PNew);
-  
-  tstart=BTh.FindTriangleContening(IBTh,deta,tstart);  
-  
-  if (tstart->det <0) 
+
+  tstart=BTh.FindTriangleContening(IBTh,deta,tstart);
+
+  if (tstart->det <0)
     { // outside
       double ba,bb;
       TriangleAdjacent edge= CloseBoundaryEdge(IBTh,tstart,ba,bb) ;
       tstart = edge;
       vP.m= Metric(ba,*edge.EdgeVertex(0),bb,*edge.EdgeVertex(1));
     }
-  else 
+  else
     { // inside
       Real8   aa[3];
       Real8 s = deta[0]+deta[1]+deta[2];
@@ -1390,28 +1390,28 @@ Real8  Vertex::Smoothing(Triangles & Th,const Triangles & BTh,Triangle  * & tsta
       aa[2]=deta[2]/s;
       vP.m = Metric(aa,(*tstart)[0],(*tstart)[1],(*tstart)[2]);
     }
-  
+
   // recompute the det of the triangle
   vP.r = PNew;
-  
+
   vP.i = Th.toI2(PNew);
 
   Vertex vPnew = vP;
-  
+
   int ok=1;
   int loop=1;
   k=0;
-  while (ok) 
+  while (ok)
     {
       ok =0;
       do {
-	k++; 
+	k++;
 	double detold = tria->det;
 	tria->det =  bamg::det( (*tria)[0],(*tria)[1]  ,(*tria)[2]);
-	if (loop) 
+	if (loop)
 	  {
 	    Vertex *v0,*v1,*v2,*v3;
-	    if (tria->det<0) ok =1;			       
+	    if (tria->det<0) ok =1;
 	    else if (tria->Quadrangle(v0,v1,v2,v3))
 	      {
 		vP = vPsave;
@@ -1421,7 +1421,7 @@ Real8  Vertex::Smoothing(Triangles & Th,const Triangles & BTh,Triangle  * & tsta
 		if (qnew<qold) ok = 1;
 	      }
 	    else if ( (double)tria->det < detold/2 ) ok=1;
-	    
+
 	  }
         tria->SetUnMarkUnSwap(0);
         tria->SetUnMarkUnSwap(1);
@@ -1431,8 +1431,8 @@ Real8  Vertex::Smoothing(Triangles & Th,const Triangles & BTh,Triangle  * & tsta
 	tria = ttc;
 	j = NextEdge[jc];
 	assert(k<2000);
-      } while ( tbegin != tria); 
-      if (ok && loop) vP=vPsave; // no move 
+      } while ( tbegin != tria);
+      if (ok && loop) vP=vPsave; // no move
       loop=0;
     }
   return delta;
@@ -1441,7 +1441,7 @@ Real8  Vertex::Smoothing(Triangles & Th,const Triangles & BTh,Triangle  * & tsta
 
 
 
-void Triangles::Add( Vertex & s,Triangle * t, Icoor2 * det3) 
+void Triangles::Add( Vertex & s,Triangle * t, Icoor2 * det3)
 {
   // -------------------------------------------
   //             s2
@@ -1456,8 +1456,8 @@ void Triangles::Add( Vertex & s,Triangle * t, Icoor2 * det3)
   //      / .           ` \                     !
   //      ----------------                      !
   //   s0       tt2       s1
-  //-------------------------------------------- 
-  
+  //--------------------------------------------
+
   Triangle * tt[3]; // the 3 new Triangles
   Vertex &s0 = (* t)[0], &s1=(* t)[1], &s2=(* t)[2];
   Icoor2  det3local[3];
@@ -1466,52 +1466,52 @@ void Triangles::Add( Vertex & s,Triangle * t, Icoor2 * det3)
   register int nbd0 =0; // number of zero det3
   register int izerodet=-1,iedge; // izerodet = egde contening the vertex s
   Icoor2 detOld = t->det;
-  
-  if ( ( infv <0 ) && (detOld <0) ||  ( infv >=0  ) && (detOld >0) ) 
+
+  if ( ( infv <0 ) && (detOld <0) ||  ( infv >=0  ) && (detOld >0) )
     {
       cerr << "  infv " << infv << " det = " << detOld << endl;
-      cerr << Number(s) << " "<< Number(s0) << " "  
+      cerr << Number(s) << " "<< Number(s0) << " "
 	   << Number(s1) << " "  << Number(s2) << endl;
       MeshError(3);
     }
-  
+
   // if det3 do not exist then constuct det3
-  if (!det3) { 
-    det3 = det3local; // alloc 
+  if (!det3) {
+    det3 = det3local; // alloc
     if ( infv<0 ) {
       det3[0]=bamg::det(s ,s1,s2);
       det3[1]=bamg::det(s0,s ,s2);
       det3[2]=bamg::det(s0,s1,s );}
-    else { 
+    else {
       // one of &s1  &s2  &s0 is NULL so (&si || &sj) <=> !&sk
       det3[0]=  &s0 ? -1  : bamg::det(s ,s1,s2) ;
       det3[1]=  &s1 ? -1 : bamg::det(s0,s ,s2) ;
       det3[2]=  &s2 ? -1 : bamg::det(s0,s1,s ) ;}}
 
-  
+
   if (!det3[0]) izerodet=0,nbd0++;
   if (!det3[1]) izerodet=1,nbd0++;
   if (!det3[2]) izerodet=2,nbd0++;
-  
-  if  (nbd0 >0 ) // point s on a egde or on a vertex 
+
+  if  (nbd0 >0 ) // point s on a egde or on a vertex
     if (nbd0 == 1) {
       iedge = OppositeEdge[izerodet];
       TriangleAdjacent ta = t->Adj(iedge);
 
-#ifdef DEBUG1      
-      cout << " the point " << Number(s) << " is the edge " <<  izerodet 
-	   << " of " << Number(t)	   << " det3 = " 
+#ifdef DEBUG1
+      cout << " the point " << Number(s) << " is the edge " <<  izerodet
+	   << " of " << Number(t)	   << " det3 = "
 	   << det3[0] << " " <<  det3[1] << " " <<  det3[2] << " " <<  endl;
-      cout  << " ta = "  <<  ta << "ta->det =" << ((Triangle*) ta)->det  
+      cout  << " ta = "  <<  ta << "ta->det =" << ((Triangle*) ta)->det
 	    << " "<< t->det<< endl;
 #endif
 
-      // the point is on the edge 
-      // if the point is one the boundary 
-      // add the point in outside part 
+      // the point is on the edge
+      // if the point is one the boundary
+      // add the point in outside part
       if ( t->det >=0) { // inside triangle
 	if ((( Triangle *) ta)->det < 0 ) {
-	  // add in outside triangle 
+	  // add in outside triangle
 	  Add(s,( Triangle *) ta);
 	  return;}
       }}
@@ -1525,14 +1525,14 @@ void Triangles::Add( Vertex & s,Triangle * t, Icoor2 * det3)
       MeshError(5,this);}
 
   // remove de MarkUnSwap edge
-  t->SetUnMarkUnSwap(0);     
-  t->SetUnMarkUnSwap(1);     
+  t->SetUnMarkUnSwap(0);
+  t->SetUnMarkUnSwap(1);
   t->SetUnMarkUnSwap(2);
 
   tt[0]= t;
   tt[1]= &triangles[nbt++];
   tt[2]= &triangles[nbt++];
-  
+
   if (nbt>nbtx) {
     cerr << " No enougth triangles " << endl;
     MeshError(999,this);
@@ -1541,17 +1541,17 @@ void Triangles::Add( Vertex & s,Triangle * t, Icoor2 * det3)
   *tt[1]=   *tt[2]= *t;
 // gestion of the link
    tt[0]->link=tt[1];
-   tt[1]->link=tt[2]; 
-  
+   tt[1]->link=tt[2];
+
   (* tt[0])(OppositeVertex[0])=&s;
   (* tt[1])(OppositeVertex[1])=&s;
   (* tt[2])(OppositeVertex[2])=&s;
 
   tt[0]->det=det3[0];
   tt[1]->det=det3[1];
-  tt[2]->det=det3[2];         
+  tt[2]->det=det3[2];
 
-  //  update adj des triangles externe 
+  //  update adj des triangles externe
   tt[0]->SetAdjAdj(0);
   tt[1]->SetAdjAdj(1);
   tt[2]->SetAdjAdj(2);
@@ -1563,53 +1563,53 @@ void Triangles::Add( Vertex & s,Triangle * t, Icoor2 * det3)
   tt[i0]->SetAdj2(i2,tt[i2],i0);
   tt[i1]->SetAdj2(i0,tt[i0],i1);
   tt[i2]->SetAdj2(i1,tt[i1],i2);
-  
+
   tt[0]->SetTriangleContainingTheVertex();
   tt[1]->SetTriangleContainingTheVertex();
   tt[2]->SetTriangleContainingTheVertex();
- 
- 
+
+
   // swap if the point s is on a edge
   if(izerodet>=0) {
     //  cout << " the point s is on a edge =>swap " << iedge << " "  << *tt[izerodet] << endl;
     int rswap =tt[izerodet]->swap(iedge);
-    
-    if (!rswap) 
+
+    if (!rswap)
      {
        cout << " Pb swap the point s is on a edge =>swap " << iedge << " "  << *tt[izerodet] << endl;
 #ifdef DRAWING
-       if(  CurrentTh &&  withrgraphique) 
+       if(  CurrentTh &&  withrgraphique)
         {
        reffecran();
-       
+
        DrawMark(s.r);
           CurrentTh->inquire();
        DrawMark(s.r);
-       rattente(1); 
-        }      
+       rattente(1);
+        }
 #endif
      }
     assert(rswap);
   }
- 
-#ifdef DEBUG 
+
+#ifdef DEBUG
   tt[0]->check();
   tt[1]->check();
   tt[2]->check();
 #endif
-#ifdef DRAWING1 
+#ifdef DRAWING1
   tt[0]->Draw();
   tt[1]->Draw();
   tt[2]->Draw();
 #endif
-  
+
 }
 
 
 Int4  Triangles::SplitInternalEdgeWithBorderVertices()
 {
   Int4 NbSplitEdge=0;
-  SetVertexFieldOn();  
+  SetVertexFieldOn();
   Int4 it;
   Int4 nbvold=nbv;
   for (it=0;it<nbt;it++)
@@ -1619,8 +1619,8 @@ Int4  Triangles::SplitInternalEdgeWithBorderVertices()
 	for (int j=0;j<3;j++)
 	  if(!t.Locked(j) && !t.Hidden(j)){
 	    Triangle &tt = *t.TriangleAdj(j);
-	    if ( &tt && tt.link && it < Number(tt)) 
-	      { // an internal edge 
+	    if ( &tt && tt.link && it < Number(tt))
+	      { // an internal edge
 		Vertex &v0 = t[VerticesOfTriangularEdge[j][0]];
 		Vertex &v1 = t[VerticesOfTriangularEdge[j][1]];
 		if (v0.on && v1.on)
@@ -1634,32 +1634,32 @@ Int4  Triangles::SplitInternalEdgeWithBorderVertices()
 		    }
 		    NbSplitEdge++;
 		    if (verbosity>7)
-		      cout <<" Internal edge with two vertices on boundary" 
+		      cout <<" Internal edge with two vertices on boundary"
 			   << Number(v0) << " " << Number(v1) << " by " <<  endl;
 		  }
 	      }
 	  }
     }
-  ReMakeTriangleContainingTheVertex();    
-  if (nbvold!=nbv) 
+  ReMakeTriangleContainingTheVertex();
+  if (nbvold!=nbv)
     {
       Int4  iv = nbvold;
       Int4 NbSwap = 0;
-      Icoor2 dete[3];  
-      for (Int4 i=nbvold;i<nbv;i++) 
+      Icoor2 dete[3];
+      for (Int4 i=nbvold;i<nbv;i++)
 	{// for all the new point
 	  Vertex & vi = vertices[i];
 	  vi.i = toI2(vi.r);
       vi.r = toR2(vi.i);
       //      if (!quadtree->ToClose(vi,seuil,hi,hj)) {
-      // a good new point 
-      vi.ReferenceNumber=0; 
+      // a good new point
+      vi.ReferenceNumber=0;
       vi.DirOfSearch =NoDirOfSearch;
-      //	cout << " Add " << Number(vi) << " " << vi 
+      //	cout << " Add " << Number(vi) << " " << vi
       // << "   " <<  Number(vi) << " <--> " << Number(vi) <<endl;
       Triangle *tcvi = FindTriangleContening(vi.i,dete);
       if (tcvi && !tcvi->link) {
-	cout << i <<  " PB insert point " << Number(vi) << vi << Number(vi) 
+	cout << i <<  " PB insert point " << Number(vi) << vi << Number(vi)
 	     << " tcvi = " << tcvi << " " << tcvi->link << endl;
 	cout << (*tcvi)[1] <<  (*tcvi)[2] << endl;
 	tcvi = FindTriangleContening(vi.i,dete);
@@ -1671,26 +1671,26 @@ Int4  Triangles::SplitInternalEdgeWithBorderVertices()
 	penthickness(1);
 	inquire();
 #endif
-	
+
 	MeshError(1001,this);
       }
-      
-      
+
+
       quadtree->Add(vi);
 #ifdef DRAWING1
       DrawMark(vi.r);
 #endif
-      assert (tcvi && tcvi->det >= 0) ;// internal 
+      assert (tcvi && tcvi->det >= 0) ;// internal
       Add(vi,tcvi,dete);
-      NbSwap += vi.Optim(1);          
+      NbSwap += vi.Optim(1);
       iv++;
       //      }
 	}
-      if (verbosity>3) 
+      if (verbosity>3)
 	{
 	  cout << "    Nb Of New Point " << iv ;
 	  cout << " Nb swap = " << NbSwap << " to  split internal edges with border vertices" ;}
-      
+
       nbv = iv;
     }
   if (NbSplitEdge >  nbv-nbvold)
@@ -1702,31 +1702,31 @@ Int4  Triangles::SplitInternalEdgeWithBorderVertices()
 }
 Int4 Triangles::InsertNewPoints(Int4 nbvold,Int4 & NbTSwap)
  {
-  Real8 seuil= 1.414/2 ;// for two close point 
+  Real8 seuil= 1.414/2 ;// for two close point
   Int4 i;
- // insertion part --- 
+ // insertion part ---
 
   const Int4 nbvnew = nbv-nbvold;
-  if (verbosity>5) 
-    cout << "    Try to Insert the " <<nbvnew<< " new points " << endl;  
+  if (verbosity>5)
+    cout << "    Try to Insert the " <<nbvnew<< " new points " << endl;
   Int4 NbSwap=0;
   Icoor2 dete[3];
-  
-  // construction d'un ordre aleatoire 
-  if (! nbvnew) 
-    return 0; 
+
+  // construction d'un ordre aleatoire
+  if (! nbvnew)
+    return 0;
   if (nbvnew) {
   const Int4 PrimeNumber= AGoodNumberPrimeWith(nbv)  ;
-  Int4 k3 = rand()%nbvnew ; 
+  Int4 k3 = rand()%nbvnew ;
   for (Int4 is3=0; is3<nbvnew; is3++) {
     register Int4 j = nbvold +(k3 = (k3 + PrimeNumber)% nbvnew);
-    register Int4 i = nbvold+is3; 
+    register Int4 i = nbvold+is3;
     ordre[i]= vertices + j;
     ordre[i]->ReferenceNumber=i;
   }
-  // be carefull 
+  // be carefull
   Int4  iv = nbvold;
-  for (i=nbvold;i<nbv;i++) 
+  for (i=nbvold;i<nbv;i++)
     {// for all the new point
       Vertex & vi = *ordre[i];
       vi.i = toI2(vi.r);
@@ -1734,24 +1734,24 @@ Int4 Triangles::InsertNewPoints(Int4 nbvold,Int4 & NbTSwap)
       Real4 hx,hy;
       vi.m.Box(hx,hy);
       Icoor1 hi=(Icoor1) (hx*coefIcoor),hj=(Icoor1) (hy*coefIcoor);
-      if (!quadtree->ToClose(vi,seuil,hi,hj)) 
+      if (!quadtree->ToClose(vi,seuil,hi,hj))
         {
-			// a good new point 
+			// a good new point
 			Vertex & vj = vertices[iv];
-			Int4 j = vj.ReferenceNumber; 
+			Int4 j = vj.ReferenceNumber;
 			assert( &vj== ordre[j]);
 			if(i!=j)
-			  { //  for valgring 
+			  { //  for valgring
 			    Exchange(vi,vj);
 			    Exchange(ordre[j],ordre[i]);
 			  }
-		      vj.ReferenceNumber=0; 
-			//	cout << " Add " << Number(vj) << " " << vj 
+		      vj.ReferenceNumber=0;
+			//	cout << " Add " << Number(vj) << " " << vj
 			// << "   " <<  Number(vi) << " <--> " << Number(vj) <<endl;
 			Triangle *tcvj = FindTriangleContening(vj.i,dete);
-			if (tcvj && !tcvj->link) 
+			if (tcvj && !tcvj->link)
 			 {
-			  cerr << i <<  " PB insert point " << Number(vj) << vj << Number(vi) 
+			  cerr << i <<  " PB insert point " << Number(vj) << vj << Number(vi)
 			       << " tcvj = " << tcvj << " " << tcvj->link << endl;
 			  cerr << (*tcvj)[1] <<  (*tcvj)[2] << endl;
 			  tcvj = FindTriangleContening(vj.i,dete);
@@ -1761,24 +1761,24 @@ Int4 Triangles::InsertNewPoints(Int4 nbvold,Int4 & NbTSwap)
 			  penthickness(5);
 			  DrawMark(vj.r);
 			  penthickness(1);
-			  
+
 			  inquire();
 #endif
-	  
+
 	          MeshError(1001,this);
 	         }
-	
-	
+
+
 	        quadtree->Add(vj);
 #ifdef DRAWING1
 	        DrawMark(vj.r);
 #endif
-			assert (tcvj && tcvj->det >= 0) ;// internal 
+			assert (tcvj && tcvj->det >= 0) ;// internal
 			Add(vj,tcvj,dete);
-			NbSwap += vj.Optim(1);          
+			NbSwap += vj.Optim(1);
 			iv++;
          }
-    } 
+    }
   if (verbosity>3) {
     cout << "    Nb Of New Point " << iv << " Nb Of To close Points " << nbv-iv ;
     cout << " Nb swap = " << NbSwap << " after " ;}
@@ -1790,37 +1790,37 @@ Int4 Triangles::InsertNewPoints(Int4 nbvold,Int4 & NbTSwap)
   inquire();
 #endif
 
-  for (i=nbvold;i<nbv;i++) 
-    NbSwap += vertices[i].Optim(1);  
-   if (verbosity>3) 
+  for (i=nbvold;i<nbv;i++)
+    NbSwap += vertices[i].Optim(1);
+   if (verbosity>3)
      cout << " NbSwap = " <<  NbSwap << endl;
 
 
   NbTSwap +=  NbSwap ;
 #ifdef DEBUG
-{  
+{
   Int4 NbErr=0;
   Int4 i;
   for (i=0;i<nbt;i++)
-    if (triangles[i].link) 
+    if (triangles[i].link)
       {
       double dd =Det(triangles[i][1].r-triangles[i][0].r,triangles[i][2].r-triangles[i][0].r);
-      if(dd <=0) 
+      if(dd <=0)
 	{
 	  NbErr++;
 	  cerr << " det triangle i " << i << " = " << triangles[i].det ;
 	  cerr << " det triangle  " << dd ;
 	    cerr << " Les trois sommets " ;
-	    cerr << Number(triangles[i][0]) << " "  << Number(triangles[i][1]) << " " 
+	    cerr << Number(triangles[i][0]) << " "  << Number(triangles[i][1]) << " "
 		 << Number(triangles[i][2]) << endl;
 	    cerr << "I2     " <<triangles[i][0].r << triangles[i][1].r << triangles[i][2].r << endl;
 	    cerr << "R2     " << triangles[i][0].i << triangles[i][1].i << triangles[i][2].i << endl;
-	    cerr << "I2-R2 =" <<toR2(triangles[i][0].i)-triangles[i][0].r 
+	    cerr << "I2-R2 =" <<toR2(triangles[i][0].i)-triangles[i][0].r
 		 << toR2(triangles[i][1].i)-triangles[i][1].r
 		 << toR2(triangles[i][2].i)-triangles[i][2].r << endl;
 	}
       }
-  if(NbErr) { 
+  if(NbErr) {
 #ifdef DRAWING
     Int4 kkk=0;
     //  UnMarkUnSwapTriangle();
@@ -1830,16 +1830,16 @@ Int4 Triangles::InsertNewPoints(Int4 nbvold,Int4 & NbTSwap)
     cout << "    Nb of swap louche " << kkk << endl;
     if(kkk) {
   for (i=0;i<nbt;i++)
-    if (triangles[i].link) 
+    if (triangles[i].link)
       {
       double dd =Det(triangles[i][1].r-triangles[i][0].r,triangles[i][2].r-triangles[i][0].r);
-      if(dd <=0) 
+      if(dd <=0)
 	{
 	  NbErr++;
 	  cerr << " xxxdet triangle i " << i << " = " << triangles[i].det ;
 	  cerr << " xxxdet triangle  " << dd ;
 	    cerr << " xxxLes trois sommets " ;
-	    cerr << Number(triangles[i][0]) << " "  << Number(triangles[i][1]) << " " 
+	    cerr << Number(triangles[i][0]) << " "  << Number(triangles[i][1]) << " "
 		 << Number(triangles[i][2]) << endl;
 	    cerr << triangles[i][0].r << triangles[i][1].r << triangles[i][2].r << endl;
 	    cerr << triangles[i][0].i << triangles[i][1].i << triangles[i][2].i << endl;
@@ -1849,16 +1849,16 @@ Int4 Triangles::InsertNewPoints(Int4 nbvold,Int4 & NbTSwap)
 #endif
     //   MeshError(11);
   }
-  
+
 }
 #endif
   return nbv-nbvold;
- 
+
  }
 void  Triangles::NewPoints(Triangles & Bh,int KeepBackVertex)
 { // Triangles::NewPoints
   Int4 nbtold(nbt),nbvold(nbv);
-  if (verbosity>2) 
+  if (verbosity>2)
     cout << "  -- Triangles::NewPoints ";
   if (verbosity>3)cout <<  " nbv (in)  on Boundary  = " << nbv  <<endl;
   Int4 i,k;
@@ -1867,86 +1867,86 @@ void  Triangles::NewPoints(Triangles & Bh,int KeepBackVertex)
   Int4 NbTSwap =0;
 //    insert old point
     nbtold = nbt;
-    
-  if (KeepBackVertex && (&Bh != this) && (nbv+Bh.nbv< nbvx)) 
+
+  if (KeepBackVertex && (&Bh != this) && (nbv+Bh.nbv< nbvx))
    {
   //   Bh.SetVertexFieldOn();
      for (i=0;i<Bh.nbv;i++)
-      { 
+      {
         Vertex & bv = Bh[i];
         if (!bv.on) {
           vertices[nbv].r = bv.r;
           vertices[nbv++].m = bv.m;}
       }
      int nbv1=nbv;
-     Bh.ReMakeTriangleContainingTheVertex();     
-     InsertNewPoints(nbvold,NbTSwap)   ;            
+     Bh.ReMakeTriangleContainingTheVertex();
+     InsertNewPoints(nbvold,NbTSwap)   ;
      if (verbosity>2)
-        cout <<  "      (Nb of Points from background mesh  = " 
+        cout <<  "      (Nb of Points from background mesh  = "
              << nbv-nbvold  << " / " << nbv1-nbvold << ")" << endl;
-   }  
-  else 
-    Bh.ReMakeTriangleContainingTheVertex();     
+   }
+  else
+    Bh.ReMakeTriangleContainingTheVertex();
 
   Triangle *t;
-  // generation of the list of next Triangle 
+  // generation of the list of next Triangle
   // at 1 time we test all the triangles
   Int4 Headt =0,next_t;
   for(i=0;i<nbt;i++)
     first_np_or_next_t[i]=-(i+1);
-  // end list i >= nbt 
-  // the list of test triangle is 
+  // end list i >= nbt
+  // the list of test triangle is
   // the next traingle on i is  -first_np_or_next_t[i]
   int iter=0;
-  // Big loop 
+  // Big loop
   do {
     iter++;
     nbtold = nbt;
     nbvold = nbv;
-#ifdef DRAWING1  
+#ifdef DRAWING1
   inquire();
-#endif  
+#endif
 
   // default size of  IntersectionTriangle
 
   i=Headt;
   next_t=-first_np_or_next_t[i];
-  for(t=&triangles[i];i<nbt;t=&triangles[i=next_t],next_t=-first_np_or_next_t[i]) 
+  for(t=&triangles[i];i<nbt;t=&triangles[i=next_t],next_t=-first_np_or_next_t[i])
     { // for each triangle  t
       // we can change first_np_or_next_t[i]
       //      cout << " Do the triangle " << i << " Next_t=" << next_t << endl;
       assert(i>=0 && i < nbt );
-      first_np_or_next_t[i] = iter; 
+      first_np_or_next_t[i] = iter;
       for(j=0;j<3;j++)
-	{ // for each edge 
+	{ // for each edge
 	  TriangleAdjacent tj(t,j);
 	  Vertex & vA = * tj.EdgeVertex(0);
 	  Vertex & vB = * tj.EdgeVertex(1);
-	  
+
 	  if (!t->link) continue;// boundary
 	  if (t->det <0) continue;
 	  if (t->Locked(j)) continue;
 
-	  TriangleAdjacent tadjj = t->Adj(j);	  
+	  TriangleAdjacent tadjj = t->Adj(j);
 	  Triangle * ta= tadjj;
 
-	  if (ta->det <0) continue;	  
-	  
+	  if (ta->det <0) continue;
+
 	  R2 A = vA;
 	  R2 B = vB;
-	  
+
 	  k=Number(ta);
-	  
-	  if(first_np_or_next_t[k]==iter)  // this edge is done before 
-	    continue; // next edge of the triangle 
-	  
+
+	  if(first_np_or_next_t[k]==iter)  // this edge is done before
+	    continue; // next edge of the triangle
+
 	  //const Int4 NbvOld = nbv;
 	  lIntTria.SplitEdge(Bh,A,B);
 	  lIntTria.NewPoints(vertices,nbv,nbvx);
-	} // end loop for each edge 
-      
-    }// for triangle   
-  
+	} // end loop for each edge
+
+    }// for triangle
+
 #ifdef DRAWING1
   cout << "  -------------------------------------------- " << endl;
   inquire();
@@ -1955,37 +1955,37 @@ void  Triangles::NewPoints(Triangles & Bh,int KeepBackVertex)
   penthickness(2);
 #endif
 
-   if (!InsertNewPoints(nbvold,NbTSwap)) 
+   if (!InsertNewPoints(nbvold,NbTSwap))
      break;
-     
+
    for (i=nbtold;i<nbt;i++)
      first_np_or_next_t[i]=iter;
 
-  Headt = nbt; // empty list 
-  for (i=nbvold;i<nbv;i++) 
+  Headt = nbt; // empty list
+  for (i=nbvold;i<nbv;i++)
     { // for all the triangle contening the vertex i
        Vertex * s  = vertices + i;
        TriangleAdjacent ta(s->t, EdgesVertexTriangle[s->vint][1]);
        Triangle * tbegin= (Triangle*) ta;
        Int4 kt;
-       do { 
+       do {
 	 kt = Number((Triangle*) ta);
-	 if (first_np_or_next_t[kt]>0) 
+	 if (first_np_or_next_t[kt]>0)
 	   first_np_or_next_t[kt]=-Headt,Headt=kt;
 	 assert( ta.EdgeVertex(0) == s);
 	 ta = Next(Adj(ta));
-       } while ( (tbegin != (Triangle*) ta)); 
-    }   
-   
+       } while ( (tbegin != (Triangle*) ta));
+    }
+
   } while (nbv!=nbvold);
-  
+
   delete []  first_np_or_next_t;
 
   Int4 NbSwapf =0,NbSwp;
-  
-  // bofbof 
-  
-  
+
+  // bofbof
+
+
   NbSwp = NbSwapf;
   for (i=0;i<nbv;i++)
     NbSwapf += vertices[i].Optim(0);
@@ -2001,8 +2001,8 @@ void  Triangles::NewPoints(Triangles & Bh,int KeepBackVertex)
     */
   NbTSwap +=  NbSwapf ;
   if (verbosity>3) cout << "   " ;
-  if (verbosity>2) 
-     cout << " Nb Of Vertices =" << nbv << " Nb of triangles = " << nbt-NbOutT 
+  if (verbosity>2)
+     cout << " Nb Of Vertices =" << nbv << " Nb of triangles = " << nbt-NbOutT
 	  << " NbSwap final = " << NbSwapf << " Nb Total Of Swap = " << NbTSwap << endl;
 
 
@@ -2010,8 +2010,8 @@ void  Triangles::NewPoints(Triangles & Bh,int KeepBackVertex)
 
 void  Triangles::NewPointsOld(Triangles & Bh)
 { // Triangles::NewPointsOld
-  Real8 seuil= 0.7 ;// for two neart point 
-  if (verbosity>1) 
+  Real8 seuil= 0.7 ;// for two neart point
+  if (verbosity>1)
     cout << " begin :  Triangles::NewPointsOld " << endl;
   Int4 i,k;
   int j;
@@ -2025,29 +2025,29 @@ void  Triangles::NewPointsOld(Triangles & Bh)
   Int4 ColorEdge[3];
   Int4 color=-1;
   Triangle *t;
-  // generation of the list of next Triangle 
+  // generation of the list of next Triangle
   // at 1 time we test all the triangles
   Int4 Headt =0,next_t;
   for(i=0;i<nbt;i++)
     first_np_or_next_t[i]=-(i+1);
-  // end list i >= nbt 
-  // the list of test triangle is 
+  // end list i >= nbt
+  // the list of test triangle is
   // the next Triangle on i is  -first_np_or_next_t[i]
   Int4 nbtold,nbvold;
 
-  // Big loop 
+  // Big loop
   do {
     nbtold = nbt;
     nbvold = nbv;
-#ifdef DRAWING1  
+#ifdef DRAWING1
   inquire();
-#endif  
+#endif
 
   // default size of  IntersectionTriangle
 
   i=Headt;
   next_t=-first_np_or_next_t[i];
-  for(t=&triangles[i];i<nbt;t=&triangles[i=next_t],next_t=-first_np_or_next_t[i]) 
+  for(t=&triangles[i];i<nbt;t=&triangles[i=next_t],next_t=-first_np_or_next_t[i])
     { // for each triangle  t
       // we can change first_np_or_next_t[i]
 #ifdef TRACETRIANGLE
@@ -2057,20 +2057,20 @@ void  Triangles::NewPointsOld(Triangles & Bh)
       assert(i>=0 && i < nbt );
       first_np_or_next_t[i] = nbv; // to save the fist new point of triangle
       for(j=0;j<3;j++)
-	{ // for each edge 
+	{ // for each edge
 	  TriangleAdjacent tj(t,j);
 	  // color++;// the color is 3i+j
           color = 3*i + j ;;
 	  ColorEdge[j]=color;
 	  BeginNewPoint[j]=nbv;
 	  EndNewPoint[j]=nbv-1;
-	  step[j]=1;// right sens 
+	  step[j]=1;// right sens
 	  Vertex & vA = * tj.EdgeVertex(0);
 	  Vertex & vB = * tj.EdgeVertex(1);
-	  
+
 #ifdef TRACETRIANGLE
 	  if(trace) {
-	    cout << " i " << Number(vA) <<" j "<<  Number(vB) 
+	    cout << " i " << Number(vA) <<" j "<<  Number(vB)
 		 << " "  << t->Locked(j) ;
 	  }
 #endif
@@ -2078,32 +2078,32 @@ void  Triangles::NewPointsOld(Triangles & Bh)
 	  if (t->det <0) continue;
 	  if (t->Locked(j)) continue;
 
-	  TriangleAdjacent tadjj = t->Adj(j);	  
+	  TriangleAdjacent tadjj = t->Adj(j);
 	  Triangle * ta= tadjj;
 
-	  if (ta->det <0) continue;	  
-	  
+	  if (ta->det <0) continue;
+
 	  R2 A = vA;
 	  R2 B = vB;
-	  
+
 	  k=Number(ta);
-	  // the 2 opposite vertices 
+	  // the 2 opposite vertices
 	  const Vertex & vC1  =  *tj.OppositeVertex();
 	  const Vertex & vC2 = *tadjj.OppositeVertex();
-	  
+
 #ifdef TRACETRIANGLE
 	  trace = trace || k == TRACETRIANGLE;
 	  if(trace) {
-	    cout << "Test Arete " << i << " AB = " << A << B 
-		 << "i "  <<Number(vA)<< "j" <<Number(vB); 
-	    cout << " link" <<(int)t->link << " ta=" << Number( ta) 
+	    cout << "Test Arete " << i << " AB = " << A << B
+		 << "i "  <<Number(vA)<< "j" <<Number(vB);
+	    cout << " link" <<(int)t->link << " ta=" << Number( ta)
 		 << " det " <<ta->det ;
 	    cout << " hA = " <<vA.m.h << " hB = " <<vB.m.h ;
 	    cout << " loc " << ta->Locked(j) << endl;
 	  }
 #endif
-	  
-	  if(first_np_or_next_t[k]>0) { // this edge is done before 
+
+	  if(first_np_or_next_t[k]>0) { // this edge is done before
 	    // find the color of the edge and begin , end of newpoint
 	    register int kk = t->NuEdgeTriangleAdj(j);
 	    assert ((*t)(VerticesOfTriangularEdge[j][0]) == (*ta)(VerticesOfTriangularEdge[kk][1]));
@@ -2111,20 +2111,20 @@ void  Triangles::NewPointsOld(Triangles & Bh)
 	    register Int4 kolor =3*k + kk;
 	    ColorEdge[j]=kolor;
 	    register Int4 kkk= 1;
-	    step[j]=-1;// other sens 
+	    step[j]=-1;// other sens
 	    BeginNewPoint[j]=0;
-	    EndNewPoint[j]=-1; // empty list          
-	    for (Int4 iv=first_np_or_next_t[k];iv<nbv;iv++) 
-	      if (vertices[iv].color > kolor) 
-		break; // the color is passed            
+	    EndNewPoint[j]=-1; // empty list
+	    for (Int4 iv=first_np_or_next_t[k];iv<nbv;iv++)
+	      if (vertices[iv].color > kolor)
+		break; // the color is passed
 	      else if (vertices[iv].color == kolor) {
-		EndNewPoint[j]=iv; 
+		EndNewPoint[j]=iv;
 		if (kkk) // one time test
 		  kkk=0,BeginNewPoint[j]=iv;}
-	    continue; // next edge of the triangle 
-	  } // end  if( k < i) 
-       
-	  
+	    continue; // next edge of the triangle
+	  } // end  if( k < i)
+
+
 #ifdef DRAWING1
 	  penthickness(2); Move(A);Line(B);   penthickness(1);
 #endif
@@ -2146,51 +2146,51 @@ void  Triangles::NewPointsOld(Triangles & Bh)
 		&& (  (vC2.m(CC2) + vertices[nbv].m(CC2)) >  seuil) )
 	      nbv++;
 	  }
-	    
+
 	  EndNewPoint[j] = nbv-1;
-	} // end loop for each edge 
+	} // end loop for each edge
 
 #ifdef TRACETRIANGLE
       if(trace) {
-	// verification des point cree 
-	cout << "\n ------------ " << t->link << " " << t->det 
+	// verification des point cree
+	cout << "\n ------------ " << t->link << " " << t->det
 	     << " b " << BeginNewPoint[0] << " " << BeginNewPoint[1]
-	     << " " << BeginNewPoint[2] << " " 
-	     << " e " << EndNewPoint[0] << " " << EndNewPoint[1] 
-	     << " " << EndNewPoint[2] << " " 
-	     << " s " << step[0] << " " << step[1] << " " << step[2] << " " 
+	     << " " << BeginNewPoint[2] << " "
+	     << " e " << EndNewPoint[0] << " " << EndNewPoint[1]
+	     << " " << EndNewPoint[2] << " "
+	     << " s " << step[0] << " " << step[1] << " " << step[2] << " "
 	     <<  endl;
       }
 #endif
 
       if (!t->link) continue;// boundary
-      if (t->det<=0) continue;// outside 
+      if (t->det<=0) continue;// outside
       //      continue;
       for(int j0=0;j0<3;j0++)
 	for (Int4 i0= BeginNewPoint[j0]; i0 <= EndNewPoint[j0];i0++)
 	  {
-	   // find the neart  point one the opposite edge 
+	   // find the neart  point one the opposite edge
            // to compute i1
 	    Vertex & vi0 = vertices[i0];
 	    int kstack = 0;
 	    Int4 stack[10];
 	 //   Int4 savRef[10];
-	    int j1 = j0; 
+	    int j1 = j0;
 	    while (j0 != (j1 = NextEdge[j1])) {//loop on the 2 other edge
 	      // computation of the intersection of edge j1 and DOrto
-	      // take the good sens 
-	      
+	      // take the good sens
+
 	      if (BeginNewPoint[j1]> EndNewPoint[j1])
-	        continue; // 
+	        continue; //
               else if (EndNewPoint[j1] - BeginNewPoint[j1] <1) {
                 for (Int4 ii1= BeginNewPoint[j1];ii1<=EndNewPoint[j1];ii1++)
                     stack[kstack++] = ii1;
                  continue;}
-	      
-                
+
+
 	      int k0,k1;
 	      if (step[j1]<0) k0=1,k1=0; // reverse
-	      else k0=0,k1=1; 
+	      else k0=0,k1=1;
 	      R2 V10 = (R2)(*t)[VerticesOfTriangularEdge[j1][k0]];
 	      R2 V11 = (R2)(*t)[VerticesOfTriangularEdge[j1][k1]];
 	      R2 D = V11-V10;
@@ -2202,9 +2202,9 @@ void  Triangles::NewPointsOld(Triangles & Bh)
 	      Real8 s;
 	      //cout << " --i0 = " << i0  << D  << V10 << V11 << endl ;
 	      //cout << "   c10 " <<  c10 << " c0 " << c0 << " c11 " << c11 << endl;
-	      if (( c10 < c0 ) && (c0 < c11)) 
+	      if (( c10 < c0 ) && (c0 < c11))
 		s = (c11-c0)/(c11-c10);
-	      else if  (( c11 < c0 ) && (c0 < c10)) 
+	      else if  (( c11 < c0 ) && (c0 < c10))
 		s = (c11-c0) /(c11-c10);
 	      else break;
 	      R2 VP = V10*s + V11*(1-s);
@@ -2218,11 +2218,11 @@ void  Triangles::NewPointsOld(Triangles & Bh)
 	      // find the 2 point by dichotomie
 	      //cout << "   t =" << Number(t) << " c0 " << c0  ;
 	      Int4 ii0 =  BeginNewPoint[j1];
-	      Int4 ii1 =  EndNewPoint[j1];	     
+	      Int4 ii1 =  EndNewPoint[j1];
               Real8 ciii=-1,cii0=-1,cii1=-1  ;
- 	      if ( sss * ((cii0=vi0.m(D,(R2) vertices[ii0]))- c0) >0 )  
+ 	      if ( sss * ((cii0=vi0.m(D,(R2) vertices[ii0]))- c0) >0 )
 		stack[kstack++] = ii0;//cout << " add+0 " << ii0;
- 	      else if ( sss * ((cii1=  vi0.m(D ,(R2) vertices[ii1]))- c0) < 0 )  
+ 	      else if ( sss * ((cii1=  vi0.m(D ,(R2) vertices[ii1]))- c0) < 0 )
 		stack[kstack++] = ii1;//cout << " add+1 " << ii1;
               else {
 	        while ((ii1-ii0)> 1) {
@@ -2230,31 +2230,31 @@ void  Triangles::NewPointsOld(Triangles & Bh)
 	          ciii = vi0.m( D ,(R2) vertices[iii]);
 		  //cout << " (iii = " << iii << " " <<  ciii << ") ";
 		  if ( sss * (ciii - c0) <0 )  ii0 = iii;
-		  else ii1 = iii;}	        	      
+		  else ii1 = iii;}
 	        stack[kstack++] = ii0;// cout << " add0 " << ii0;
 	        if (ii1 != ii0)  stack[kstack++] = ii1;//cout << " add1 " << ii1;
               }
 #ifdef DEBUG2
-	      cout << "ii1 = " << ii1 
+	      cout << "ii1 = " << ii1
 		   << " ii0 = " << ii0 << endl;
-              cout << "   cccc = " << cii0 << " " << ciii 
+              cout << "   cccc = " << cii0 << " " << ciii
 		   << " " << cii1 << " sss=" << sss << endl;
 #endif
 	      if (kstack >5) // bug ?
 	    	cout << "NewPoints: bug????? " << kstack << " stack  " << stack[kstack]<< endl;
 	    }
-	    
+
 	    stack[kstack++] = -1; // to stop
 	    Int4 i1;
-	    kstack =0; 
-	    while( (i1=stack[kstack++]) >= 0) 
-	      { // the two parameter is i0 and i1 
+	    kstack =0;
+	    while( (i1=stack[kstack++]) >= 0)
+	      { // the two parameter is i0 and i1
 	      assert(i1 < nbv && i1 >= 0);
 	      assert(i0 < nbv && i0 >= 0);
 	      assert(i1 != i0);
 	      R2 v01 = (R2) vertices[i1]- (R2) vertices[i0];
 	      Real8 d01 = (vertices[i0].m(v01) + vertices[i1].m(v01));
-		
+
 
 #ifdef DRAWING1
 	      Move(vertices[i0].r);
@@ -2262,15 +2262,15 @@ void  Triangles::NewPointsOld(Triangles & Bh)
 #endif
 #ifdef TRACETRIANGLE
 	      if(trace) {
-		cout << "\n test j" << j <<" "  << i0 
+		cout << "\n test j" << j <<" "  << i0
 		     << " " << i1 << " d01=" << d01 <<endl;}
 #endif
 	      assert (i0 >= nbvold);
 	      assert (i1 >= nbvold);
 	      assert(i0 != i1);
-	      if (d01 == 0) 
-		break; 
-	      if ( d01 < seuil) 
+	      if (d01 == 0)
+		break;
+	      if ( d01 < seuil)
 		if (i1<nbvold) {
 		  // remove all the points i0;
 		  register Int4 ip,ipp;
@@ -2285,13 +2285,13 @@ void  Triangles::NewPointsOld(Triangles & Bh)
 		// count the number of common points to compute weight w0,w1
 		for  (ip0=i0;i0 != (ipp0 = vertices[ip0].ReferenceNumber);ip0=ipp0) kk0++;
 		for  (ip1=i1;i1 != (ipp1 = vertices[ip1].ReferenceNumber);ip1=ipp1) kk1++;
-		
+
 		register Real8 w0 = ((Real8) kk0)/(kk0+kk1);
 		register Real8 w1 = ((Real8) kk1)/(kk0+kk1);
 
 		// make a circular link
 		Exchange(vertices[i0].ReferenceNumber,vertices[i1].ReferenceNumber);
-		// the new coordinate 
+		// the new coordinate
 		R2 C //= vertices[i0] ;
 		  =  vertices[i0].r *w0 + vertices[i1].r* w1;
 
@@ -2299,20 +2299,20 @@ void  Triangles::NewPointsOld(Triangles & Bh)
 		if(trace) {
 		  cout << "\n ref = "<< vertices[i0].ref << " " <<vertices[i1].ref <<endl;
 		}
-#endif    
-#ifdef DRAWING1  
+#endif
+#ifdef DRAWING1
 		Move(vertices[i0].r);
 		Line(vertices[i1].r);
 		DrawMark(C);
-#endif		
-		// update the new point points of the list 
+#endif
+		// update the new point points of the list
 		for  (ip0=i0;i0 != (ipp0 = vertices[ip0].ReferenceNumber);ip0=ipp0)
-		  vertices[ip0].r = C;	      
+		  vertices[ip0].r = C;
 		vertices[ip0].r = C;
 	      }
 	    }
 	} // for (i0= ....
-  }// for triangle   
+  }// for triangle
 
 #ifdef DRAWING1
   cout << " -------------------------------------------- " << endl;
@@ -2321,91 +2321,91 @@ void  Triangles::NewPointsOld(Triangles & Bh)
   Draw();
   penthickness(2);
 #endif
-  
+
   // remove of all the double points
 
   Int4 ip,ipp,kkk=nbvold;
-  for (i=nbvold;i<nbv;i++) 
+  for (i=nbvold;i<nbv;i++)
      if (vertices[i].ReferenceNumber>=0) {// good points
     //  cout <<" i = " << i ;
       for  (ip=i;i != (ipp = vertices[ip].ReferenceNumber);ip=ipp)
          vertices[ip].ReferenceNumber = -1;// mark remove
       vertices[ip].ReferenceNumber = -1;// mark remove
-      // cout << i << " ---> " << kkk << endl;        
+      // cout << i << " ---> " << kkk << endl;
       vertices[kkk] = vertices[i];
       vertices[kkk].i = toI2(vertices[kkk].r);
 #ifdef DRAWING1
       DrawMark(vertices[kkk]);
 #endif
       vertices[kkk++].ReferenceNumber = 0;
-      
-     } 
-#ifdef DRAWING1  
+
+     }
+#ifdef DRAWING1
   penthickness(1);
 #endif
-    
- // insertion part --- 
+
+ // insertion part ---
 
   const Int4 nbvnew = kkk-nbvold;
 
   cout << "    Remove " << nbv - kkk  << " to close  vertex " ;
-  cout << " and   Insert the " <<nbvnew<< " new points " << endl;  
+  cout << " and   Insert the " <<nbvnew<< " new points " << endl;
   nbv = kkk;
   Int4 NbSwap=0;
   Icoor2 dete[3];
-  
-  // construction d'un ordre aleatoire 
-  if (! nbvnew) 
-    break; 
+
+  // construction d'un ordre aleatoire
+  if (! nbvnew)
+    break;
   if (nbvnew) {
   const Int4 PrimeNumber= AGoodNumberPrimeWith(nbv)  ;
-  Int4 k3 = rand()%nbvnew ; 
-  for (Int4 is3=0; is3<nbvnew; is3++) 
+  Int4 k3 = rand()%nbvnew ;
+  for (Int4 is3=0; is3<nbvnew; is3++)
     ordre[nbvold+is3]= &vertices[nbvold +(k3 = (k3 + PrimeNumber)% nbvnew)];
 
-  for (i=nbvold;i<nbv;i++) 
+  for (i=nbvold;i<nbv;i++)
     { Vertex * vi = ordre[i];
       Triangle *tcvi = FindTriangleContening(vi->i,dete);
       //     Vertex * nv =  quadtree->NearestVertex(vi->i.x,vi->i.y);
-      //      cout << " Neart Vertex of "  << Number(vi)<< vi->i << " is " 
+      //      cout << " Neart Vertex of "  << Number(vi)<< vi->i << " is "
       //   << Number(nv) << nv->i  << endl;
       // Int4  kt = Number(tcvi);
-      // 
-      
+      //
+
       quadtree->Add(*vi); //
 #ifdef DRAWING1
       DrawMark(vi->r);
 #endif
-      assert (tcvi->det >= 0) ;// internal 
-      Add(*vi,tcvi,dete),NbSwap += vi->Optim(1);          
-    }  
+      assert (tcvi->det >= 0) ;// internal
+      Add(*vi,tcvi,dete),NbSwap += vi->Optim(1);
+    }
   }
   cout << " Nb swap = " << NbSwap << " after " ;
 #ifdef DRAWING1
   inquire();
 #endif
 
-  for (i=nbvold;i<nbv;i++) 
-    NbSwap += vertices[i].Optim(1);  
+  for (i=nbvold;i<nbv;i++)
+    NbSwap += vertices[i].Optim(1);
   cout << NbSwap << endl;
 
   for (i=nbtold;i<nbt;i++)
      first_np_or_next_t[i]=1;
 
-  Headt = nbt; // empty list 
-  for (i=nbvold;i<nbv;i++) 
+  Headt = nbt; // empty list
+  for (i=nbvold;i<nbv;i++)
     { // for all the triangle contening the vertex i
        Vertex * s  = vertices + i;
        TriangleAdjacent ta(s->t, EdgesVertexTriangle[s->vint][1]);
        Triangle * tbegin= (Triangle*) ta;
        Int4 kt;
-       do { 
+       do {
 	 kt = Number((Triangle*) ta);
-	 if (first_np_or_next_t[kt]>0) 
+	 if (first_np_or_next_t[kt]>0)
 	   first_np_or_next_t[kt]=-Headt,Headt=kt;
 	 assert( ta.EdgeVertex(0) == s);
 	 ta = Next(Adj(ta));
-       } while ( (tbegin != (Triangle*) ta)); 
+       } while ( (tbegin != (Triangle*) ta));
     }
 
 
@@ -2414,7 +2414,7 @@ void  Triangles::NewPointsOld(Triangles & Bh)
 #ifdef  DEBUG
   int nberr=0;
   for (int it=0;it<nbt;it++)
-    if(triangles[it].det==0) 
+    if(triangles[it].det==0)
       if(nberr++<10) cerr << "Bug Triangle nul" << it << triangles[it] << endl;
   if(nberr) MeshError(992,this);
 #endif
@@ -2422,7 +2422,7 @@ void  Triangles::NewPointsOld(Triangles & Bh)
 
 }
 
-void Triangles::Insert() 
+void Triangles::Insert()
 {
   if (verbosity>2) cout << "  -- Insert initial " << nbv << " vertices " << endl ;
   Triangles * OldCurrentTh =CurrentTh;
@@ -2431,42 +2431,42 @@ void Triangles::Insert()
   double time0=CPUtime(),time1,time2,time3;
   SetIntCoor();
   Int4 i;
-  for (i=0;i<nbv;i++) 
+  for (i=0;i<nbv;i++)
     ordre[i]= &vertices[i] ;
 
-  // construction d'un ordre aleatoire 
+  // construction d'un ordre aleatoire
   const Int4 PrimeNumber= AGoodNumberPrimeWith(nbv) ;
-  Int4 k3 = rand()%nbv ; 
-  for (int is3=0; is3<nbv; is3++) 
+  Int4 k3 = rand()%nbv ;
+  for (int is3=0; is3<nbv; is3++)
     ordre[is3]= &vertices[k3 = (k3 + PrimeNumber)% nbv];
 
 
 
 
-  for (i=2 ; det( ordre[0]->i, ordre[1]->i, ordre[i]->i ) == 0;) 
+  for (i=2 ; det( ordre[0]->i, ordre[1]->i, ordre[i]->i ) == 0;)
     if  ( ++i >= nbv) {
       cerr << " All the vertices are aline " << endl;
       MeshError(998,this); }
-          
-  // echange i et 2 dans ordre afin 
+
+  // echange i et 2 dans ordre afin
   // que les 3 premiers ne soit pas aligne
   Exchange( ordre[2], ordre[i]);
-  
+
   // on ajoute un point a l'infini pour construire le maillage
   // afin d'avoir une definition simple des aretes frontieres
   nbt = 2;
-  
-  
+
+
   // on construit un maillage trivale forme
   // d'une arete et de 2 triangles
-  // construit avec le 2 aretes orientes et 
+  // construit avec le 2 aretes orientes et
   Vertex *  v0=ordre[0], *v1=ordre[1];
-  
-  triangles[0](0) = 0; // sommet pour infini 
+
+  triangles[0](0) = 0; // sommet pour infini
   triangles[0](1) = v0;
   triangles[0](2) = v1;
-  
-  triangles[1](0) = 0;// sommet pour infini 
+
+  triangles[1](0) = 0;// sommet pour infini
   triangles[1](2) = v0;
   triangles[1](1) = v1;
   const int e0 = OppositeEdge[0];
@@ -2475,26 +2475,26 @@ void Triangles::Insert()
   triangles[0].SetAdj2(e0, &triangles[1] ,e0);
   triangles[0].SetAdj2(e1, &triangles[1] ,e2);
   triangles[0].SetAdj2(e2, &triangles[1] ,e1);
-  
+
   triangles[0].det = -1;  // faux triangles
   triangles[1].det = -1;  // faux triangles
-  
+
   triangles[0].SetTriangleContainingTheVertex();
   triangles[1].SetTriangleContainingTheVertex();
-  
+
   triangles[0].link=&triangles[1];
   triangles[1].link=&triangles[0];
-  
-#ifdef DEBUG 
+
+#ifdef DEBUG
   triangles[0].check();
   triangles[1].check();
-#endif  
+#endif
   //  nbtf = 2;
    if (  !quadtree )  quadtree = new QuadTree(this,0);
    quadtree->Add(*v0);
    quadtree->Add(*v1);
-   
-  // on ajoute les sommets un � un 
+
+  // on ajoute les sommets un � un
   Int4 NbSwap=0;
 
   time1=CPUtime();
@@ -2506,67 +2506,67 @@ void Triangles::Insert()
     //    cout << " Insert " << Number(vi) << endl;
     Icoor2 dete[3];
     Triangle *tcvi = FindTriangleContening(vi->i,dete);
-    quadtree->Add(*vi); 
+    quadtree->Add(*vi);
     Add(*vi,tcvi,dete);
     NbSwap += vi->Optim(1,0);
 #ifdef DRAWING1
     inquire();
 #endif
-    
+
   }// fin de boucle en icount
   time2=CPUtime();
-  if (verbosity>3) 
-    cout << "    NbSwap of insertion " <<    NbSwap 
-	 << " NbSwap/Nbv " <<  (float) NbSwap / (float) nbv 
-	 << " NbUnSwap " << NbUnSwap << " Nb UnSwap/Nbv " 
-	 << (float)NbUnSwap /(float) nbv 
+  if (verbosity>3)
+    cout << "    NbSwap of insertion " <<    NbSwap
+	 << " NbSwap/Nbv " <<  (float) NbSwap / (float) nbv
+	 << " NbUnSwap " << NbUnSwap << " Nb UnSwap/Nbv "
+	 << (float)NbUnSwap /(float) nbv
 	 <<endl;
   NbUnSwap = 0;
-  // construction d'un ordre aleatoire 
+  // construction d'un ordre aleatoire
   //  const int PrimeNumber= (nbv % 999983) ? 1000003: 999983 ;
 #ifdef NBLOOPOPTIM
 
-  k3 = rand()%nbv ; 
-  for (int is4=0; is4<nbv; is4++) 
+  k3 = rand()%nbv ;
+  for (int is4=0; is4<nbv; is4++)
     ordre[is4]= &vertices[k3 = (k3 + PrimeNumber)% nbv];
-  
+
   double timeloop = time2 ;
-  for(int Nbloop=0;Nbloop<NBLOOPOPTIM;Nbloop++) 
+  for(int Nbloop=0;Nbloop<NBLOOPOPTIM;Nbloop++)
     {
       double time000 = timeloop;
       Int4  NbSwap = 0;
-      for (int is1=0; is1<nbv; is1++) 
+      for (int is1=0; is1<nbv; is1++)
 	NbSwap += ordre[is1]->Optim(0,0);
       timeloop = CPUtime();
-  if (verbosity>3) 
-      cout << "    Optim Loop "<<Nbloop<<" NbSwap: " <<  NbSwap 
-	   << " NbSwap/Nbv " 	   <<  (float) NbSwap / (float) nbv 
-	   << " CPU=" << timeloop - time000 << "  s, " 
-	   << " NbUnSwap/Nbv " << (float)NbUnSwap /(float) nbv  
+  if (verbosity>3)
+      cout << "    Optim Loop "<<Nbloop<<" NbSwap: " <<  NbSwap
+	   << " NbSwap/Nbv " 	   <<  (float) NbSwap / (float) nbv
+	   << " CPU=" << timeloop - time000 << "  s, "
+	   << " NbUnSwap/Nbv " << (float)NbUnSwap /(float) nbv
 	   <<  endl;
       NbUnSwap = 0;
       if(!NbSwap) break;
     }
-  ReMakeTriangleContainingTheVertex(); 
+  ReMakeTriangleContainingTheVertex();
   // because we break the TriangleContainingTheVertex
 #endif
 #ifdef  DEBUG
   int nberr=0;
   for (int it=0;it<nbt;it++)
-    if(triangles[it].det==0) 
+    if(triangles[it].det==0)
       if(nberr++<10) cerr << "Bug Triangle nul" << it << triangles[it] << endl;
   if(nberr) MeshError(991,this);
 #endif
   time3=CPUtime();
-  if (verbosity>4) 
-  cout << "    init " << time1 - time0 << " initialisation,  " 
-       << time2 - time1 << "s, insert point  " 
+  if (verbosity>4)
+  cout << "    init " << time1 - time0 << " initialisation,  "
+       << time2 - time1 << "s, insert point  "
        << time3 -time2 << "s, optim " << endl
        << "     Init Total Cpu Time = " << time3 - time0 << "s " << endl;
-  
+
 #ifdef DRAWING1
   inquire();
-#endif  
+#endif
   CurrentTh=OldCurrentTh;
 }
 
@@ -2577,18 +2577,18 @@ void Triangles::ForceBoundary()
     cout << "  -- ForceBoundary  nb of edge " << nbe << endl;
   int k=0;
   Int4  nbfe=0,nbswp=0,Nbswap=0;
-  for (Int4 t = 0; t < nbt; t++)  
+  for (Int4 t = 0; t < nbt; t++)
     if (!triangles[t].det)
       k++,cerr << " det T" << t << " = " << 0 << endl;
   if (k!=0) {
     cerr << " ther is  " << k << "  triangles of mes = 0 " << endl;
     MeshError(11,this);}
-  
+
   TriangleAdjacent ta(0,0);
-  for (Int4 i = 0; i < nbe; i++) 
+  for (Int4 i = 0; i < nbe; i++)
     {
       nbswp =  ForceEdge(edges[i][0],edges[i][1],ta);
-      
+
       if ( nbswp < 0) 	k++;
       else Nbswap += nbswp;
       if (nbswp) nbfe++;
@@ -2598,17 +2598,17 @@ void Triangles::ForceBoundary()
       	   <<" v1= " << Number(edges[i][1]) << edges[i][1].r << " " << edges[i].on->Cracked() << "  " << (Triangle *) ta ;
 	  if(ta.t)
 	  {
-	      Vertex *aa = ta.EdgeVertex(0), *bb = ta.EdgeVertex(1);  
+	      Vertex *aa = ta.EdgeVertex(0), *bb = ta.EdgeVertex(1);
 	      cerr << " crossing with  [" << Number(aa) << ", " << Number(bb) << "]\n";
 	  }
 	  else cerr << endl;
-	   
+
       }
       if ( nbswp >=0 && edges[i].on->Cracked())
 	  ta.SetCracked();
     }
-		  
-  
+
+
   if (k!=0) {
     cerr << " they is " << k << " lost edges " << endl;
     cerr << " The boundary is crossing may be!" << endl;
@@ -2624,106 +2624,106 @@ void Triangles::ForceBoundary()
 void Triangles::FindSubDomain(int OutSide=0)
 {
     //#define DRAWING1
-    
+
     if (verbosity >2)
     {
 	if (OutSide)
-	    cout << "  -- Find all external sub-domain ";	
+	    cout << "  -- Find all external sub-domain ";
 	else
 	    cout << "  -- Find all internal sub-domain ";
       if(verbosity>99)
 	{
-	  
+
 	  for(int i=0;i<nbt;++i)
 	      cout << i<< " " << triangles[i] << endl;
 	}
-	
+
     }
     // if (verbosity > 4) cout << " OutSide=" << OutSide << endl;
     short * HeapArete = new short[nbt];
     Triangle  **  HeapTriangle = new Triangle*  [nbt];
     Triangle *t,*t1;
     Int4 k,it;
-    
-    for (Int4 itt=0;itt<nbt;itt++) 
+
+    for (Int4 itt=0;itt<nbt;itt++)
 	triangles[itt].link=0; // par defaut pas de couleur
 #ifdef DRAWING1
     reffecran();
 #endif
-    
+
     Int4  NbSubDomTot =0;
-    for ( it=0;it<nbt;it++)  { 
+    for ( it=0;it<nbt;it++)  {
 	if ( ! triangles[it].link  ) {
 	    t = triangles + it;
 	    NbSubDomTot++;; // new composante connexe
-	    Int4 i = 0; // niveau de la pile 
+	    Int4 i = 0; // niveau de la pile
 	    t->link = t ; // sd forme d'un triangle cicular link
 #ifdef DRAWING1
 	    t->Draw(NbSubDomTot-1);
 #endif
-	    
-	    
-	    HeapTriangle[i] =t ; 
+
+
+	    HeapTriangle[i] =t ;
 	    HeapArete[i] = 3;
-	    
+
 	    while (i >= 0) // boucle sur la pile
-	    { while ( HeapArete[i]--) // boucle sur les 3 aretes 
-	    { 
+	    { while ( HeapArete[i]--) // boucle sur les 3 aretes
+	    {
 		int na =  HeapArete[i];
 		Triangle * tc =  HeapTriangle[i]; // triangle courant
 		if( ! tc->Locked(na)) // arete non frontiere
 		{
 		    Triangle * ta = tc->TriangleAdj(na) ; // n� triangle adjacent
 		    if (ta->link == 0 ) // non deja chainer => on enpile
-		    { 
+		    {
 			i++;
 #ifdef DRAWING1
 			ta->Draw(NbSubDomTot-1);
 #endif
 			ta->link = t->link ;  // on chaine les triangles
-			t->link = ta ;  // d'un meme sous domaine          
+			t->link = ta ;  // d'un meme sous domaine
 			HeapArete[i] = 3; // pour les 3 triangles adjacents
 			HeapTriangle[i] = ta;
 		    }}
 	    } // deplie fin de boucle sur les 3 adjacences
 		i--;
-	    }          
-	}      
+	    }
+	}
     }
-    
+
     // supression de tous les sous domaine infini <=>  contient le sommet NULL
     it =0;
     NbOutT = 0;
     while (it<nbt) {
-	if (triangles[it].link) 
-	{ 
-	    if (!( triangles[it](0) &&  triangles[it](1) &&  triangles[it](2) )) 
+	if (triangles[it].link)
+	{
+	    if (!( triangles[it](0) &&  triangles[it](1) &&  triangles[it](2) ))
 	    {
-		// infini triangle 
+		// infini triangle
 		NbSubDomTot --;
 		//  cout << " triangle infini " << it << triangles[it] << endl;
 		t=&triangles[it];
-		NbOutT--;  // on fait un coup de trop. 
+		NbOutT--;  // on fait un coup de trop.
 		while  (t){ // cout << Number(t) << " " << endl;
 		    NbOutT++;
 		    t1=t;
 		    t=t->link;
 		    t1->link=0;}//while (t)
 	    }
-	}   
+	}
 	it++;} // end while (it<nbt)
-    if (nbt == NbOutT ||  !NbSubDomTot) 
+    if (nbt == NbOutT ||  !NbSubDomTot)
     {
 	cout << "\n error : " <<  NbOutT << " " << NbSubDomTot <<" " << nbt << endl;
 	cerr << "Error: The boundary is not close => All triangles are outside " << endl;
 	MeshError(888,this);
     }
-    
+
     delete [] HeapArete;
     delete [] HeapTriangle;
-    
-    
-    if (OutSide|| !Gh.subdomains || !Gh.NbSubDomains ) 
+
+
+    if (OutSide|| !Gh.subdomains || !Gh.NbSubDomains )
     { // No geom sub domain
 	Int4 i;
 	if (subdomains) delete [] subdomains;
@@ -2736,7 +2736,7 @@ void Triangles::FindSubDomain(int OutSide=0)
 	Int4 * mark = new Int4[nbt];
 	for (it=0;it<nbt;it++)
 	    mark[it]=triangles[it].link ? -1 : -2;
-	
+
 	it =0;
 	k = 0;
 	while (it<nbt) {
@@ -2744,26 +2744,26 @@ void Triangles::FindSubDomain(int OutSide=0)
 		t1 = & triangles[it];
 		t = t1->link;
 		mark[it]=k;
-#ifdef DRAWING1  
+#ifdef DRAWING1
 		t1->Draw(k);
 #endif
 		subdomains[k].head = t1;
 		// cout << " New -- " << Number(t1) << " " << it << endl;
 		do {// cout << " k " << k << " " << Number(t) << endl;
 		    mark[Number(t)]=k;
-#ifdef DRAWING1  
+#ifdef DRAWING1
 		    t->Draw(k);
 #endif
 		    t=t->link;
 		} while (t!=t1);
-#ifdef DRAWING1  
+#ifdef DRAWING1
 		t1->Draw(k);
 #endif
 		mark[it]=k++;}
 	    //    else if(mark[it] == -2 ) triangles[it].Draw(999);
 	    it++;} // end white (it<nbt)
 	assert(k== NbSubDomains);
-	if(OutSide) 
+	if(OutSide)
 	{
 	    //  to remove all the sub domain by parity adjacents
 	    //  because in this case we have only the true boundary edge
@@ -2787,18 +2787,18 @@ void Triangles::FindSubDomain(int OutSide=0)
 				nbk--,subdomains[kl].ref=-1;
 			    if(kl<0 && kr >=0 && subdomains[kr].ref>=0)
 				nbk--,subdomains[kr].ref=-1;
-			    //   cout << " after \t "   
-			    //	 << kl << subdomains[kl].ref << " rr " << kr 
+			    //   cout << " after \t "
+			    //	 << kl << subdomains[kl].ref << " rr " << kr
 			    // << subdomains[kr].ref << endl;
 			}
 		    }
 			//  cout << subdomains[0].ref << subdomains[1].ref << endl;
 			Int4  j=0;
 	    for ( i=0;i<NbSubDomains;i++)
-		if((-subdomains[i].ref) %2) { // good 
+		if((-subdomains[i].ref) %2) { // good
 					      //cout << " sudom ok  = " << i << " " << subdomains[i].ref
 					      // << " " << (-subdomains[i].ref) %2 << endl;
-		    if(i != j) 
+		    if(i != j)
 			Exchange(subdomains[i],subdomains[j]);
 		    j++;}
 		    else
@@ -2810,20 +2810,20 @@ void Triangles::FindSubDomain(int OutSide=0)
 			    t=t->link;
 			    t1->link=0;}//while (t)
 		    }
-		    
+
 		    if(verbosity>4)
 			cout << " Number of remove sub domain (OutSideMesh) =" << NbSubDomains-j << endl;
 	    NbSubDomains=j;
 	}
-	
-	delete []  mark; 
-	
+
+	delete []  mark;
+
     }
     else
     { // find the head for all sub domaine
 	if (Gh.NbSubDomains != NbSubDomains && subdomains)
 	    delete [] subdomains, subdomains=0;
-	if (! subdomains  ) 
+	if (! subdomains  )
 	    subdomains = new SubDomain[ Gh.NbSubDomains];
 	NbSubDomains =Gh.NbSubDomains;
 	if(verbosity>4)
@@ -2832,24 +2832,24 @@ void Triangles::FindSubDomain(int OutSide=0)
 	ReMakeTriangleContainingTheVertex();
 	Int4 * mark = new Int4[nbt];
 	Edge **GeometricalEdgetoEdge = MakeGeometricalEdgeToEdge();
-        
+
 	for (it=0;it<nbt;it++)
 	    mark[it]=triangles[it].link ? -1 : -2;
 	Int4 inew =0;
-	for (Int4 i=0;i<NbSubDomains;i++) 
+	for (Int4 i=0;i<NbSubDomains;i++)
 	{
 	    GeometricalEdge &eg = *Gh.subdomains[i].edge;
 	    subdomains[i].ref = Gh.subdomains[i].ref;
 	    int ssdlab = subdomains[i].ref;
-	    // by carefull is not easy to find a edge create from a GeometricalEdge 
+	    // by carefull is not easy to find a edge create from a GeometricalEdge
 	    // see routine MakeGeometricalEdgeToEdge
 	    Edge &e = *GeometricalEdgetoEdge[Gh.Number(eg)];
 	    assert(&e);
 	    Vertex * v0 =  e(0),*v1 = e(1);
 	    Triangle *t  = v0->t;
 	    int sens = Gh.subdomains[i].sens;
-	    // test if ge and e is in the same sens 
-	    //	cout << " geom edge = " <<  Gh.Number(eg) <<" @" << &eg << " ref = " << subdomains[i].ref 
+	    // test if ge and e is in the same sens
+	    //	cout << " geom edge = " <<  Gh.Number(eg) <<" @" << &eg << " ref = " << subdomains[i].ref
 	    //     << " ref edge =" << eg.ref << " sens " << sens ;
 	    if (((eg[0].r-eg[1].r),(e[0].r-e[1].r))<0)
 		sens = -sens ;
@@ -2858,40 +2858,40 @@ void Triangles::FindSubDomain(int OutSide=0)
 	    //	cout << " sens " << sens << " in geom " << eg[0].r << eg[1].r << " in mesh  " << e[0].r << e[1].r << endl;
 	    //	cout << "  v0 , v1 = " << Number(v0) << " "  << Number(v1) << endl;
 	    assert(t && sens);
-	    
+
 	    TriangleAdjacent  ta(t,EdgesVertexTriangle[v0->vint][0]);// previous edges
-		
-	    while (1) 
+
+	    while (1)
 	    {
 		assert( v0 == ta.EdgeVertex(1) );
 		//	 cout << " recherche " << Number( ta.EdgeVertex(0)) << endl;
 		if (ta.EdgeVertex(0) == v1) { // ok we find the edge
-		    if (sens>0)  
+		    if (sens>0)
 			subdomains[i].head=t=Adj(ta);
-		    else 
+		    else
 			subdomains[i].head=t=ta;
 		    //cout << "      triangle  =" << Number(t) << " = " << (*t)[0].r <<  (*t)[1].r <<  (*t)[2].r << endl;
-		    if(t<triangles || t >= triangles+nbt || t->det < 0 
-		        || t->link == 0) // Ajoute aout 200 
+		    if(t<triangles || t >= triangles+nbt || t->det < 0
+		        || t->link == 0) // Ajoute aout 200
 		     {
 			cerr << " Error in the def of sub domain "<<i
 			     << " form border " << NbSubDomains - i  << "/" << NbSubDomains
-			     << ": Bad sens  " << Gh.Number(eg) <<" "<< sens <<  endl;  
+			     << ": Bad sens  " << Gh.Number(eg) <<" "<< sens <<  endl;
 			err++;
 			break;}
 		    Int4 it = Number(t);
 		    if (mark[it] >=0) {
 			if(verbosity>10)
-			    cerr << "     Warning: the sub domain " << i << " ref = " << subdomains[i].ref 
+			    cerr << "     Warning: the sub domain " << i << " ref = " << subdomains[i].ref
 				<< " is previouly defined with "  <<mark[it] << " ref = " << subdomains[mark[it]].ref
 				<< " skip this def " << endl;
 			break;}
-		    if(i != inew) 
+		    if(i != inew)
 			Exchange(subdomains[i],subdomains[inew]);
 		    inew++;
 		    Triangle *tt=t;
 		    Int4 kkk=0;
-		    do 
+		    do
 		    {
 			kkk++;
 			assert(mark[Number(tt)]<0);
@@ -2904,38 +2904,38 @@ void Triangles::FindSubDomain(int OutSide=0)
 		    if(verbosity>7)
 			cout << "     Nb de triangles dans le sous domaine " << i << " de ref " << subdomains[i].ref << " = " << kkk << endl;
 		    break;}
-		ta = Previous(Adj(ta));         
+		ta = Previous(Adj(ta));
 		if(t == (Triangle *) ta) {
 		    err++;
-		    cerr << " Error in the def of sub domain " << i 
+		    cerr << " Error in the def of sub domain " << i
 			<< " edge=" << Gh.Number(eg) << " " << sens << endl;
 		    break;}
 		//         cout << " NB of remove subdomain " << NbSubDomTot-NbSubDomains<< endl;
-		
+
 	    }
-		
+
 	}
 	if (err) MeshError(777,this);
-	
+
 	if (inew < NbSubDomains) {
-	    if (verbosity>5) 
+	    if (verbosity>5)
 		cout << "     Warning: We remove " << NbSubDomains-inew << " SubDomains " << endl;
 	    NbSubDomains=inew;}
-	
-	
+
+
 	for (it=0;it<nbt;it++)
-	    if ( mark[it] ==-1 ) 
+	    if ( mark[it] ==-1 )
 		NbOutT++,triangles[it].link =0;
 	delete [] GeometricalEdgetoEdge;
 	delete [] mark;
-	
+
     }
-    
+
 #ifdef DRAWING1
     inquire();
 #endif
     NbOutT=0;
-    for (it=0;it<nbt;it++) 
+    for (it=0;it<nbt;it++)
 	if(!triangles[it].link)  NbOutT++;
     if (verbosity> 4)
 	cout << "    " ;
@@ -2944,32 +2944,32 @@ void Triangles::FindSubDomain(int OutSide=0)
 #ifdef DRAWING1
     inquire();
 #endif
-    
+
     //#undef DRAWING1
-    
-    
+
+
 }
 void Triangles::ReNumberingVertex(Int4 * renu)
 {
   // warning be carfull because pointeur
-  // from on mesh to over mesh 
+  // from on mesh to over mesh
   //  --  so do ReNumbering a the beginning
   Vertex * ve = vertices+nbv;
   Int4 it,ie,i;
-  
-  for ( it=0;it<nbt;it++) 
+
+  for ( it=0;it<nbt;it++)
     triangles[it].ReNumbering(vertices,ve,renu);
-  
-  for ( ie=0;ie<nbe;ie++) 
+
+  for ( ie=0;ie<nbe;ie++)
     edges[ie].ReNumbering(vertices,ve,renu);
-  
+
   for (i=0;i< NbVerticesOnGeomVertex;i++)
     {
       Vertex *v = VerticesOnGeomVertex[i].mv;
       if (v>=vertices && v < ve)
 	VerticesOnGeomVertex[i].mv=vertices+renu[Number(v)];
     }
-  
+
   for (i=0;i< NbVerticesOnGeomEdge;i++)
     {
       Vertex *v =VerticesOnGeomEdge[i].mv;
@@ -2983,7 +2983,7 @@ void Triangles::ReNumberingVertex(Int4 * renu)
       if (v>=vertices && v < ve)
 	VertexOnBThVertex[i].v=vertices+renu[Number(v)];
     }
-  
+
   for (i=0;i< NbVertexOnBThEdge;i++)
     {
       Vertex *v=VertexOnBThEdge[i].v;
@@ -2991,44 +2991,44 @@ void Triangles::ReNumberingVertex(Int4 * renu)
 	VertexOnBThEdge[i].v=vertices+renu[Number(v)];
     }
 
-  // move the Vertices without a copy of the array 
-  // be carefull not trivial code 
+  // move the Vertices without a copy of the array
+  // be carefull not trivial code
   Int4 j;
   for ( it=0;it<nbv;it++) // for all sub cycles of the permutation renu
     if (renu[it] >= 0) // a new sub cycle
-      { 
+      {
         i=it;
         Vertex ti=vertices[i],tj;
-        while ( (j=renu[i]) >= 0) 
-         { // i is old, and j is new 
-           renu[i] = -1-renu[i]; // mark 
+        while ( (j=renu[i]) >= 0)
+         { // i is old, and j is new
+           renu[i] = -1-renu[i]; // mark
            tj = vertices[j]; // save new
            vertices[j]= ti; // new <- old
-           i=j;     // next 
+           i=j;     // next
            ti = tj;
-         }  
+         }
      }
-  if (quadtree) 
+  if (quadtree)
   {  delete quadtree;
    quadtree = new QuadTree(this);
   }
  for ( it=0;it<nbv;it++)
    renu[i]= -renu[i]-1;
-  
+
 }
 void Triangles::ReNumberingTheTriangleBySubDomain(bool justcompress)
  {
   Int4 *renu= new Int4[nbt];
   register Triangle *t0,*t,*te=triangles+nbt;
   register Int4 k=0,it,i,j;
-      
-  for ( it=0;it<nbt;it++) 
-    renu[it]=-1; // outside triangle 
+
+  for ( it=0;it<nbt;it++)
+    renu[it]=-1; // outside triangle
   for ( i=0;i<NbSubDomains;i++)
-   { 
+   {
      t=t0=subdomains[i].head;
      assert(t0); // no empty sub domain
-     do { 
+     do {
        Int4 kt = Number(t);
        assert(kt>=0 && kt < nbt );
        assert(renu[kt]==-1);
@@ -3038,59 +3038,59 @@ void Triangles::ReNumberingTheTriangleBySubDomain(bool justcompress)
    }
   if (verbosity>9)
     cout << " number of inside triangles " << k << " nbt = " << nbt << endl;
-  // take is same numbering if possible    
+  // take is same numbering if possible
   if(justcompress)
-      for ( k=0,it=0;it<nbt;it++) 
-     if(renu[it] >=0 ) 
+      for ( k=0,it=0;it<nbt;it++)
+     if(renu[it] >=0 )
        renu[it]=k++;
-   
+
    // put the outside triangles at the end
-   for ( it=0;it<nbt;it++) 
-    if (renu[it]==-1) 
+   for ( it=0;it<nbt;it++)
+    if (renu[it]==-1)
       renu[it]=k++;
-      
+
     assert(k == nbt);
-   // do the change on all the pointeur 
+   // do the change on all the pointeur
    for ( it=0;it<nbt;it++)
      triangles[it].ReNumbering(triangles,te,renu);
-     
+
    for ( i=0;i<NbSubDomains;i++)
      subdomains[i].head=triangles+renu[Number(subdomains[i].head)];
-   
-  // move the Triangles  without a copy of the array 
-  // be carefull not trivial code 
+
+  // move the Triangles  without a copy of the array
+  // be carefull not trivial code
   for ( it=0;it<nbt;it++) // for all sub cycles of the permutation renu
     if (renu[it] >= 0) // a new sub cycle
-      { 
+      {
         i=it;
         Triangle ti=triangles[i],tj;
-        while ( (j=renu[i]) >= 0) 
-         { // i is old, and j is new 
-           renu[i] = -1; // mark 
+        while ( (j=renu[i]) >= 0)
+         { // i is old, and j is new
+           renu[i] = -1; // mark
            tj = triangles[j]; // save new
            triangles[j]= ti; // new <- old
-           i=j;     // next 
+           i=j;     // next
            ti = tj;
-         }  
+         }
      }
    delete [] renu;
    nt = nbt - NbOutT;
 
 #ifdef DEBUG
-// verif 
+// verif
      for ( it=0;it<nbt;it++)
       triangles[it].check();
-#endif   
+#endif
  }
 Int4  Triangles::ConsRefTriangle(Int4 *reft) const
 {
   assert(reft);
   register Triangle *t0,*t;
-  register Int4 k=0, num;   
-  for (Int4 it=0;it<nbt;it++) 
-    reft[it]=-1; // outside triangle 
+  register Int4 k=0, num;
+  for (Int4 it=0;it<nbt;it++)
+    reft[it]=-1; // outside triangle
   for (Int4 i=0;i<NbSubDomains;i++)
-   { 
+   {
      t=t0=subdomains[i].head;
      assert(t0); // no empty sub domain
      // register Int4 color=i+1;// because the color 0 is outside triangle
@@ -3103,11 +3103,11 @@ Int4  Triangles::ConsRefTriangle(Int4 *reft) const
      while (t0 != (t=t->link));
    }
   //  NbOutT = nbt - k;
-  if (verbosity>5) 
-    cout << " Nb of Sub Domain =" << NbSubDomains  << " Nb of In Triangles " << k 
+  if (verbosity>5)
+    cout << " Nb of Sub Domain =" << NbSubDomains  << " Nb of In Triangles " << k
 	 << " Nbt = " << nbt << " Out Triangles = " << nbt - k <<  endl;
-   
-  return k;   
+
+  return k;
 
 }
 
@@ -3118,8 +3118,8 @@ void Triangles::ConsLinkTriangle()
     subdomains[i].head=0;
   register Triangle * t=triangles,*tend = triangles+nbt,*hst;
   for (;t<tend;t++)
-   {  
-       if (t->link) 
+   {
+       if (t->link)
         {
           register Int4 color = t->color-1;
           assert(color<NbSubDomains && color>=0);
@@ -3128,18 +3128,18 @@ void Triangles::ConsLinkTriangle()
             hst->link=t; }
           else {
             subdomains[color].head = t;
-            t->link=t;}// circular link         
+            t->link=t;}// circular link
         }
      }
  {
    for (Int4 i=0;i<NbSubDomains;i++)
      assert(subdomains[i].head);
  }
-   
+
 }
 */
-/* void Triangles::RandomInit() 
-{ 
+/* void Triangles::RandomInit()
+{
  //  Meshbegin = vertices;
  //  Meshend  = vertices + nbvx;
    nbv = nbvx;
@@ -3150,8 +3150,8 @@ void Triangles::ConsLinkTriangle()
         vertices[i].ref = 0;
      }
 }
-void Triangles::CubeInit(int n,int m) 
-{ 
+void Triangles::CubeInit(int n,int m)
+{
   //  nbvx = n*m;
  //  Meshbegin = vertices;
   // Meshend  = vertices + nbvx;
@@ -3167,8 +3167,8 @@ void Triangles::CubeInit(int n,int m)
      }
 }
 */
-Vertex * Triangles::NearestVertex(Icoor1 i,Icoor1 j) 
-   { return  quadtree->NearestVertex(i,j); } 
+Vertex * Triangles::NearestVertex(Icoor1 i,Icoor1 j)
+   { return  quadtree->NearestVertex(i,j); }
 
 
 void Triangles::PreInit(Int4 inbvx,char *fname)
@@ -3191,17 +3191,17 @@ void Triangles::PreInit(Int4 inbvx,char *fname)
   NbVertexOnBThEdge=0;
   VertexOnBThVertex=0;
   VertexOnBThEdge=0;
-  
+
   NbCrackedVertices=0;
   NbCrackedEdges =0;
-  CrackedEdges  =0;  
-  nbe = 0; 
+  CrackedEdges  =0;
+  nbe = 0;
   name = fname ;
 
   if (inbvx) {
     vertices=new Vertex[nbvx];
     assert(vertices);
-    ordre=new Vertex* [nbvx];
+    ordre=new Vertex* [this->nbvx];
     assert(ordre);
     triangles=new Triangle[nbtx];
     assert(triangles);}
@@ -3214,10 +3214,10 @@ void Triangles::PreInit(Int4 inbvx,char *fname)
   if ( name || inbvx)
     {
       time_t timer =time(0);
-      char buf[70];     
+      char buf[70];
       strftime(buf ,70,", Date: %y/%m/%d %H:%M %Ss",localtime(&timer));
-      counter++; 
-      char countbuf[30];   
+      counter++;
+      char countbuf[30];
       sprintf(countbuf,"%d",counter);
       int lg =0 ;
       if (&BTh != this && BTh.name)
@@ -3232,8 +3232,8 @@ void Triangles::PreInit(Int4 inbvx,char *fname)
       strcat(strcat(identity,";"),countbuf);
       strcat(identity,buf);
       // cout << "New MAILLAGE "<< identity << endl;
-    } 
-  
+    }
+
   quadtree=0;
 //  edgescomponante=0;
   edges=0;
@@ -3247,36 +3247,36 @@ void Triangles::PreInit(Int4 inbvx,char *fname)
   NbSubDomains=0;
 //  Meshbegin = vertices;
 //  Meshend  = vertices + nbvx;
-  if (verbosity>98) 
-    cout << "Triangles::PreInit() " << nbvx << " " << nbtx 
-	 << " " << vertices 
+  if (verbosity>98)
+    cout << "Triangles::PreInit() " << nbvx << " " << nbtx
+	 << " " << vertices
 	 << " " << ordre << " " <<  triangles <<endl;
 
 }
 
-void Triangles::GeomToTriangles1(Int4 inbvx,int KeepBackVertices) 
-{ 
+void Triangles::GeomToTriangles1(Int4 inbvx,int KeepBackVertices)
+{
 //#define DRAWING1
   Gh.NbRef++;// add a ref to Gh
 
-  
-/************************************************************************* 
+
+/*************************************************************************
 // methode in 2 step
 // 1 - compute the number of new edge to allocate
 // 2 - construct the edge
- remark: 
+ remark:
   in this part we suppose to have a background mesh with the same
-  geometry 
-  
-  To construct the discretisation of the new mesh we have to 
-  rediscretize the boundary of background Mesh 
+  geometry
+
+  To construct the discretisation of the new mesh we have to
+  rediscretize the boundary of background Mesh
   because we have only the pointeur from the background mesh to the geometry.
   We need the abcisse of the background mesh vertices on geometry
-  so a vertex is 
+  so a vertex is
   0 on GeometricalVertex ;
   1 on GeometricalEdge + abcisse
-  2 internal 
-  
+  2 internal
+
   *************************************************************************/
   assert(&BTh.Gh == &Gh);
 
@@ -3287,36 +3287,36 @@ void Triangles::GeomToTriangles1(Int4 inbvx,int KeepBackVertices)
 #ifdef DRAWING
   if (withrgraphique)
    { BTh.InitDraw();
-  reffecran(); 
+  reffecran();
   CurrentTh = this;}
 #endif
-  int * bcurve = new int[Gh.NbOfCurves]; // 
-  
-  // we have 2 ways to make the loop 
-  // 1) on the geometry 
+  int * bcurve = new int[Gh.NbOfCurves]; //
+
+  // we have 2 ways to make the loop
+  // 1) on the geometry
   // 2) on the background mesh
   //  if you do the loop on geometry, we don't have the pointeur on background,
   //  and if you do the loop in background we have the pointeur on geometry
   // so do the walk on  background
   //  Int4 NbVerticesOnGeomVertex;
-  //  VertexOnGeom * VerticesOnGeomVertex;  
+  //  VertexOnGeom * VerticesOnGeomVertex;
   //  Int4 NbVerticesOnGeomEdge;
   //  VertexOnGeom * VerticesOnGeomEdge;
-  
-  
+
+
   NbVerticesOnGeomVertex=0;
   NbVerticesOnGeomEdge=0;
   //1 copy of the  Required vertex
-  int i; 
+  int i;
   for ( i=0;i<Gh.nbv;i++)
     if (Gh[i].Required()) NbVerticesOnGeomVertex++;
-  
+
   VerticesOnGeomVertex = new VertexOnGeom[NbVerticesOnGeomVertex];
   VertexOnBThVertex = new VertexOnVertex[NbVerticesOnGeomVertex];
   //
-  if( NbVerticesOnGeomVertex >= nbvx) 
+  if( NbVerticesOnGeomVertex >= nbvx)
     {
-      cerr << " Too much vertices on geometry " << NbVerticesOnGeomVertex << " >= " << nbvx << endl; 
+      cerr << " Too much vertices on geometry " << NbVerticesOnGeomVertex << " >= " << nbvx << endl;
       MeshError(1,this);
     }
   assert(vertices);
@@ -3329,9 +3329,9 @@ void Triangles::GeomToTriangles1(Int4 inbvx,int KeepBackVertices)
 	// cout << "--------- "  <<Number(Gh[i].to) << " " << Gh[i].to << " " << i << endl;
 	nbv++;}
     else Gh[i].to=0;
-  // 
+  //
   for (i=0;i<BTh.NbVerticesOnGeomVertex;i++)
-    { 
+    {
       VertexOnGeom & vog = BTh.VerticesOnGeomVertex[i];
       if (vog.IsRequiredVertex()) {
 	 GeometricalVertex * gv = vog;
@@ -3345,88 +3345,88 @@ void Triangles::GeomToTriangles1(Int4 inbvx,int KeepBackVertices)
 // new stuff FH with curve
 //  find the begin of the curve in BTh
 {
-  Gh.UnMarkEdges();	
+  Gh.UnMarkEdges();
   int bfind=0;
 /*
    cout << " nb curves = " << Gh.NbOfCurves << endl;
    for(int i=0;i<Gh.NbOfCurves ;i++)
      {
-        cout << " Curve " << i << " begin e=" << Gh.Number(Gh.curves[i].be) << " k=" << Gh.curves[i].kb 
+        cout << " Curve " << i << " begin e=" << Gh.Number(Gh.curves[i].be) << " k=" << Gh.curves[i].kb
              << "  end e= " << Gh.Number(Gh.curves[i].ee) << " k=" << Gh.curves[i].ke << endl;
      }*/
   for (int i=0;i<Gh.NbOfCurves;i++)
    {
-    bcurve[i]=-1; 
+    bcurve[i]=-1;
    }
-  
-  for (int iedge=0;iedge<BTh.nbe;iedge++) 
-    {      
+
+  for (int iedge=0;iedge<BTh.nbe;iedge++)
+    {
       Edge & ei = BTh.edges[iedge];
       for(int je=0;je<2;je++) // for the 2 extremites
 	 if (!ei.on->Mark() && ei[je].on->IsRequiredVertex() )
 	    {
-	      // a begin of curve 
+	      // a begin of curve
 	      int nc = ei.on->CurveNumber;
-	      
+
 	      //cout << "curve " <<  nc << " v " << Gh.Number((GeometricalVertex *) *ei[je].on) << " "
 	      //     << " e "  << " " << Gh.Number(ei.on) << " vc " << Gh.Number((*Gh.curves[nc].be)[Gh.curves[nc].kb]) << endl;
 	      if(
-	         ei.on==Gh.curves[nc].be    && 
-	         (GeometricalVertex *) *ei[je].on == &(*Gh.curves[nc].be)[Gh.curves[nc].kb] //  same extremity 
-	         )     
-	        { 
+	         ei.on==Gh.curves[nc].be    &&
+	         (GeometricalVertex *) *ei[je].on == &(*Gh.curves[nc].be)[Gh.curves[nc].kb] //  same extremity
+	         )
+	        {
 	        // cout << " find " << endl;
 	         bcurve[nc]=iedge*2+je;
-	         bfind++;	
-	        }      
+	         bfind++;
+	        }
             }
-    } 
+    }
    assert( bfind==Gh.NbOfCurves);
-}          
-// method in 2 + 1 step 
+}
+// method in 2 + 1 step
 //  0.0) compute the length and the number of vertex to do allocation
 //  1.0)  recompute the length
-//  1.1)   compute the  vertex 
+//  1.1)   compute the  vertex
   Int4 nbex=0,NbVerticesOnGeomEdgex=0;
   for (int step=0; step <2;step++)
     {
       Int4 NbOfNewPoints=0;
       Int4 NbOfNewEdge=0;
       Int4 iedge;
-      Gh.UnMarkEdges();	
-/*   add Curve loop  FH    
-      // find a starting back groud edges to walk 
-      for (iedge=0;iedge<BTh.nbe;iedge++) {      
+      Gh.UnMarkEdges();
+/*   add Curve loop  FH
+      // find a starting back groud edges to walk
+      for (iedge=0;iedge<BTh.nbe;iedge++) {
 	    Edge & ei = BTh.edges[iedge];
 	    for(int jedge=0;jedge<2;jedge++) // for the 2 extremites
 	     if (!ei.on->Mark() && ei[jedge].on->IsRequiredVertex() )
 	    {
-*/  
-// new code FH 2004 
+*/
+// new code FH 2004
        Real8 L=0;
        for (int icurve=0;icurve<Gh.NbOfCurves;icurve++)
-            { 
+            {
               iedge=bcurve[icurve]/2;
               int jedge=bcurve[icurve]%2;
               if( ! Gh.curves[icurve].master) continue; // we skip all equi curve
 	      Edge & ei = BTh.edges[iedge];
 	      // warning: ei.on->Mark() can be change in
-	      // loop for(jedge=0;jedge<2;jedge++) 
-	      // new curve  
-	      // good the find a starting edge 
-	      Real8 Lstep=0,Lcurve=0;// step between two points   (phase==1) 
-	      Int4 NbCreatePointOnCurve=0;// Nb of new points on curve     (phase==1) 
+	      // loop for(jedge=0;jedge<2;jedge++)
+	      // new curve
+	      // good the find a starting edge
+	      Real8 Lstep=0,Lcurve=0;// step between two points   (phase==1)
+	      Int4 NbCreatePointOnCurve=0;// Nb of new points on curve     (phase==1)
+
 
-	      
 	      //    cout.precision(16);
-	      for(int phase=0;phase<=step;phase++) 
+	      for(int phase=0;phase<=step;phase++)
 		{
 
 		  for(Curve * curve= Gh.curves+icurve;curve;curve= curve->next)
 		     {
 
 		    int icurveequi= Gh.Number(curve);
-  
+
                    if( phase == 0 &&  icurveequi != icurve)  continue;
 
                   int k0=jedge,k1;
@@ -3435,11 +3435,11 @@ void Triangles::GeomToTriangles1(Int4 inbvx,int KeepBackVertices)
                    int iedgeequi=bcurve[icurveequi]/2;
                    int jedgeequi=bcurve[icurveequi]%2;
 
-                  int k0equi=jedgeequi,k1equi;		  
+                  int k0equi=jedgeequi,k1equi;
                   Edge * peequi= BTh.edges+iedgeequi;
 		  GeometricalEdge *ongequi = peequi->on;
-		  
-                  Real8 sNew=Lstep;// abcisse of the new points (phase==1) 
+
+                  Real8 sNew=Lstep;// abcisse of the new points (phase==1)
                   L=0;// length of the curve
                   Int4 i=0;// index of new points on the curve
                   register GeometricalVertex * GA0 = *(*peequi)[k0equi].on;
@@ -3448,38 +3448,38 @@ void Triangles::GeomToTriangles1(Int4 inbvx,int KeepBackVertices)
                   Vertex *A1;
 		  VertexOnGeom *GA1;
                   Edge * PreviousNewEdge = 0;
-		  //  cout << "  --------------New Curve phase " << phase 
+		  //  cout << "  --------------New Curve phase " << phase
 		  //       << "---------- A0=" << *A0 << ei[k0]  <<endl;
                   assert (A0-vertices>=0 && A0-vertices <nbv);
-                  if(ongequi->Required() ) 
+                  if(ongequi->Required() )
                         {
                          GeometricalVertex *GA1 = *(*peequi)[1-k0equi].on;
                          A1 = GA1->to;  //
-                        }       
-                  else 
-                  for(;;) 
+                        }
+                  else
+                  for(;;)
 		    {
 		      //   assert(pe && BTh.Number(pe)>=0 && BTh.Number(pe)<=BTh.nbe);
-		      Edge &ee=*pe; 
-		      Edge &eeequi=*peequi; 
-		      k1 = 1-k0; // next vertex of the edge 
+		      Edge &ee=*pe;
+		      Edge &eeequi=*peequi;
+		      k1 = 1-k0; // next vertex of the edge
 		      k1equi= 1 - k0equi;
-		      
+
 		      assert(pe  && ee.on);
 		      ee.on->SetMark();
 		      Vertex & v0=ee[0], & v1=ee[1];
 		      R2 AB= (R2) v1 - (R2) v0;
 		      Real8 L0=L,LAB;
 		      LAB =  LengthInterpole(v0.m,v1.m,AB);
-		      L+= LAB;    
+		      L+= LAB;
 		      if (phase) {// computation of the new points
-			while ((i!=NbCreatePointOnCurve) && sNew <= L) { 
-			  //    cout  << " L0= " << L0 << " L " << L << " sN=" 
+			while ((i!=NbCreatePointOnCurve) && sNew <= L) {
+			  //    cout  << " L0= " << L0 << " L " << L << " sN="
 			  //         << sNew << " LAB=" << LAB << " NBPC =" <<NbCreatePointOnCurve<< " i " << i  << endl;
 			  assert (sNew >= L0);
 			  assert(LAB);
-			  
-			  
+
+
 			  assert(vertices && nbv<nbvx);
 			  assert(edges && nbe < nbex);
 			  assert(VerticesOnGeomEdge && NbVerticesOnGeomEdge < NbVerticesOnGeomEdgex);
@@ -3498,8 +3498,8 @@ void Triangles::GeomToTriangles1(Int4 inbvx,int KeepBackVertices)
 			  //((k1==1) != (k1==k1equi))
 			  se = k1 ? se : 1. - se;
 			  se = k1==k1equi ? se : 1. - se;
-			  VertexOnBThEdge[NbVerticesOnGeomEdge++] = VertexOnEdge(A1,&eeequi,se); // save 
-			  ongequi = Gh.ProjectOnCurve(eeequi,se,*A1,*GA1); 
+			  VertexOnBThEdge[NbVerticesOnGeomEdge++] = VertexOnEdge(A1,&eeequi,se); // save
+			  ongequi = Gh.ProjectOnCurve(eeequi,se,*A1,*GA1);
 			  A1->ReferenceNumber = eeequi.ref;
 			  A1->DirOfSearch =NoDirOfSearch;
 			  //cout << icurveequi << " " << i << " " <<  *A1 << endl;
@@ -3507,10 +3507,10 @@ void Triangles::GeomToTriangles1(Int4 inbvx,int KeepBackVertices)
 			  e->v[0]=  A0;
 			  e->v[1]=  A1;
 			  if(verbosity>99)
-				cout << i << "+ New P "<< nbv-1 << " "  <<sNew<< " L0=" << L0 
-				<< " AB=" << LAB << " s=" << (sNew-L0)/LAB << " se= "  
+				cout << i << "+ New P "<< nbv-1 << " "  <<sNew<< " L0=" << L0
+				<< " AB=" << LAB << " s=" << (sNew-L0)/LAB << " se= "
 				<< se <<" B edge " << BTh.Number(ee) << " signe = " << k1 <<" " << A1->r <<endl;
-			    
+
 #ifdef DEBUG
 			  // code \label(xxx)
 			    R2  A1A0 = A1->r - A0->r;
@@ -3518,15 +3518,15 @@ void Triangles::GeomToTriangles1(Int4 inbvx,int KeepBackVertices)
 			    if (dp > 1.4) {
 			      cerr << " PB new Points "<< nbv-1 ;
 			      cerr << " AB=" << LAB << " s=" << (sNew-L0)/LAB << " se= "  ;
-			      cerr << se <<" B edge " << BTh.Number(ee) << " signe = " << k1 <<endl;	      
-			      cerr << " PB calcul new on cuver points trop loin l=" << dp 
+			      cerr << se <<" B edge " << BTh.Number(ee) << " signe = " << k1 <<endl;
+			      cerr << " PB calcul new on cuver points trop loin l=" << dp
 				   << " v=" << nbv-1 << " " << nbv-2 << " Lcurve = " << Lcurve << AB <<v0.m<< v1.m <<endl;
 			    }
 
 #endif
 			  e->ref = eeequi.ref;
 			  e->adj[0]=PreviousNewEdge;
-			  
+
 			  if (PreviousNewEdge)
 			    PreviousNewEdge->adj[1] =  e;
 			  PreviousNewEdge = e;
@@ -3538,12 +3538,12 @@ void Triangles::GeomToTriangles1(Int4 inbvx,int KeepBackVertices)
 #endif
 			  A0=A1;
 			  sNew += Lstep;
-			  //   cout << " sNew = " << sNew << " L = " << L 
+			  //   cout << " sNew = " << sNew << " L = " << L
 			  //        << "  ------" <<NbCreatePointOnCurve << " " << i <<  endl;
 			  if (++i== NbCreatePointOnCurve) break;
 			}
-			
-		      }               
+
+		      }
 		      assert(ee.on->CurveNumber==ei.on->CurveNumber);
 		      if(verbosity>98) cout <<  BTh.Number(ee) << " " << " on=" << *ee[k1].on << " "<< ee[k1].on->IsRequiredVertex() <<  endl;
 		      if ( ee[k1].on->IsRequiredVertex()) {
@@ -3553,22 +3553,22 @@ void Triangles::GeomToTriangles1(Int4 inbvx,int KeepBackVertices)
 			assert (A1-vertices>=0 && A1-vertices <nbv);
 			break;}
 		      if (!ee.adj[k1])
-			{cerr << "Error adj edge " << BTh.Number(ee) << ", nbe = "  << nbe 
-			      << " Gh.vertices " << Gh.vertices 
+			{cerr << "Error adj edge " << BTh.Number(ee) << ", nbe = "  << nbe
+			      << " Gh.vertices " << Gh.vertices
 			      << " k1 = " << k1 << " on=" << *ee[k1].on << endl;
 			cerr << ee[k1].on->gv-Gh.vertices << endl;
 			}
 		      pe = ee.adj[k1]; // next edge
-		      k0 = pe->Intersection(ee); 
+		      k0 = pe->Intersection(ee);
 		      peequi= eeequi.adj[k1equi];  // next edge
-		      k0equi=peequi->Intersection(eeequi);            
+		      k0equi=peequi->Intersection(eeequi);
 		    }// for(;;) end of the curve
-		  
+
 
 		  if (phase) // construction of the last edge
                     {
 		      Edge *e = edges + nbe++;
-		      if (verbosity>10) 
+		      if (verbosity>10)
 			cout << " Fin curve A1" << *A1 << " " << icurve << " <=> " << icurveequi <<"-----" <<
 			  NbCreatePointOnCurve << " == " <<i<<endl;
                       e->on  = ongequi;
@@ -3580,50 +3580,50 @@ void Triangles::GeomToTriangles1(Int4 inbvx,int KeepBackVertices)
                       if (PreviousNewEdge)
 			PreviousNewEdge->adj[1] =  e;
                       PreviousNewEdge = e;
-		      //		      cout << "Last new edge " << nbe << " " << " on " << Gh.Number(pe->on) 
+		      //		      cout << "Last new edge " << nbe << " " << " on " << Gh.Number(pe->on)
 		      //   << " of curve =" <<pe->on->CurveNumber <<endl;
-	    
 
-#ifdef DRAWING1 
+
+#ifdef DRAWING1
                       e->Draw();
                       A1->Draw();
                       A0->Draw();
 		      //                      inquire();
 #endif
                       assert(i==NbCreatePointOnCurve);
-  
+
                     }
-		   } //  end loop on equi curve 
-                     
-		  if (!phase)  { // 
+		   } //  end loop on equi curve
+
+		  if (!phase)  { //
 		    Int4 NbSegOnCurve = Max((Int4)(L+0.5),(Int4) 1);// nb of seg
-		    Lstep = L/NbSegOnCurve; 
+		    Lstep = L/NbSegOnCurve;
 		    Lcurve = L;
 		    NbCreatePointOnCurve = NbSegOnCurve-1;
-		    
+
 		    for(Curve * curve= Gh.curves+icurve;curve;curve= curve->next)
 		     {
 		       NbOfNewEdge += NbSegOnCurve;
 		       NbOfNewPoints += NbCreatePointOnCurve;
 		     }
 		    if(verbosity>5)
-		      cout << icurve << " NbSegOnCurve = " <<  NbSegOnCurve << " Lstep=" 
+		      cout << icurve << " NbSegOnCurve = " <<  NbSegOnCurve << " Lstep="
 			   << Lstep <<" " << NbOfNewPoints<< " NBPC= " << NbCreatePointOnCurve <<endl;
-		    // do'nt 
+		    // do'nt
 		    //  if(NbCreatePointOnCurve<1) break;
 		  }
 		}//for(phase;;)
-/*  modif FH add Curve class  		  
-	    }}//for (iedge=0;iedge<BTh.nbe;iedge++) 
+/*  modif FH add Curve class
+	    }}//for (iedge=0;iedge<BTh.nbe;iedge++)
 */
-// new code Curve class  	
-     } //  end of curve loop 
-// end new code	    
+// new code Curve class
+     } //  end of curve loop
+// end new code
        // do the allocation
-    if(step==0) 
+    if(step==0)
       {
-	//if(!NbOfNewPoints) break;// nothing ????? bug 
-	if(nbv+NbOfNewPoints > nbvx) 
+	//if(!NbOfNewPoints) break;// nothing ????? bug
+	if(nbv+NbOfNewPoints > nbvx)
 	  {
 	    cerr << " Too much vertices on geometry " << nbv+NbOfNewPoints  << " >= " << nbvx << endl;
 	    MeshError(3,this);
@@ -3631,7 +3631,7 @@ void Triangles::GeomToTriangles1(Int4 inbvx,int KeepBackVertices)
 	//cout << " NbOfNewEdge" << NbOfNewEdge << " NbOfNewPoints " << NbOfNewPoints << endl;
 	edges = new Edge[NbOfNewEdge];
 	nbex = NbOfNewEdge;
-	if(NbOfNewPoints) { // 
+	if(NbOfNewPoints) { //
 	   VerticesOnGeomEdge = new VertexOnGeom[NbOfNewPoints];
 	   NbVertexOnBThEdge =NbOfNewPoints;
 	   VertexOnBThEdge = new  VertexOnEdge[NbOfNewPoints];
@@ -3643,19 +3643,19 @@ void Triangles::GeomToTriangles1(Int4 inbvx,int KeepBackVertices)
   assert(nbe);
 
  delete [] bcurve;
- 
-  
+
+
 #ifdef DRAWING1
   reffecran();
   InitDraw();
   Draw();
   inquire();
 #endif
-  
+
   Insert();
   ForceBoundary();
   FindSubDomain();
-  
+
 #ifdef DRAWING1
   reffecran();
   Draw();
@@ -3667,10 +3667,10 @@ void Triangles::GeomToTriangles1(Int4 inbvx,int KeepBackVertices)
   //    BTh[iv].i = toI2(BTh[iv].r);
   NewPoints(BTh,KeepBackVertices) ;
   CurrentTh = 0;
-//#undef  DRAWING1 
+//#undef  DRAWING1
 }
 
-void Triangles::GeomToTriangles0(Int4 inbvx) 
+void Triangles::GeomToTriangles0(Int4 inbvx)
 {
   Gh.NbRef++;// add a ref to GH
 
@@ -3683,7 +3683,7 @@ void Triangles::GeomToTriangles0(Int4 inbvx)
   Gh.InitDraw() ;
   CurrentTh = this; }
 #endif
-  
+
   R2 AB;
   GeometricalVertex *a,*b;
   Vertex *va,*vb;
@@ -3696,9 +3696,9 @@ void Triangles::GeomToTriangles0(Int4 inbvx)
   NbVerticesOnGeomEdge=0;
   for (i=0;i<Gh.nbv;i++)
     if (Gh[i].Required() && Gh[i].IsThe() ) NbVerticesOnGeomVertex++;
-  VerticesOnGeomVertex = new VertexOnGeom[NbVerticesOnGeomVertex];  
+  VerticesOnGeomVertex = new VertexOnGeom[NbVerticesOnGeomVertex];
 //
-  if( NbVerticesOnGeomVertex >= nbvx) 
+  if( NbVerticesOnGeomVertex >= nbvx)
     {
       cerr << " Too much vertices on geometry " << NbVerticesOnGeomVertex << " >= " << nbvx << endl;
       MeshError(1,this);
@@ -3713,35 +3713,35 @@ void Triangles::GeomToTriangles0(Int4 inbvx)
       nbv++;
     }
 //  assert( Gh.nbv < nbvx);
-  
-  // Method in 2 step:  0 and 1 
-  // 1) compute de nb of edge 
-  // 2) construct the edge    
+
+  // Method in 2 step:  0 and 1
+  // 1) compute de nb of edge
+  // 2) construct the edge
   // generation of the curves
   assert(! edges);
 #ifdef DRAWING1
   reffecran();
 #endif
-// 2 step 
+// 2 step
 // --step=0 to compute the number of edges + alloc at end
 // --step=1 to construct the edges
-  for (int step=0;step<2;step++) 
-    {//  for (int step=0;step<2;step++) 
+  for (int step=0;step<2;step++)
+    {//  for (int step=0;step<2;step++)
       Int4 nbex = 0;
       nbe = 0;
       Int4 NbVerticesOnGeomEdge0=NbVerticesOnGeomEdge;
     //  cout <<  "  -------------- step =" << step << endl;
-      Gh.UnMarkEdges();	
+      Gh.UnMarkEdges();
       NbOfCurves = 0;
       for (i=0;i<Gh.nbe;i++) {
-	GeometricalEdge & ei = Gh.edges[i];   
+	GeometricalEdge & ei = Gh.edges[i];
 	if (!ei.Dup()) // a good curve (not dup )
-	for(int j=0;j<2;j++) 
-	  if (!ei.Mark() && ei[j].Required()) { 
-	    // warning ei.Mark() can be change in loop for(j=0;j<2;j++) 
+	for(int j=0;j<2;j++)
+	  if (!ei.Mark() && ei[j].Required()) {
+	    // warning ei.Mark() can be change in loop for(j=0;j<2;j++)
 	    //  cout << " New curve = " << NbOfCurves << endl;
 	    Int4 nbvend  =0;
-	  
+
            Edge * PreviousNewEdge=0;
 
           lstep = -1;//to do not create points
@@ -3751,7 +3751,7 @@ void Triangles::GeomToTriangles0(Int4 inbvx)
 		if(step==0)
 		  nbe++;
 		else
-		  { 
+		  {
 		    e = & ei;
 		    a=ei(0)->The();
 		    b=ei(1)->The();
@@ -3767,7 +3767,7 @@ void Triangles::GeomToTriangles0(Int4 inbvx)
 #endif
 		    nbe++;}
 	    }
-          else 
+          else
 	    { // on curve ------
 	      for ( int kstep=0;kstep<= step;kstep++)
 		{ // begin  for ( int kstep=0;kstep<= step;kstep++)
@@ -3777,7 +3777,7 @@ void Triangles::GeomToTriangles0(Int4 inbvx)
 		  PreviousNewEdge=0;
 		  NbNewPoints=0;
 		  NbEdgeCurve=0;
-		  assert(nbvend < nbvx); 
+		  assert(nbvend < nbvx);
 		  lcurve =0;
 		  s = lstep;
 		  int k=j;
@@ -3786,32 +3786,32 @@ void Triangles::GeomToTriangles0(Int4 inbvx)
 		  va = a->to;
 		  e->SetMark();
 		  //  cout << " New curve " ;
-		  
-		  // if SameGeo  We have go in the background geometry 
+
+		  // if SameGeo  We have go in the background geometry
 		  // to find the discretisation of the curve
-		  
-		  for(;;) 
-		    { 
+
+		  for(;;)
+		    {
 		      k = 1-k;
 		      b= (*e)(k)->The();
 		      AB = b->r - a->r;
 		      Metric MA = background ? BTh.MetricAt(a->r) :a->m ;
 		      Metric MB =  background ? BTh.MetricAt(b->r) :b->m ;
 		      Real8 ledge = (MA(AB) + MB(AB))/2;
-		      // 
+		      //
 		      const int MaxSubEdge = 10;
 		      int NbSubEdge = 1;
 		      Real8 lSubEdge[MaxSubEdge];
 		      R2 A,B;
-		      if (ledge < 1.5) 
+		      if (ledge < 1.5)
 			lSubEdge[0] = ledge;
 		      else {
 			NbSubEdge = Min( MaxSubEdge, (int) (ledge +0.5));
 			A= a->r;
 			Metric MAs =MA,MBs;
-			// cout << " lSubEdge old=" << ledge 
+			// cout << " lSubEdge old=" << ledge
 			//      << " new " << A << MA << endl;
-			ledge = 0; 
+			ledge = 0;
 			Real8 x =0, xstep= 1. /  NbSubEdge;
 			for (int kk=0; kk < NbSubEdge; kk++,A=B,MAs=MBs ) {
 			  x += xstep;
@@ -3819,20 +3819,20 @@ void Triangles::GeomToTriangles0(Int4 inbvx)
 			  MBs= background ? BTh.MetricAt(B) :Metric(1-x, MA, x ,MB);
 			  AB = A-B;
 			  lSubEdge[kk]= (ledge += (MAs(AB)+MBs(AB))/2);
-			  // cout << "     " << lSubEdge[kk] << " x " << x  
+			  // cout << "     " << lSubEdge[kk] << " x " << x
 			  //      << " " << A << B << MA << MB<< endl ;
 			}
 			//  cout << endl;
 		      }
-		      
+
 		      Real8 lcurveb = lcurve+ ledge ;
 		      while (lcurve<=s && s <= lcurveb && nbv < nbvend)
 			{
 			  // New points
-			  
+
 			  // Real8 aa=(lcurveb-s)/ledge;
 			  // Real8 bb=(s-lcurve)/ledge;
-			  
+
 			  Real8 ss = s-lcurve;
 			  // 1) find the SubEdge containing ss by dichotomie
 			  int kk0=-1,kk1=NbSubEdge-1,kkk;
@@ -3844,10 +3844,10 @@ void Triangles::GeomToTriangles0(Int4 inbvx)
 			      else
 				kk0=kkk,ll0=llk;}
 			  assert(kk1 != kk0);
-			  
+
 			  Real8 sbb = (ss-ll0  )/(ll1-ll0);
 			  Real8 bb = (kk1+sbb)/NbSubEdge, aa=1-bb;
-			  
+
 			  // new vertex on edge
 			  vb = &vertices[nbv++];
 			  vb->m = Metric(aa,a->m,bb,b->m);
@@ -3855,10 +3855,10 @@ void Triangles::GeomToTriangles0(Int4 inbvx)
 			  vb->DirOfSearch =NoDirOfSearch;
 			  Real8 abcisse = k ? bb : aa;
 			  vb->r =  e->F( abcisse );
-			  VerticesOnGeomEdge[NbVerticesOnGeomEdge++]= VertexOnGeom(*vb,*e,abcisse);        
-			  
+			  VerticesOnGeomEdge[NbVerticesOnGeomEdge++]= VertexOnGeom(*vb,*e,abcisse);
+
 			  // to take in account the sens of the edge
-			  
+
 			  s += lstep;
 			  edges[nbe].v[0]=va;
 			  edges[nbe].v[1]=vb;
@@ -3873,25 +3873,25 @@ void Triangles::GeomToTriangles0(Int4 inbvx)
 #endif
 			  PreviousNewEdge = edges + nbe;
 			  nbe++;
-#ifdef DEBUG1                 
+#ifdef DEBUG1
 			  cout << " new points " << nbv-1 << " " << vb->r ;
 			  cout << " new edge " << nbe-1 << " " ;
-			  cout << va << vb <<  " kk0 = " << kk0 
+			  cout << va << vb <<  " kk0 = " << kk0
 			       << " " << kk1 << " ss=" << ss ;
 			  cout << " " << sbb << endl;
-			  cout << "      " << aa << va->r << bb << vb->r 
+			  cout << "      " << aa << va->r << bb << vb->r
 			       <<" length=" << Norme(va->r-vb->r) << endl;
-			  cout << "      s " << s << " lstep= " << lstep 
-			       << " ledge= " << ledge 
+			  cout << "      s " << s << " lstep= " << lstep
+			       << " ledge= " << ledge
 			       << " lcurve= " << lcurve << endl;
 #endif
 			  va = vb;
 			}
 		      lcurve = lcurveb;
 		      e->SetMark();
-		      // cout << e-Gh.edges << ", " << k << " " 
-		      //      <<(*e)[k].r <<" " <<(*e)[1-k].r <<" " 
-		      //      << lcurve<< ";; " ;                          
+		      // cout << e-Gh.edges << ", " << k << " "
+		      //      <<(*e)[k].r <<" " <<(*e)[1-k].r <<" "
+		      //      << lcurve<< ";; " ;
 		      a=b;
 		      if (b->Required() ) break;
 		      int kprev=k;
@@ -3906,15 +3906,15 @@ void Triangles::GeomToTriangles0(Int4 inbvx)
 		  if(!kstep)
 		    { NbVerticesOnGeomEdge0 += NbNewPoints;
 		    NbOfCurves++;}
-		  
-		  nbvend=nbv+NbNewPoints; 
-		  
+
+		  nbvend=nbv+NbNewPoints;
+
 		  lstep = lcurve / NbEdgeCurve;
-		  //   cout <<"lstep " << lstep << " lcurve " 
+		  //   cout <<"lstep " << lstep << " lcurve "
 		  //    << lcurve << " NbEdgeCurve " << NbEdgeCurve << " " <<NbVerticesOnGeomEdge0<<" " <<NbVerticesOnGeomEdge<<" step =" <<step<<  endl;
-		} 
+		}
 	      // end of curve --
-	      if (edges) { // last edges of the curves 
+	      if (edges) { // last edges of the curves
 		edges[nbe].v[0]=va;
 		edges[nbe].v[1]=vb;
 		edges[nbe].ref = e->ref;
@@ -3923,8 +3923,8 @@ void Triangles::GeomToTriangles0(Int4 inbvx)
 		edges[nbe].adj[1] = 0;
 		if(PreviousNewEdge)
 		  PreviousNewEdge->adj[1] = & edges[nbe];
-		
-		
+
+
 #ifdef DRAWING1
 		edges[nbe].Draw();
 #endif
@@ -3932,7 +3932,7 @@ void Triangles::GeomToTriangles0(Int4 inbvx)
 	      else
 		nbe += NbEdgeCurve;
 	    } // end on  curve ---
-	} // if (edges[i][j].Corner())  
+	} // if (edges[i][j].Corner())
     } // for (i=0;i<nbe;i++)
     if(!step) {
      // cout << "edges " << edges << " VerticesOnGeomEdge " <<VerticesOnGeomEdge << endl;
@@ -3944,11 +3944,11 @@ void Triangles::GeomToTriangles0(Int4 inbvx)
       assert(edges);
       assert(VerticesOnGeomEdge || NbVerticesOnGeomEdge0 ==0);
         // do the vertex on a geometrical vertex
-       NbVerticesOnGeomEdge0 = NbVerticesOnGeomEdge;       
+       NbVerticesOnGeomEdge0 = NbVerticesOnGeomEdge;
      }
-     else 
+     else
        assert(NbVerticesOnGeomEdge == NbVerticesOnGeomEdge0);
-    //     cout << " Nb of Curves = " << NbOfCurves << "nbe = " << nbe 
+    //     cout << " Nb of Curves = " << NbOfCurves << "nbe = " << nbe
     //	  << "== " << nbex << "  nbv = " << nbv <<  endl;
     assert(nbex=nbe);
    } // for (step=0;step<2;step++)
@@ -3959,7 +3959,7 @@ void Triangles::GeomToTriangles0(Int4 inbvx)
   Draw();
   inquire();
 #endif
- 
+
   Insert();
   ForceBoundary();
   FindSubDomain();
@@ -3977,42 +3977,42 @@ void Triangles::GeomToTriangles0(Int4 inbvx)
 Edge** Triangles::MakeGeometricalEdgeToEdge()
  {
   assert(Gh.nbe);
-  Edge **e= new Edge* [Gh.nbe];
-  
+  Edge **e= new Edge* [this->Gh.nbe];
+
   Int4 i;
   for ( i=0;i<Gh.nbe ; i++)
     e[i]=NULL;
-  for ( i=0;i<nbe ; i++) 
-    { 
+  for ( i=0;i<nbe ; i++)
+    {
       Edge * ei = edges+i;
-      GeometricalEdge *on = ei->on; 
-      e[Gh.Number(on)] = ei;    
+      GeometricalEdge *on = ei->on;
+      e[Gh.Number(on)] = ei;
     }
-  for ( i=0;i<nbe ; i++) 
-    for (int ii=0;ii<2;ii++) { 
+  for ( i=0;i<nbe ; i++)
+    for (int ii=0;ii<2;ii++) {
        Edge * ei = edges+i;
        GeometricalEdge *on = ei->on;
       int j= ii;
-      while (!(*on)[j].Required()) { 
-	//	cout << i << " " << ii << " j= " << j << " curve = " 
-	//           <<  on->CurveNumber << "  " << Gh.Number(on) << " on " << j 
-	//   << " s0 " << Gh.Number( (*on)[0]) << " s1  " << Gh.Number( (*on)[1]) 
+      while (!(*on)[j].Required()) {
+	//	cout << i << " " << ii << " j= " << j << " curve = "
+	//           <<  on->CurveNumber << "  " << Gh.Number(on) << " on " << j
+	//   << " s0 " << Gh.Number( (*on)[0]) << " s1  " << Gh.Number( (*on)[1])
 	//   << " ->  " ;
        Adj(on,j); // next geom edge
        j=1-j;
-       //       cout << Gh.Number(on) << "  " << j  << " e[ON] =  " <<  e[Gh.Number(on)] 
-       //    << " s0 " << Gh.Number( (*on)[0]) << " s1  " << Gh.Number( (*on)[1]) << endl; 
-       if (e[Gh.Number(on)])  break; // optimisation     
-       e[Gh.Number(on)] = ei; 
+       //       cout << Gh.Number(on) << "  " << j  << " e[ON] =  " <<  e[Gh.Number(on)]
+       //    << " s0 " << Gh.Number( (*on)[0]) << " s1  " << Gh.Number( (*on)[1]) << endl;
+       if (e[Gh.Number(on)])  break; // optimisation
+       e[Gh.Number(on)] = ei;
        }
    }
 
   int kk=0;
      for ( i=0;i<Gh.nbe ; i++)
-       if (!e[i]) 
+       if (!e[i])
 	 if(kk++<10) {
-	   cerr << " Bug -- the geometrical edge " << i << " is on no edge curve = " << Gh.edges[i].CurveNumber 
-		<< " s0 " << Gh.Number( Gh.edges[i][0]) << " s1  " << Gh.Number( Gh.edges[i][1]) << endl; 
+	   cerr << " Bug -- the geometrical edge " << i << " is on no edge curve = " << Gh.edges[i].CurveNumber
+		<< " s0 " << Gh.Number( Gh.edges[i][0]) << " s1  " << Gh.Number( Gh.edges[i][1]) << endl;
 	 //	 assert( e[i]);
        }
   if(kk) MeshError(997,this);
@@ -4020,7 +4020,7 @@ Edge** Triangles::MakeGeometricalEdgeToEdge()
   return e;
  }
 
-Triangles::~Triangles() 
+Triangles::~Triangles()
 {
   assert(NbRef<=0);
   if (CurrentTh == this) CurrentTh=0;
@@ -4038,8 +4038,8 @@ Triangles::~Triangles()
   if (identity) delete [] identity;
   if (VertexOnBThVertex) delete [] VertexOnBThVertex;
   if (VertexOnBThEdge) delete [] VertexOnBThEdge;
-  
-  if (&Gh) 
+
+  if (&Gh)
     {
       if (Gh.NbRef>0) Gh.NbRef--;
       else if (Gh.NbRef==0) delete &Gh;
@@ -4049,8 +4049,8 @@ Triangles::~Triangles()
       if (BTh.NbRef>0) BTh.NbRef--;
       else if (BTh.NbRef==0) delete &BTh;
     }
-  PreInit(0); // set all to zero 
-  
+  PreInit(0); // set all to zero
+
 }
 
 void Triangles::SetIntCoor(const char * strfrom)
@@ -4068,13 +4068,13 @@ void Triangles::SetIntCoor(const char * strfrom)
     }
     R2 DD = (pmax-pmin)*0.05;
     pmin = pmin-DD;
-    pmax = pmax+DD; 
+    pmax = pmax+DD;
     coefIcoor= (MaxICoor)/(Max(pmax.x-pmin.x,pmax.y-pmin.y));
     assert(coefIcoor >0);
 
-    // generation of integer coord  
+    // generation of integer coord
     for (i=0;i<nbv;i++) {
-      vertices[i].i = toI2(vertices[i].r);    
+      vertices[i].i = toI2(vertices[i].r);
     }
 #ifdef DRAWING
     xGrafCoef = coefIcoor;
@@ -4086,7 +4086,7 @@ void Triangles::SetIntCoor(const char * strfrom)
 #endif
 #endif
 
-    // computation of the det 
+    // computation of the det
     int Nberr=0;
     for (i=0;i<nbt;i++)
       {
@@ -4100,47 +4100,47 @@ void Triangles::SetIntCoor(const char * strfrom)
 	  {
 	    if(Nberr==1)
 	      if (strfrom)
-		cerr << "+++ Fatal Error " << strfrom << "(SetInCoor)  Error :  area of Triangle < 0 " << endl; 
-	      else 
+		cerr << "+++ Fatal Error " << strfrom << "(SetInCoor)  Error :  area of Triangle < 0 " << endl;
+	      else
 		cerr << "+++  Fatal Error Triangle (in SetInCoor) area of Triangle < 0" << endl;
 	    cerr << " Triangle " << i << "  det  (I2) = " << triangles[i].det ;
 	    cerr << " (R2) " << Det(v1.r-v0.r,v2.r-v0.r);
 	    cerr << "; The 3  vertices " << endl;
-	    cerr << Number(v0) << " "  << Number(v1) << " " 
+	    cerr << Number(v0) << " "  << Number(v1) << " "
 		 << Number(v2) << " : " ;
 	    cerr << v0.r << v1.r << v2.r << " ; ";
 	    cerr << v0.i << v1.i << v2.i << endl;
 	  }
       }
     else
-      triangles[i].det= -1; // Null triangle; 
+      triangles[i].det= -1; // Null triangle;
       }
     if (Nberr) MeshError(899,this);
-	
+
 }
 
-void Triangles::FillHoleInMesh() 
+void Triangles::FillHoleInMesh()
 {
   Triangles * OldCurrentTh =CurrentTh;
   CurrentTh=this;
   //  Int4 NbTold = nbt;
   // generation of the integer coor
   {
- 
+
     //  double coef = coefIcoor;
     // recherche des extrema des vertices pmin,pmax
     Int4 i;
     if(verbosity>2)
-      cout << "  -- FillHoleInMesh: Nb of vertices =" << nbv 
+      cout << "  -- FillHoleInMesh: Nb of vertices =" << nbv
 	   << " Pmin = "<< pmin << " Pmax = "<< pmax << endl;
-    
+
     assert(ordre);
-    for (i=0;i<nbv;i++) 
+    for (i=0;i<nbv;i++)
       ordre[i]= 0 ;
-    
+
 
     NbSubDomains =0;
-    
+
   // generation of the adjacence of the triangles
     SetOfEdges4 * edge4= new SetOfEdges4(nbt*3,nbv);
     Int4 * st = new Int4[nbt*3];
@@ -4150,7 +4150,7 @@ void Triangles::FillHoleInMesh()
     for (i=0;i<nbe;i++)
       kk += (i == edge4->addtrie(Number(edges[i][0]),Number(edges[i][1])));
     if (kk != nbe)
-      { 
+      {
 	cerr << " Some Double edge in the mesh, the number is " << kk-nbe << endl;
 	MeshError(1002,this);
       }
@@ -4165,7 +4165,7 @@ void Triangles::FillHoleInMesh()
 	    st[k]=3*i+j;
 	  else if(st[k]>=0) {
 	    assert( ! triangles[i].TriangleAdj(j) && !triangles[st[k] / 3].TriangleAdj((int) (st[k]%3)));
-	    
+
 	    triangles[i].SetAdj2(j,triangles + st[k] / 3,(int) (st[k]%3));
 	    if (invisible)  triangles[i].SetHidden(j);
 	    if (k<nbe) {
@@ -4173,16 +4173,16 @@ void Triangles::FillHoleInMesh()
 	    }
 	    st[k]=-2-st[k]; }
 	  else {
-	    cerr << " The edge (" 
+	    cerr << " The edge ("
 	     << Number(triangles[i][VerticesOfTriangularEdge[j][0]])
-		 << " , " 
+		 << " , "
 		 << Number(triangles[i][VerticesOfTriangularEdge[j][1]])
 		 << " ) is in more than 2 triangles " <<k <<endl;
 	    cerr << " Edge " << j << " Of Triangle " << i << endl;
 	    cerr << " Edge " << (-st[k]+2)%3 << " Of Triangle " << (-st[k]+2)/3  << endl;
 	    cerr << " Edge " << triangles[(-st[k]+2)/3].NuEdgeTriangleAdj((int)((-st[k]+2)%3))
 		 << " Of Triangle " <<  Number(triangles[(-st[k]+2)/3].TriangleAdj((int)((-st[k]+2)%3))) << endl;
-	    MeshError(9999,this);}	
+	    MeshError(9999,this);}
 
 
 	}
@@ -4193,45 +4193,45 @@ void Triangles::FillHoleInMesh()
       cout << "    - The number of given edge = " << nbe << endl;
       cout << "    - The number of all edges = " << edge4->nb() << endl;
       cout << "    - The Euler number = 1-Nb Of Hole = " << nbt-edge4->nb()+nbv << endl; }
-    
-    
+
+
     // check the consistant of edge[].adj and the geometrical required  vertex
      Int4 k=0;
      for (i=0;i<edge4->nb();i++)
-       if (st[i] >=0) // edge alone 
-	 if (i < nbe) 
+       if (st[i] >=0) // edge alone
+	 if (i < nbe)
 	   {
 	     Int4 i0=edge4->i(i);ordre[i0] = vertices+i0;
 	     Int4 i1=edge4->j(i);ordre[i1] = vertices+i1;
 	   }
      	 else {
 	   k++;
-	   if (verbosity>20 && k <20) 
+	   if (verbosity>20 && k <20)
 	     {
 	     Int4 i0=edge4->i(i);
 	     Int4 i1=edge4->j(i);
 	     cerr << " Lose boundary edges " << i << " : " << i0 << " " << i1 << endl;
 	     }
 	 }
-     	 
+
       if(k != 0) {
 	if (verbosity>20)
 	  {
 	    cout << " The given edge are " << endl;
 	      for (int i=0;i< nbe;i++)
-		cout <<  " Edge " << i << " : " <<  Number(edges[i][0]) << " " <<  Number(edges[i][1]) 
-		     << " " << edges[i].ref << endl; 
+		cout <<  " Edge " << i << " : " <<  Number(edges[i][0]) << " " <<  Number(edges[i][1])
+		     << " " << edges[i].ref << endl;
 	  }
 	cerr << k << " boundary edges  are not defined as edges " << endl;
 	MeshError(9998,this);
       }
-      // generation of the mesh with boundary points   
+      // generation of the mesh with boundary points
       Int4 nbvb = 0;
       for (i=0;i<nbv;i++)
-	{ 
+	{
 	  vertices[i].t=0;
 	  vertices[i].vint=0;
-	if (ordre[i]) 
+	if (ordre[i])
 	  ordre[nbvb++] = ordre[i];
 	}
 
@@ -4244,13 +4244,13 @@ void Triangles::FillHoleInMesh()
       Int4  Nbtriafillhole = 2*nbvb;
       Triangle * triafillhole =new Triangle[Nbtriafillhole];
       if (verbosity>9)
-	cout << " Nbtriafillhole triafillhole*" << triafillhole << endl; 
+	cout << " Nbtriafillhole triafillhole*" << triafillhole << endl;
       triangles =  triafillhole;
 
       nbt=2;
       nbtx= Nbtriafillhole;
-      
-	for (i=2 ; det( ordre[0]->i, ordre[1]->i, ordre[i]->i ) == 0;) 
+
+	for (i=2 ; det( ordre[0]->i, ordre[1]->i, ordre[i]->i ) == 0;)
 	  if  ( ++i >= nbvb) {
 	    cerr << "FillHoleInMesh: All the vertices are aline " << nbvb << endl;
 	    MeshError(998,this); }
@@ -4259,11 +4259,11 @@ void Triangles::FillHoleInMesh()
 	Vertex *  v0=ordre[0], *v1=ordre[1];
 
 
-	triangles[0](0) = 0; // sommet pour infini 
+	triangles[0](0) = 0; // sommet pour infini
 	triangles[0](1) = v0;
 	triangles[0](2) = v1;
-	
-	triangles[1](0) = 0;// sommet pour infini 
+
+	triangles[1](0) = 0;// sommet pour infini
 	triangles[1](2) = v0;
 	triangles[1](1) = v1;
 	const int e0 = OppositeEdge[0];
@@ -4272,40 +4272,40 @@ void Triangles::FillHoleInMesh()
 	triangles[0].SetAdj2(e0, &triangles[1] ,e0);
 	triangles[0].SetAdj2(e1, &triangles[1] ,e2);
 	triangles[0].SetAdj2(e2, &triangles[1] ,e1);
-	
+
 	triangles[0].det = -1;  // faux triangles
 	triangles[1].det = -1;  // faux triangles
-	
+
 	triangles[0].SetTriangleContainingTheVertex();
 	triangles[1].SetTriangleContainingTheVertex();
-	
+
 	triangles[0].link=&triangles[1];
 	triangles[1].link=&triangles[0];
-	
-#ifdef DEBUG 
+
+#ifdef DEBUG
 	triangles[0].check();
 	triangles[1].check();
-#endif  
+#endif
 	//  nbtf = 2;
-	if (  !quadtree ) 
+	if (  !quadtree )
 	   delete  quadtree; // ->ReInitialise();
-	
+
 	  quadtree = new QuadTree(this,0);
 	quadtree->Add(*v0);
 	quadtree->Add(*v1);
-	
-	// on ajoute les sommets un a un 
+
+	// on ajoute les sommets un a un
 	Int4 NbSwap=0;
 	for (Int4 icount=2; icount<nbvb; icount++) {
-	  
+
 	  Vertex *vi  = ordre[icount];
 	  //	  cout << " Add vertex " <<  Number(vi) << endl;
 	  Icoor2 dete[3];
 	  Triangle *tcvi = FindTriangleContening(vi->i,dete);
-	  quadtree->Add(*vi); 
+	  quadtree->Add(*vi);
 	  Add(*vi,tcvi,dete);
 	  NbSwap += vi->Optim(1,1);
-	  
+
 #ifdef DRAWING2
 	  cout << Number(vi) << " " <<  NbSwap <<  endl;
 	reffecran();
@@ -4313,16 +4313,16 @@ void Triangles::FillHoleInMesh()
 	vi->Draw();
 	inquire();
 #endif
-	}// end loop on  icount	
+	}// end loop on  icount
 #ifdef DRAWING1
 	inquire();
 #endif
-	
+
 	//Int4 nbtfillhole = nbt;
-	 // inforce the boundary 
+	 // inforce the boundary
 	 TriangleAdjacent ta(0,0);
 	 Int4 nbloss = 0,knbe=0;
-	 for ( i = 0; i < nbe; i++) 
+	 for ( i = 0; i < nbe; i++)
 	  if (st[i] >=0)  // edge alone => on border ...  FH oct 2009
 	   {
 	     Vertex & a=edges[i][0], & b =    edges[i][1];
@@ -4339,7 +4339,7 @@ void Triangles::FillHoleInMesh()
 	     MeshError(1100,this);
 	   }
 	 FindSubDomain(1);
-         // remove all the hole 
+         // remove all the hole
 	 // remove all the good sub domain
 	 Int4 krm =0;
 	 for (i=0;i<nbt;i++)
@@ -4350,16 +4350,16 @@ void Triangles::FillHoleInMesh()
 		 {
 		   TriangleAdjacent ta =  triangles[i].Adj(j);
 		   Triangle & tta = * (Triangle *) ta;
-		   if(! tta.link) // edge between remove and not remove 
+		   if(! tta.link) // edge between remove and not remove
 		     { // change the link of ta;
 		       int ja = ta;
 		       Vertex *v0= ta.EdgeVertex(0);
 		       Vertex *v1= ta.EdgeVertex(1);
 		       Int4 k =edge4->addtrie(v0?Number(v0):nbv,v1? Number(v1):nbv);
-		       assert(st[k] >=0); 
+		       assert(st[k] >=0);
 		       tta.SetAdj2(ja,savetriangles + st[k] / 3,(int) (st[k]%3));
 		       ta.SetLock();
-		       st[k]=-2-st[k]; 
+		       st[k]=-2-st[k];
 		     }
 		 }
 	     }
@@ -4372,15 +4372,15 @@ void Triangles::FillHoleInMesh()
 	   else
 	     {
 	      triangles[i].color= savenbt+ NbTfillHoll++;
-#ifdef DEBUG 
+#ifdef DEBUG
 	     triangles[i].check();
 #endif
       }
 	 // cout <<      savenbt+NbTfillHoll << " " <<  savenbtx  << endl;
      assert(savenbt+NbTfillHoll <= savenbtx );
-     // copy of the outside triangles in saveTriangles 
+     // copy of the outside triangles in saveTriangles
      for (i=0;i<nbt;i++)
-       if(triangles[i].color>=0) 
+       if(triangles[i].color>=0)
 	 {
           savetriangles[savenbt]=triangles[i];
 	  savetriangles[savenbt].link=0;
@@ -4389,16 +4389,16 @@ void Triangles::FillHoleInMesh()
      // gestion of the adj
       k =0;
       Triangle * tmax = triangles + nbt;
-      for (i=0;i<savenbt;i++)  
-	{ 
+      for (i=0;i<savenbt;i++)
+	{
 	  Triangle & ti = savetriangles[i];
 	  for (int j=0;j<3;j++)
 	    {
 	      Triangle * ta = ti.TriangleAdj(j);
 	      int aa = ti.NuEdgeTriangleAdj(j);
 	      int lck = ti.Locked(j);
-	      if (!ta) k++; // bug 
-	      else if ( ta >= triangles && ta < tmax) 
+	      if (!ta) k++; // bug
+	      else if ( ta >= triangles && ta < tmax)
 		{
 		  ta= savetriangles + ta->color;
 		  ti.SetAdj2(j,ta,aa);
@@ -4408,7 +4408,7 @@ void Triangles::FillHoleInMesh()
 	}
      //	 OutSidesTriangles = triangles;
       //	Int4 NbOutSidesTriangles = nbt;
-	 
+
 	 // restore triangles;
 	 nbt=savenbt;
 	 nbtx=savenbtx;
@@ -4416,7 +4416,7 @@ void Triangles::FillHoleInMesh()
 	 delete [] subdomains;
 	 triangles = savetriangles;
 	 subdomains = savesubdomains;
-	 //	 cout <<  triangles << " <> " << OutSidesTriangles << endl; 
+	 //	 cout <<  triangles << " <> " << OutSidesTriangles << endl;
 	     /*	 k=0;
 	 for (i=0;i<nbt;i++)
 	   for (int j=0;j<3;j++)
@@ -4429,18 +4429,18 @@ void Triangles::FillHoleInMesh()
 	 }
 	 FindSubDomain();
 	 // cout << " NbTOld = " << NbTold << " ==  " << nbt - NbOutT << " " << nbt << endl;
-  
-    // 
+
+    //
 
     delete edge4;
     delete [] st;
     for (i=0;i<nbv;i++)
       quadtree->Add(vertices[i]);
-    
+
     SetVertexFieldOn();
 
     for (i=0;i<nbe;i++)
-      if(edges[i].on) 
+      if(edges[i].on)
 	for(int j=0;j<2;j++)
 	  if (!edges[i].adj[j])
 	    if(!edges[i][j].on->IsRequiredVertex()) {
@@ -4454,11 +4454,11 @@ void Triangles::FillHoleInMesh()
 		cerr << " = " << edges[i][j].on ;
 	      cerr << endl;
 	  }
-    
+
 #ifdef DRAWING1
     InitDraw();
 #endif
-    
+
   }
   CurrentTh=OldCurrentTh;
 }
@@ -4467,17 +4467,17 @@ Triangles::Triangles(Triangles & Th,Geometry * pGh,Triangles * pBth,Int4 nbvxx)
 : Gh(*(pGh?pGh:&Th.Gh)), BTh(*(pBth?pBth:this))
 {
   Gh.NbRef++;
-  nbvxx = Max(nbvxx,Th.nbv); 
+  nbvxx = Max(nbvxx,Th.nbv);
   Int4 i;
   // do all the allocation to be sure all the pointer existe
-  
+
   char * cname = 0;
-  if (Th.name) 
+  if (Th.name)
     {
       cname = new char[strlen(Th.name)+1];
       strcpy(cname,Th.name);
     }
-  PreInit(nbvxx,cname);// to make the allocation 
+  PreInit(nbvxx,cname);// to make the allocation
   // copy of triangles
   nt=Th.nt;
   nbv = Th.nbv;
@@ -4494,7 +4494,7 @@ Triangles::Triangles(Triangles & Th,Geometry * pGh,Triangles * pBth,Int4 nbvxx)
   NbVerticesOnGeomEdge = Th.NbVerticesOnGeomEdge;
   if (NbVerticesOnGeomEdge)
      VerticesOnGeomEdge = new VertexOnGeom[NbVerticesOnGeomEdge] ;
-  if (& BTh == & Th.BTh) // same back ground 
+  if (& BTh == & Th.BTh) // same back ground
     {
       BTh.NbRef++;
       NbVertexOnBThVertex = Th.NbVertexOnBThVertex;
@@ -4504,15 +4504,15 @@ Triangles::Triangles(Triangles & Th,Geometry * pGh,Triangles * pBth,Int4 nbvxx)
       if(NbVertexOnBThEdge)
 	VertexOnBThEdge = new VertexOnEdge[NbVertexOnBThEdge];
     }
-   else 
-     { // no add on back ground mesh 
+   else
+     { // no add on back ground mesh
        BTh.NbRef++;
        NbVertexOnBThVertex=0;
        VertexOnBThVertex=0;
        NbVertexOnBThEdge=0;
        VertexOnBThEdge=0;
-       //       assert (& BTh == this); // --- a voir 
-		     
+       //       assert (& BTh == this); // --- a voir
+
     }
 
 
@@ -4529,7 +4529,7 @@ Triangles::Triangles(Triangles & Th,Geometry * pGh,Triangles * pBth,Int4 nbvxx)
      edges[i].Set(Th,i,*this);
   for(i=0;i<nbv;i++)
      vertices[i].Set(Th.vertices[i],Th,*this);
-  for(i=0;i<NbSubDomains;i++)  
+  for(i=0;i<NbSubDomains;i++)
     subdomains[i].Set(Th,i,*this);
   for (i=0;i<NbVerticesOnGeomVertex;i++)
     VerticesOnGeomVertex[i].Set(Th.VerticesOnGeomVertex[i],Th,*this);
@@ -4545,18 +4545,18 @@ Triangles::Triangles(Triangles & Th,Geometry * pGh,Triangles * pBth,Int4 nbvxx)
 
 Int4  Triangle::Optim(Int2 i,int koption)
 {
-  // turn in the positif sens around vertex s  
+  // turn in the positif sens around vertex s
   register  Int4 NbSwap =0;
   register Vertex * s  = ns[i];
   register Triangle * tbegin=0 , *t = this , *ttc;
   register int k=0,j = EdgesVertexTriangle[i][0],jc;
   tbegin=t;
   do {
-    k++; 
+    k++;
 #ifdef DEBUG
     assert( s == & (*t)[VerticesOfTriangularEdge[j][1]] );
 #endif
-#ifdef DRAWING1 
+#ifdef DRAWING1
     t->Draw();
     DrawMark( s->r);
 #endif
@@ -4573,8 +4573,8 @@ Int4  Triangle::Optim(Int2 i,int koption)
     t = ttc;
     j = NextEdge[jc];
     assert(k<20000);
-  } while ( (tbegin != t)); 
-  
+  } while ( (tbegin != t));
+
   return NbSwap;
 }
 */
@@ -4611,7 +4611,7 @@ Int4  Triangle::Optim(Int2 i,int koption)
 	assert( s == & (*t)[OppositeVertex[j]] );
 #endif
       }
-    // end on this  Triangle 
+    // end on this  Triangle
     tp = t;
     jp = NextEdge[j];
 
@@ -4623,7 +4623,7 @@ Int4  Triangle::Optim(Int2 i,int koption)
 }
 
  void Triangles::SmoothingVertex(int nbiter,Real8 omega )
-  { 
+  {
   //  if quatree exist remove it end reconstruct
     if (quadtree) delete quadtree;
     quadtree=0;
@@ -4631,32 +4631,32 @@ Int4  Triangle::Optim(Int2 i,int koption)
     Triangle vide; // a triangle to mark the boundary vertex
     Triangle   ** tstart= new Triangle* [nbv];
     Int4 i,j,k;
-    //   attention si Background == Triangle alors on ne peut pas utiliser la rechech rapide 
+    //   attention si Background == Triangle alors on ne peut pas utiliser la rechech rapide
     if ( this == & BTh)
      for ( i=0;i<nbv;i++)
-      tstart[i]=vertices[i].t;     
-    else 
+      tstart[i]=vertices[i].t;
+    else
      for ( i=0;i<nbv;i++)
       tstart[i]=0;
-    for ( j=0;j<NbVerticesOnGeomVertex;j++ ) 
+    for ( j=0;j<NbVerticesOnGeomVertex;j++ )
       tstart[ Number(VerticesOnGeomVertex[j].mv)]=&vide;
-    for ( k=0;k<NbVerticesOnGeomEdge;k++ ) 
+    for ( k=0;k<NbVerticesOnGeomEdge;k++ )
       tstart[ Number(VerticesOnGeomEdge[k].mv)]=&vide;
-    if(verbosity>2) 
+    if(verbosity>2)
       cout << "  -- SmoothingVertex: nb Iteration = " << nbiter << " Omega = " << omega << endl;
     for (k=0;k<nbiter;k++)
      {
       Int4 i,NbSwap =0;
       Real8 delta =0;
       for ( i=0;i<nbv;i++)
-        if (tstart[i] != &vide) // not a boundary vertex 
+        if (tstart[i] != &vide) // not a boundary vertex
 	  delta=Max(delta,vertices[i].Smoothing(*this,BTh,tstart[i],omega));
       if (!NbOfQuad)
       for ( i=0;i<nbv;i++)
-        if (tstart[i] != &vide) // not a boundary vertex 
+        if (tstart[i] != &vide) // not a boundary vertex
 	  NbSwap += vertices[i].Optim(1);
        if (verbosity>3)
-	 cout << "    Move max = " <<  sqrt(delta) << " iteration = " 
+	 cout << "    Move max = " <<  sqrt(delta) << " iteration = "
 	      << k << " Nb of Swap = " << NbSwap << endl;
        }
 
@@ -4664,12 +4664,12 @@ Int4  Triangle::Optim(Int2 i,int koption)
     if (quadtree) quadtree= new QuadTree(this);
   }
 void Triangles::MakeQuadTree()
-{  
+{
   if(verbosity>8)
     cout << "      MakeQuadTree" << endl;
   if (  !quadtree )  quadtree = new QuadTree(this);
 
-  
+
 #ifdef DRAWING1
   quadtree->Draw();
   rattente(1);
@@ -4677,20 +4677,20 @@ void Triangles::MakeQuadTree()
   quadtree->Draw();
   rattente(1);
 #endif
-  
+
 }
-void  Triangles::ShowRegulaty() const// Add FH avril 2007 
+void  Triangles::ShowRegulaty() const// Add FH avril 2007
 {
-   const  Real8  sqrt32=sqrt(3.)*0.5; 
+   const  Real8  sqrt32=sqrt(3.)*0.5;
    const Real8  aireKh=sqrt32*0.5;
    D2  Beq(1,0),Heq(0.5,sqrt32);
    D2xD2 Br(D2xD2(Beq,Heq).t());
    D2xD2 B1r(Br.inv());
    /*   D2xD2 BB = Br.t()*Br;
-    cout << " BB = " << BB << " " << Br*B1r <<  endl; 
+    cout << " BB = " << BB << " " << Br*B1r <<  endl;
     MetricAnIso MMM(BB.x.x,BB.x.y,BB.y.y);
     MatVVP2x2 VMM(MMM);
-    cout << " " << VMM.lambda1 << " " << VMM.lambda2 <<  endl; 
+    cout << " " << VMM.lambda1 << " " << VMM.lambda2 <<  endl;
    */
     double gammamn=1e100,hmin=1e100;
     double gammamx=0,hmax=0;
@@ -4702,7 +4702,7 @@ void  Triangles::ShowRegulaty() const// Add FH avril 2007
    // Real8 cf2= 6.*cf*cf;
     int nt=0;
     for (int it=0;it<nbt;it++)
-      if ( triangles[it].link) 
+      if ( triangles[it].link)
 	{
 	  nt++;
 	  Triangle &K=triangles[it];
@@ -4718,7 +4718,7 @@ void  Triangles::ShowRegulaty() const// Add FH avril 2007
 	  alpha2 = Max(alpha2,Max(VMK.lambda1/VMK.lambda2,VMK.lambda2/VMK.lambda1));
 	  // cout << B_K << " * " << B1r << " == " << BK << " " << B_K*B_K.inv() << endl;
 	  Real8 betaK=0;
-	  
+
 	  for (int j=0;j<3;j++)
 	    {
 	      Real8 he= Norme2(R2(K[j],K[(j+1)%3]));
@@ -4727,27 +4727,27 @@ void  Triangles::ShowRegulaty() const// Add FH avril 2007
 	      Vertex & v=K[j];
 	      D2xD2 M((MetricAnIso)v);
 	      betaK += sqrt(M.det());
-	      
+
 	      D2xD2 BMB = BK.t()*M*BK;
 	      MetricAnIso M1(BMB.x.x,BMB.x.y,BMB.y.y);
 	      MatVVP2x2 VM1(M1);
-	      //cout << B_K <<" " <<  M << " " <<  he << " " << BMB << " " << VM1.lambda1 << " " << VM1.lambda2<<   endl; 
+	      //cout << B_K <<" " <<  M << " " <<  he << " " << BMB << " " << VM1.lambda1 << " " << VM1.lambda2<<   endl;
 	      gammamn=Min3(gammamn,VM1.lambda1,VM1.lambda2);
-	      gammamx=Max3(gammamx,VM1.lambda1,VM1.lambda2);		
+	      gammamx=Max3(gammamx,VM1.lambda1,VM1.lambda2);
 	    }
 	  betaK *= area3;//  1/2 (somme sqrt(det))* area(K)
 	  Marea+= betaK;
 	  // cout << betaK << " " << area3 << " " << beta << " " << beta0 << " " << area3*3*3*3 <<endl;
 	  beta=min(beta,betaK);
 	  beta0=max(beta0,betaK);
-	}   
-    area*=3; 
+	}
+    area*=3;
     gammamn=sqrt(gammamn);
-    gammamx=sqrt(gammamx);    
-    cout << "  -- adaptmesh Regulary:  Nb triangles " << nt <<  " , h  min " << hmin  << " , h max " << hmax << endl;  
-    cout << "     area =  " << area << " , M area = " << Marea << " , M area/( |Khat| nt) " << Marea/(aireKh*nt) << endl; 
-    cout << "     infiny-regulaty:  min " << gammamn << "  max " << gammamx << endl;  
-    cout << "     anisomax  "<< sqrt(alpha2) << ", beta max = " << 1./sqrt(beta/aireKh) 
+    gammamx=sqrt(gammamx);
+    cout << "  -- adaptmesh Regulary:  Nb triangles " << nt <<  " , h  min " << hmin  << " , h max " << hmax << endl;
+    cout << "     area =  " << area << " , M area = " << Marea << " , M area/( |Khat| nt) " << Marea/(aireKh*nt) << endl;
+    cout << "     infiny-regulaty:  min " << gammamn << "  max " << gammamx << endl;
+    cout << "     anisomax  "<< sqrt(alpha2) << ", beta max = " << 1./sqrt(beta/aireKh)
 	 << " min  "<<  1./sqrt(beta0/aireKh)  << endl;
 }
 void  Triangles::ShowHistogram() const
@@ -4760,40 +4760,40 @@ void  Triangles::ShowHistogram() const
     Int4 i,it,k, nbedges =0;
     for (i=0;i<=kmax;i++) histo[i]=0;
     for (it=0;it<nbt;it++)
-	if ( triangles[it].link) 
+	if ( triangles[it].link)
 	{
-	     
+
 	    for (int j=0;j<3;j++)
 	    {
 		Triangle *ta = triangles[it].TriangleAdj(j);
-		if ( !ta || !ta->link || Number(ta) >= it) 
-		{ 
+		if ( !ta || !ta->link || Number(ta) >= it)
+		{
 		    Vertex & vP = triangles[it][VerticesOfTriangularEdge[j][0]];
 		    Vertex & vQ = triangles[it][VerticesOfTriangularEdge[j][1]];
 		    if ( !& vP || !&vQ) continue;
 		    R2 PQ = vQ.r - vP.r;
 		    Real8 l = log(LengthInterpole(vP,vQ,PQ));
-#ifdef DRAWING2             
+#ifdef DRAWING2
 		    if (l>1.4)  {
 			penthickness(3);
 			vP.MoveTo(),vQ.LineTo();
 			penthickness(1);
 			cout << "   l = " << l << Number(vP) << " edge = " << Number(vQ) << endl;
 		    }
-#endif             
+#endif
 		    nbedges++;
 		    k = (int) ((l - lmin)*delta);
 		    k = Min(Max(k,0L),kmax);
 		    histo[k]++;
 		}
 	    }
-	}  
+	}
 	    cout << "  -- Histogram of the unit mesh,  nb of edges" << nbedges << endl <<endl;
- 
+
     cout << "        length of edge in   | % of edge  | Nb of edges " << endl;
     cout << "        ------------------- | ---------- | ----------- " << endl;
     for   (i=0;i<=kmax;i++)
-      { 
+      {
        cout << "    " ;
         cout.width(10);
         if (i==0) cout  << " 0 " ;
@@ -4803,7 +4803,7 @@ void  Triangles::ShowHistogram() const
         if (i==kmax) cout << " +infty " ;
         else cout  << exp(lmin+(i+1)/delta) ;
         cout.width();cout << "   |   " ;
-        
+
        cout.precision(4);
        cout.width(6);
        cout <<  ((long)  ((10000.0 * histo[i])/ nbedges))/100.0 ;
@@ -4812,20 +4812,20 @@ void  Triangles::ShowHistogram() const
        cout <<  "   |   " << histo[i] <<endl;
       }
     cout << "        ------------------- | ---------- | ----------- " << endl <<endl;
-    
+
  }
 
 int  Triangles::Crack()
-  { 
-    assert(NbCrackedEdges ==0 || NbCrackedVertices >0); 
+  {
+    assert(NbCrackedEdges ==0 || NbCrackedVertices >0);
     for (int i=0;i<NbCrackedEdges;i++)
        CrackedEdges[i].Crack();
     return NbCrackedEdges;
   }
-  
-int Triangles::UnCrack() 
-{ 
-  assert(NbCrackedEdges ==0 || NbCrackedVertices >0); 
+
+int Triangles::UnCrack()
+{
+  assert(NbCrackedEdges ==0 || NbCrackedVertices >0);
   for (int i=0;i<NbCrackedEdges;i++)
     CrackedEdges[i].UnCrack();
   return NbCrackedEdges;
@@ -4847,114 +4847,114 @@ int Triangles::CrackMesh()
   Edge * e = new Edge[ nbe + k];
 
   // copy
-  for (i=0;i<nbe;i++) 
+  for (i=0;i<nbe;i++)
     e[i] = edges[i];
   delete edges;
   edges = e;
 
   const int  nbe0  = nbe;
-  for (k=i=0;i<nbe0;i++) // on double les arete cracked 
+  for (k=i=0;i<nbe0;i++) // on double les arete cracked
     if(edges[i].on->Cracked())
       {
 	e[nbe] = e[i];
-	//  return the edge 
+	//  return the edge
 	e[nbe].v[0] =  e[i].v[1];
 	e[nbe].v[1] =  e[i].v[0];
-	e[nbe].on = e[i].on->link ; // fqux 
+	e[nbe].on = e[i].on->link ; // fqux
 	CrackedEdges[k++]=CrackedEdge(edges,i,nbe);
 	nbe++;
       }
-  ReMakeTriangleContainingTheVertex() ; 
-  //  
+  ReMakeTriangleContainingTheVertex() ;
+  //
   int nbcrakev  =0;
   Vertex *vlast = vertices + nbv;
   Vertex *vend = vertices + nbvx; // end of array
-  for (int iv=0;iv<nbv;iv++) // vertex 
+  for (int iv=0;iv<nbv;iv++) // vertex
     {
       Vertex & v= vertices[iv];
-      Vertex * vv = & v;  
+      Vertex * vv = & v;
       int kk=0; // nb cracked
-      int kc=0; 
-      int kkk =0; // nb triangle  with same number 
+      int kc=0;
+      int kkk =0; // nb triangle  with same number
       Triangle * tbegin = v.t;
-      int i  = v.vint;       
+      int i  = v.vint;
       assert(tbegin && (i >= 0 ) && (i <3));
       // turn around the vertex v
       TriangleAdjacent ta(tbegin,EdgesVertexTriangle[i][0]);// previous edge
       int k=0;
       do {
 	int kv = VerticesOfTriangularEdge[ta][1];
-	k++; 
+	k++;
 	Triangle * tt (ta);
-	if ( ta.Cracked() ) 
-	  {   
+	if ( ta.Cracked() )
+	  {
 	    TriangleAdjacent tta=(ta.Adj());
 	    assert(tta.Cracked());
-	    if ( kk == 0) tbegin=ta,kkk=0;  //  begin by a cracked edge  => restart                
-	    if (  kkk ) { kc =1;vv = vlast++;  kkk = 0; } // new vertex if use 
-	    kk++;// number of cracked edge view                 
+	    if ( kk == 0) tbegin=ta,kkk=0;  //  begin by a cracked edge  => restart
+	    if (  kkk ) { kc =1;vv = vlast++;  kkk = 0; } // new vertex if use
+	    kk++;// number of cracked edge view
 	  }
-	if ( tt->link ) { // if good triangles store the value 
+	if ( tt->link ) { // if good triangles store the value
 	  int it = Number(tt);
 	  assert(it < nt);
-	  (*tt)(kv)= vv; //   Change the vertex of triangle 
-	  if(vv<vend) {*vv= v;vv->ReferenceNumber=iv;} // copy the vertex value + store the old vertex number in ref 
+	  (*tt)(kv)= vv; //   Change the vertex of triangle
+	  if(vv<vend) {*vv= v;vv->ReferenceNumber=iv;} // copy the vertex value + store the old vertex number in ref
 	  //	  tt->SetTriangleContainingTheVertex();
 	  kkk++;
-	} else if (kk) { // crack + boundary 
-	  if (  kkk ) { kc =1;vv = vlast++;  kkk = 0; } // new vertex if use 
+	} else if (kk) { // crack + boundary
+	  if (  kkk ) { kc =1;vv = vlast++;  kkk = 0; } // new vertex if use
 	}
-	
-	ta = Next(ta).Adj(); 
-      } while ( (tbegin != ta)); 
+
+	ta = Next(ta).Adj();
+      } while ( (tbegin != ta));
       assert(k);
       if (kc)  nbcrakev++;
     }
-  
-  if ( nbcrakev ) 
+
+  if ( nbcrakev )
       for (int iec =0;iec < NbCrackedEdges; iec ++)
 	  CrackedEdges[iec].Set();
-  
-  //  set the ref 
+
+  //  set the ref
   cout << " set the ref " <<  endl ;
   NbCrackedVertices =   nbcrakev;
   // int nbvo = nbv;
   nbv = vlast - vertices;
-  int nbnewv =  nbv - nbv; // nb of new vrtices 
+  int nbnewv =  nbv - nbv; // nb of new vrtices
   if (nbcrakev && verbosity > 1 )
     cout << " Nb of craked vertices = " << nbcrakev << " Nb of created vertices " <<   nbnewv<< endl;
-  // all the new vertices are on geometry 
+  // all the new vertices are on geometry
   //  BOFBO--  A VOIR
   if (nbnewv)
-    { // 
+    { //
       Int4 n = nbnewv+NbVerticesOnGeomVertex;
       Int4 i,j,k;
       VertexOnGeom * vog = new VertexOnGeom[n];
-      for ( i =0; i<NbVerticesOnGeomVertex;i++) 
+      for ( i =0; i<NbVerticesOnGeomVertex;i++)
 	vog[i]=VerticesOnGeomVertex[i];
       delete [] VerticesOnGeomVertex;
       VerticesOnGeomVertex = vog;
-      // loop on cracked edge 
+      // loop on cracked edge
       Vertex * LastOld = vertices + nbv - nbnewv;
       for (int iec =0;iec < NbCrackedEdges; iec ++)
 	for (k=0;k<2;k++)
 	  {
 	    Edge & e = *( k ? CrackedEdges[iec].a.edge : CrackedEdges[iec].b.edge);
-	    for (j=0;j<2;j++) 
+	    for (j=0;j<2;j++)
 	      {
 		Vertex * v = e(j);
 		if ( v >=  LastOld)
-		  { // a new vertex 
-		    Int4 old = v->ReferenceNumber ; // the old same vertex 
+		  { // a new vertex
+		    Int4 old = v->ReferenceNumber ; // the old same vertex
 		    Int4 i  = ( v - LastOld);
 		    //  if the old is on vertex => warning
-		    // else the old is on edge => ok 
+		    // else the old is on edge => ok
 		    vog[i] = vog[old];
 				//  		    vog[i].mv = v;
 				//g[i].ge = ;
 				//og[i].abcisse = ;
 		  }
-		
+
 	      }
 	  }
 
@@ -4962,9 +4962,9 @@ int Triangles::CrackMesh()
   }
   SetVertexFieldOn();
 
- 
+
   if (vlast >= vend)
-    {  
+    {
       cerr << " Not enougth vertices to crack the mesh we need " << nbv << " vertices " << endl;
       MeshError(555,this);
     }
@@ -4972,12 +4972,12 @@ int Triangles::CrackMesh()
   CurrentTh = CurrentThOld;
   return  NbCrackedVertices;
 }
-      
+
 Triangles::Triangles(const Triangles & Tho,const int *flag ,const int *bb)
   : Gh(*(new Geometry())), BTh(*this)
 { // truncature
-  // 
-  
+  //
+
   char cname[] = "trunc";
 
   int i,k,itadj;
@@ -4992,9 +4992,9 @@ Triangles::Triangles(const Triangles & Tho,const int *flag ,const int *bb)
   for (i=0;i<Tho.nbv;i++)
     refv[i]=0;
   int nbNewBedge =0;
-  //  int nbOldBedge =0;  
+  //  int nbOldBedge =0;
   for (i=0;i<Tho.nbt;i++)
-    if(  reft[i] >=0 && flag[i]) 
+    if(  reft[i] >=0 && flag[i])
       {
         const Triangle & t = Tho.triangles[i];
         kt++;
@@ -5020,7 +5020,7 @@ Triangles::Triangles(const Triangles & Tho,const int *flag ,const int *bb)
       }
   k=0;
   for (i=0;i<Tho.nbv;i++)
-    if (kk[i]>=0) 
+    if (kk[i]>=0)
       kk[i]=k++;
   cout << " number of vertices " << k << " remove = " << Tho.nbv - k << endl;
   cout << " number of triangles " << kt << " remove = " << nbInT-kt << endl;
@@ -5028,7 +5028,7 @@ Triangles::Triangles(const Triangles & Tho,const int *flag ,const int *bb)
   Int4 inbvx =k;
   PreInit(inbvx,cname);
   for (i=0;i<Tho.nbv;i++)
-    if (kk[i]>=0) 
+    if (kk[i]>=0)
       {
         vertices[nbv] = Tho.vertices[i];
         if (!vertices[nbv].ref())
@@ -5037,7 +5037,7 @@ Triangles::Triangles(const Triangles & Tho,const int *flag ,const int *bb)
       }
   assert(inbvx == nbv);
   for (i=0;i<Tho.nbt;i++)
-    if(  reft[i] >=0 && flag[i]) 
+    if(  reft[i] >=0 && flag[i])
       {
         const Triangle & t = Tho.triangles[i];
         int i0 = Tho.Number(t[0]);
@@ -5048,8 +5048,8 @@ Triangles::Triangles(const Triangles & Tho,const int *flag ,const int *bb)
         // cout <<i<< " F" <<  flag[i] << " T " << nbt << "   = " <<  kk[i0] << " " << kk[i1] << " " << kk[i2] ;
         // cout << " OT  " <<  i0 << " "  << i1 << " " << i2  << " " << reft[i] << endl;
         triangles[nbt] = Triangle(this,kk[i0],kk[i1],kk[i2]);
-        triangles[nbt].color = Tho.subdomains[reft[i]].ref; 
-        nbt++;           
+        triangles[nbt].color = Tho.subdomains[reft[i]].ref;
+        nbt++;
       }
   assert(kt==nbt);
   if (nbt ==0 && nbv ==0) {
@@ -5061,80 +5061,80 @@ Triangles::Triangles(const Triangles & Tho,const int *flag ,const int *bb)
   delete [] refv;
   double cutoffradian = 10.0/180.0*Pi;
   ConsGeometry(cutoffradian);
-  Gh.AfterRead(); 
+  Gh.AfterRead();
   SetIntCoor();
   FillHoleInMesh();
-   
+
   assert(NbSubDomains);
   assert(subdomains[0].head && subdomains[0].head->link);
-             
+
 }
-  
+
 Triangle * Triangles::FindTriangleContening(const I2 & B,Icoor2 dete[3], Triangle *tstart) const
-{ // in: B 
+{ // in: B
   // out: t
   // out : dete[3]
   // t the triangle and s0,s1,s2 the 3 vertices of t
   // in dete[3] = { det(B,s1,s2) , det(s0,B,s2), det(s0,s1,B)}
-  // with det(a,b,c ) = -1 if one of 3 vertices a,b,c is NULL 
-  Triangle * t=0;	
+  // with det(a,b,c ) = -1 if one of 3 vertices a,b,c is NULL
+  Triangle * t=0;
   int j,jp,jn,jj;
-  if (tstart) 
+  if (tstart)
     t=tstart;
-  else 
+  else
    {
    assert(quadtree);
    Vertex *a = quadtree->NearestVertex(B.x,B.y) ;
-  
+
   if (! a || !a->t ) {
-    if (a) 
+    if (a)
       {cerr << " Attention PB TriangleConteningTheVertex  vertex number=" << Number(a) << endl;
        cerr  << "We forget a call to ReMakeTriangleContainingTheVertex" << endl;}
     cerr << " Pb with " << B << toR2(B) << endl;
     MeshError(7777);
   }
   assert(a>= vertices && a < vertices+nbv);
-#ifdef DRAWING1 
+#ifdef DRAWING1
   a->Draw();
-#endif 
+#endif
   //  int k=0;
    t = a->t;
   assert(t>= triangles && t < triangles+nbt);
-   
+
    }
   Icoor2  detop ;
-  int kkkk =0; // number of test triangle 
+  int kkkk =0; // number of test triangle
 
-  while ( t->det < 0) 
-    { // the initial triangles is outside  
+  while ( t->det < 0)
+    { // the initial triangles is outside
       int k0=(*t)(0) ?  ((  (*t)(1) ? ( (*t)(2) ? -1 : 2) : 1  )) : 0;
-      assert(k0>=0); // k0 the NULL  vertex 
+      assert(k0>=0); // k0 the NULL  vertex
       int k1=NextVertex[k0],k2=PreviousVertex[k0];
       dete[k0]=det(B,(*t)[k1],(*t)[k2]);
-      dete[k1]=dete[k2]=-1;     
-      if (dete[k0] > 0) // outside B 
-        return t; 
+      dete[k1]=dete[k2]=-1;
+      if (dete[k0] > 0) // outside B
+        return t;
       t = t->TriangleAdj(OppositeEdge[k0]);
       assert(kkkk++ < 2);
     }
 
   jj=0;
   detop = det(*(*t)(VerticesOfTriangularEdge[jj][0]),*(*t)(VerticesOfTriangularEdge[jj][1]),B);
- 
-  while(t->det  > 0 ) 
-    { 
-      assert( kkkk++ < 2000 ); 
+
+  while(t->det  > 0 )
+    {
+      assert( kkkk++ < 2000 );
       j= OppositeVertex[jj];
-      
+
 #ifdef DRAWING1
       t->Draw();
-#endif 
+#endif
       dete[j] = detop;  //det(*b,*s1,*s2);
       jn = NextVertex[j];
       jp = PreviousVertex[j];
       dete[jp]= det(*(*t)(j),*(*t)(jn),B);
       dete[jn] = t->det-dete[j] -dete[jp];
-      
+
 #ifdef DEBUG
       const Vertex * s0 = (*t)(0);
       const Vertex * s1 = (*t)(1);
@@ -5146,14 +5146,14 @@ Triangle * Triangles::FindTriangleContening(const I2 & B,Icoor2 dete[3], Triangl
 #endif
       // count the number k of  dete <0
       int k=0,ii[3];
-      if (dete[0] < 0 ) ii[k++]=0; 
+      if (dete[0] < 0 ) ii[k++]=0;
       if (dete[1] < 0 ) ii[k++]=1;
       if (dete[2] < 0 ) ii[k++]=2;
       // 0 => ok
       // 1 => go in way 1
       // 2 => two way go in way 1 or 2 randomly
-      
-      if (k==0) 
+
+      if (k==0)
 	break;
       if (k == 2 && BinaryRand())
 	Exchange(ii[0],ii[1]);
@@ -5166,10 +5166,10 @@ Triangle * Triangles::FindTriangleContening(const I2 & B,Icoor2 dete[3], Triangl
       detop = -dete[OppositeVertex[jj]];
       jj = j;
     }
-  
-  if (t->det<0) // outside triangle 
+
+  if (t->det<0) // outside triangle
     dete[0]=dete[1]=dete[2]=-1,dete[OppositeVertex[jj]]=detop;
-  //  NbOfTriangleSearchFind += kkkk;  
+  //  NbOfTriangleSearchFind += kkkk;
   return t;
 }
 
diff --git a/contrib/bamg/bamglib/MeshRead.cpp b/contrib/bamg/bamglib/MeshRead.cpp
index e23f9144f9bd02355e0e3d7468c34a2baa6bcf92..aa313d224bd8483a7b3ab7f95ed73ce4dfccedd2 100644
--- a/contrib/bamg/bamglib/MeshRead.cpp
+++ b/contrib/bamg/bamglib/MeshRead.cpp
@@ -1,26 +1,26 @@
 // -*- Mode : c++ -*-
 //
-// SUMMARY  :      
-// USAGE    :        
-// ORG      : 
+// SUMMARY  :
+// USAGE    :
+// ORG      :
 // AUTHOR   : Frederic Hecht
 // E-MAIL   : hecht@ann.jussieu.fr
 //
 
 /*
- 
+
  This file is part of Freefem++
- 
+
  Freefem++ is free software; you can redistribute it and/or modify
  it under the terms of the GNU Lesser General Public License as published by
  the Free Software Foundation; either version 2.1 of the License, or
  (at your option) any later version.
- 
+
  Freefem++  is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU Lesser General Public License for more details.
- 
+
  You should have received a copy of the GNU Lesser General Public License
  along with Freefem++; if not, write to the Free Software
  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
@@ -49,8 +49,8 @@ static const  Direction NoDirOfSearch=Direction();
 
 void Triangles::Read(MeshIstream & f_in,int Version,Real8 cutoffradian)
 {
-  Real8 hmin = HUGE_VAL;// the infinie value 
-  //  Real8 MaximalAngleOfCorner = 10*Pi/180;// 
+  Real8 hmin = HUGE_VAL;// the infinie value
+  //  Real8 MaximalAngleOfCorner = 10*Pi/180;//
   Int4 i;
   Int4 dim=0;
   Int4 hvertices =0;
@@ -60,8 +60,8 @@ void Triangles::Read(MeshIstream & f_in,int Version,Real8 cutoffradian)
     cout << "  -- ReadMesh " << f_in.CurrentFile  << " Version = " << Version << endl;
   int field=0;
   int showfield=0;
-  while (f_in.cm()) 
-    {  
+  while (f_in.cm())
+    {
       field=0;
       char  fieldname[256];
       if(f_in.eof()) break;
@@ -80,16 +80,16 @@ void Triangles::Read(MeshIstream & f_in,int Version,Real8 cutoffradian)
            assert(dim ==2);
          }
       else if  (!strcmp(fieldname,"Geometry"))
-	{ 
+	{
 	  char * fgeom ;
 	  f_in >> fgeom;
-	  //	  if (cutoffradian>=0) => bug if change edit the file geometry 
+	  //	  if (cutoffradian>=0) => bug if change edit the file geometry
 	  //  Gh.MaximalAngleOfCorner = cutoffradian;
 	  if (strlen(fgeom))
 	      Gh.ReadGeometry(fgeom);
-	  else 
-	    { 
-	      // include geometry 
+	  else
+	    {
+	      // include geometry
 	      f_in.cm();
 	      Gh.ReadGeometry(f_in,fgeom);
 	    }
@@ -111,7 +111,7 @@ void Triangles::Read(MeshIstream & f_in,int Version,Real8 cutoffradian)
 	    vertices[i].m = Metric(h);}
          }
       else if (!strcmp(fieldname,"Vertices"))
-         { 
+         {
            assert(dim ==2);
            f_in >>   nbv ;
 	   if(verbosity>3)
@@ -119,25 +119,25 @@ void Triangles::Read(MeshIstream & f_in,int Version,Real8 cutoffradian)
 	   nbvx=nbv;
 	   vertices=new Vertex[nbvx];
 	   assert(vertices);
-	   ordre=new Vertex* [nbvx];
+	   ordre=new Vertex* [this->nbvx];
 	   assert(ordre);
-	   
+
 	   nbiv = nbv;
            for (i=0;i<nbv;i++) {
-             f_in >> 
-	       	 	 vertices[i].r.x >>  
-	           vertices[i].r.y >> 
+             f_in >>
+	       	 	 vertices[i].r.x >>
+	           vertices[i].r.y >>
              vertices[i].ReferenceNumber  ;
              vertices[i].DirOfSearch =NoDirOfSearch;
 	           vertices[i].m=M1;
 	     vertices[i].color =0;}
-	   nbtx =  2*nbv-2; // for filling The Holes and quadrilaterals 
+	   nbtx =  2*nbv-2; // for filling The Holes and quadrilaterals
 	   triangles =new Triangle[nbtx];
 	   assert(triangles);
 	   nbt =0;
          }
       else if (!strcmp(fieldname,"Triangles"))
-	{ 
+	{
 	  if (dim !=2)
 	    cerr << "ReadMesh: Dimension <> 2" <<endl , f_in.ShowIoErr(0);
 	  if(! vertices || !triangles  || !nbv )
@@ -150,9 +150,9 @@ void Triangles::Read(MeshIstream & f_in,int Version,Real8 cutoffradian)
 	  if (nbt+NbOfTria >= nbtx)
 	    cerr << "ReadMesh: We must have 2*NbOfQuad + NbOfTria  = "
 		 << nbt + NbOfTria<<"  < 2*nbv-2 ="  << nbtx << endl,
-	      f_in.ShowIoErr(0); 
+	      f_in.ShowIoErr(0);
 	  //	  begintria = nbt;
-	  for (i=0;i<NbOfTria;i++)  
+	  for (i=0;i<NbOfTria;i++)
 	    {
 	      Int4 i1,i2,i3,iref;
 	      Triangle & t = triangles[nbt++];
@@ -163,7 +163,7 @@ void Triangles::Read(MeshIstream & f_in,int Version,Real8 cutoffradian)
 	  // endtria=nbt;
 	}
       else if (!strcmp(fieldname,"Quadrilaterals"))
-        { 
+        {
 
 	  if (dim !=2)
 	    cerr << "ReadMesh: Dimension <> 2" <<endl , f_in.ShowIoErr(0);
@@ -178,8 +178,8 @@ void Triangles::Read(MeshIstream & f_in,int Version,Real8 cutoffradian)
 		 << nbt + 2*NbOfQuad <<"  < 2*nbv-2 ="  << nbtx << endl,
 	      f_in.ShowIoErr(0);
 	  //  beginquad=nbt;
-	  for (i=0;i<NbOfQuad;i++)  
-	    { 
+	  for (i=0;i<NbOfQuad;i++)
+	    {
 	      Int4 i1,i2,i3,i4,iref;
 	      Triangle & t1 = triangles[nbt++];
 	      Triangle & t2 = triangles[nbt++];
@@ -188,26 +188,26 @@ void Triangles::Read(MeshIstream & f_in,int Version,Real8 cutoffradian)
 	      t1.color=iref;
 	      t2 = Triangle(this,i3-1,i4-1,i1-1);
 	      t2.color=iref;
-	      t1.SetHidden(OppositeEdge[1]); // two time  because the adj was not created 
-	      t2.SetHidden(OppositeEdge[1]); 
+	      t1.SetHidden(OppositeEdge[1]); // two time  because the adj was not created
+	      t2.SetHidden(OppositeEdge[1]);
 	    }
 	  // endquad=nbt;
 	}
       else if (!strcmp(fieldname,"VertexOnGeometricVertex"))
-	{ 
+	{
            f_in  >> NbVerticesOnGeomVertex ;
  	   if(verbosity>5)
 	     cout << "   NbVerticesOnGeomVertex = "   << NbVerticesOnGeomVertex << endl
 		  << " Gh.vertices " << Gh.vertices << endl;
-	   if( NbVerticesOnGeomVertex) 
+	   if( NbVerticesOnGeomVertex)
 	     {
 	       VerticesOnGeomVertex= new  VertexOnGeom[NbVerticesOnGeomVertex] ;
 	       if(verbosity>7)
 		 cout << "   VerticesOnGeomVertex = " << VerticesOnGeomVertex << endl
 		      << "   Gh.vertices " << Gh.vertices << endl;
 	       assert(VerticesOnGeomVertex);
-	       for (Int4 i0=0;i0<NbVerticesOnGeomVertex;i0++)  
-		 { 
+	       for (Int4 i0=0;i0<NbVerticesOnGeomVertex;i0++)
+		 {
 		   Int4  i1,i2;
 		   //VertexOnGeom & v =VerticesOnGeomVertex[i0];
 		   f_in >>  i1 >> i2 ;
@@ -216,16 +216,16 @@ void Triangles::Read(MeshIstream & f_in,int Version,Real8 cutoffradian)
 	     }
 	 }
       else if (!strcmp(fieldname,"VertexOnGeometricEdge"))
-         { 
+         {
            f_in >>  NbVerticesOnGeomEdge ;
  	   if(verbosity>3)
 	     cout << "   NbVerticesOnGeomEdge = " << NbVerticesOnGeomEdge << endl;
-	   if(NbVerticesOnGeomEdge) 
+	   if(NbVerticesOnGeomEdge)
 	     {
 	       VerticesOnGeomEdge= new  VertexOnGeom[NbVerticesOnGeomEdge] ;
 	       assert(VerticesOnGeomEdge);
-	       for (Int4 i0=0;i0<NbVerticesOnGeomEdge;i0++)  
-		 { 
+	       for (Int4 i0=0;i0<NbVerticesOnGeomEdge;i0++)
+		 {
 		   Int4  i1,i2;
 		   Real8 s;
 		   //VertexOnGeom & v =VerticesOnGeomVertex[i0];
@@ -235,7 +235,7 @@ void Triangles::Read(MeshIstream & f_in,int Version,Real8 cutoffradian)
 	     }
          }
       else if (!strcmp(fieldname,"Edges"))
-	{ 
+	{
           Int4 i,j, i1,i2;
           f_in >>  nbe ;
           edges = new Edge[nbe];
@@ -243,16 +243,16 @@ void Triangles::Read(MeshIstream & f_in,int Version,Real8 cutoffradian)
 	    cout << "     Record Edges: Nb of Edge " << nbe << " edges " <<  edges << endl;
           assert(edges);
 	  Real4 *len =0;
-          if (!hvertices) 
+          if (!hvertices)
 	    {
 	      len = new Real4[nbv];
 	      for(i=0;i<nbv;i++)
 		len[i]=0;
 	    }
-          for (i=0;i<nbe;i++) 
+          for (i=0;i<nbe;i++)
 	    {
 	      f_in  >> i1  >> i2  >> edges[i].ref ;
-                 
+
 	      assert(i1 >0 && i2 >0);
 	      assert(i1 <= nbv && i2 <= nbv);
 	      i1--;
@@ -263,7 +263,7 @@ void Triangles::Read(MeshIstream & f_in,int Version,Real8 cutoffradian)
 	      edges[i].adj[1]=0;
 
 	      R2 x12 = vertices[i2].r-vertices[i1].r;
-	      Real8 l12=sqrt( (x12,x12));        
+	      Real8 l12=sqrt( (x12,x12));
 	      if (!hvertices) {
 		vertices[i1].color++;
 		vertices[i2].color++;
@@ -271,24 +271,24 @@ void Triangles::Read(MeshIstream & f_in,int Version,Real8 cutoffradian)
 		len[i2] += l12;}
 	      hmin = Min(hmin,l12);
 	    }
-	  // definition  the default of the given mesh size 
-          if (!hvertices) 
+	  // definition  the default of the given mesh size
+          if (!hvertices)
 	    {
-            for (i=0;i<nbv;i++) 
-	      if (vertices[i].color > 0) 
+            for (i=0;i<nbv;i++)
+	      if (vertices[i].color > 0)
 		vertices[i].m=  Metric(len[i] /(Real4) vertices[i].color);
-	      else 
+	      else
 		vertices[i].m=  Metric(hmin);
 	      delete [] len;
 	    }
 	  if(verbosity>5)
 	    cout << "     hmin " << hmin << endl;
-	  // construction of edges[].adj 
-	    for (i=0;i<nbv;i++) 
+	  // construction of edges[].adj
+	    for (i=0;i<nbv;i++)
 	      vertices[i].color = (vertices[i].color ==2) ? -1 : -2;
 	    for (i=0;i<nbe;i++)
-	      for (j=0;j<2;j++) 
-		{ 
+	      for (j=0;j<2;j++)
+		{
 		  Vertex *v=edges[i].v[j];
 		  Int4 i0=v->color,j0;
 		  if(i0==-1)
@@ -306,23 +306,23 @@ void Triangles::Read(MeshIstream & f_in,int Version,Real8 cutoffradian)
 		}
 
 	}
-	
+
 /*   ne peut pas marche car il n'y a pas de flag dans les aretes du maillages
        else if (!strcmp(fieldname,"RequiredEdges"))
-        { 
+        {
           int i,j,n;
           f_in  >> n ;
 
-          for (i=0;i<n;i++) {     
+          for (i=0;i<n;i++) {
             f_in  >>  j ;
             assert( j <= nbe );
             assert( j > 0 );
             j--;
             edges[j].SetRequired();  }
       }
-*/	
+*/
       else if (!strcmp(fieldname,"EdgeOnGeometricEdge"))
-	{ 
+	{
 	  assert(edges);
 	  int i1,i2,i,j;
 	  f_in >> i2 ;
@@ -339,15 +339,15 @@ void Triangles::Read(MeshIstream & f_in,int Version,Real8 cutoffradian)
 		  cerr << " Fatal error in file " << name << " line " << f_in.LineNumber << endl;
 		  MeshError(1);
 		}
-		
-		
+
+
 	      edges[i-1].on = Gh.edges + j-1;
 	    }
 	  //	  cout << "end EdgeOnGeometricEdge" << endl;
 	}
       else if (!strcmp(fieldname,"SubDomain") || !strcmp(fieldname,"SubDomainFromMesh") )
-	{ 
-	  
+	{
+
 	  f_in >> NbSubDomains ;
 	  subdomains = new SubDomain [ NbSubDomains ];
 	    for (i=0;i< NbSubDomains;i++)
@@ -356,27 +356,27 @@ void Triangles::Read(MeshIstream & f_in,int Version,Real8 cutoffradian)
 		assert (i3==3);
 		head --;
 		assert(head < nbt && head >=0);
-		subdomains[i].head = triangles+head;		
+		subdomains[i].head = triangles+head;
 	      }
 	}
       else
 	{ // unkown field
 	  field = ++showfield;
-	  if(showfield==1) // just to show one time 
+	  if(showfield==1) // just to show one time
 	    if (verbosity>5)
 	      cout << "     Warning we skip the field " << fieldname << " at line " << f_in.LineNumber << endl;
 	}
-      showfield=field; // just to show one time 
+      showfield=field; // just to show one time
     }
-    
+
     if (ifgeom==0)
       {
 	if (verbosity)
-	  cout  << " ## Warning: Mesh without geometry we construct a geometry (theta =" 
+	  cout  << " ## Warning: Mesh without geometry we construct a geometry (theta ="
 		<< cutoffradian*180/Pi << " degres )" << endl;
-	ConsGeometry(cutoffradian);	
+	ConsGeometry(cutoffradian);
 	Gh.AfterRead();
-      }	  
+      }
 }
 
 
@@ -388,41 +388,41 @@ void Triangles::Read_am_fmt(MeshIstream & f_in)
 
   if (verbosity>1)
     cout << "  -- ReadMesh .am_fmt file " <<  f_in.CurrentFile  << endl;
-   	
+
      Int4 i;
      f_in.cm() >> nbv >> nbt ;
      if (verbosity>3)
        cout << "    nbv = " << nbv  << " nbt = " << nbt << endl;
-     f_in.eol() ;// 
+     f_in.eol() ;//
      nbvx = nbv;
-     nbtx =  2*nbv-2; // for filling The Holes and quadrilaterals 
+     nbtx =  2*nbv-2; // for filling The Holes and quadrilaterals
      triangles =new Triangle[nbtx];
      assert(triangles);
      vertices=new Vertex[nbvx];
-     ordre=new Vertex* [nbvx];
-     
+     ordre=new Vertex* [this->nbvx];
+
      for (     i=0;i<nbt;i++)
        {
 	 Int4 i1,i2,i3;
 	 f_in >>  i1 >>  i2 >>   i3 ;
-	 triangles[i]  = Triangle(this,i1-1,i2-1,i3-1);	 
+	 triangles[i]  = Triangle(this,i1-1,i2-1,i3-1);
        }
-      f_in.eol() ;// 
-      
+      f_in.eol() ;//
+
       for ( i=0;i<nbv;i++)
 	f_in >> vertices[i].r.x >>   vertices[i].r.y,
 	  vertices[i].m = M1,vertices[i].DirOfSearch =NoDirOfSearch;
 
-      f_in.eol() ;// 
-      
-      for ( i=0;i<nbt;i++)  
+      f_in.eol() ;//
+
+      for ( i=0;i<nbt;i++)
 	f_in >> triangles[i].color;
-      f_in.eol() ;// 
-      
-      for ( i=0;i<nbv;i++)  
+      f_in.eol() ;//
+
+      for ( i=0;i<nbv;i++)
 	     f_in >> vertices[i].ReferenceNumber;
-      
-      
+
+
 }
 
 ////////////////////////
@@ -431,8 +431,8 @@ void  Triangles::Read_am(MeshIstream &ff)
 {
   if (verbosity>1)
     cout << "  -- ReadMesh .am_fmt file " <<  ff.CurrentFile  << endl;
-    Metric M1(1);	
-  
+    Metric M1(1);
+
   IFortranUnFormattedFile f_in(ff);
 
   Int4  l=f_in.Record();
@@ -442,33 +442,33 @@ void  Triangles::Read_am(MeshIstream &ff)
   assert((size_t) l==nbt*sizeof(long)*4 + nbv*(2*sizeof(float)+sizeof(long)));
   if (verbosity>3)
     cout << "    nbv = " << nbv  << " nbt = " << nbt << endl;
-  
+
   nbvx = nbv;
-  nbtx =  2*nbv-2; // for filling The Holes and quadrilaterals 
+  nbtx =  2*nbv-2; // for filling The Holes and quadrilaterals
   triangles =new Triangle[nbtx];
   assert(triangles);
   vertices=new Vertex[nbvx];
-  ordre=new Vertex* [nbvx];
-  
+  ordre=new Vertex* [this->nbvx];
+
 
   Int4 i;
   for (     i=0;i<nbt;i++) {
     long i1,i2,i3;
     f_in >>  i1 >>  i2 >>   i3 ;
     triangles[i]  = Triangle(this,i1-1,i2-1,i3-1); }
-  
+
   for ( i=0;i<nbv;i++) {
     float x,y;
     f_in >> x >> y;
     vertices[i].r.x =x;
     vertices[i].r.y=y;
     vertices[i].m=M1;}
-  
+
   for ( i=0;i<nbt;i++) {
     long i;
     f_in >> i;
     triangles[i].color=i;}
-  
+
   for ( i=0;i<nbv;i++) {
     long i;
     f_in >> i;
@@ -483,10 +483,10 @@ void  Triangles::Read_nopo(MeshIstream & ff)
  if (verbosity>1)
     cout << "  -- ReadMesh .nopo file " <<  ff.CurrentFile  << endl;
  IFortranUnFormattedFile f_in(ff);
- 
- 
+
+
  Int4  l,i,j;
- l=f_in.Record(); 
+ l=f_in.Record();
  l=f_in.Record();
  f_in >> i;
  assert(i==32);
@@ -512,7 +512,7 @@ void  Triangles::Read_nopo(MeshIstream & ff)
    }
  if(verbosity>2)
    cout << "    nb de tableau associe : " << ntacm << " niveau =" << niveau << endl;
- 
+
  for (i=0;i<ntacm;i++)
    f_in.Record();
 
@@ -530,8 +530,8 @@ void  Triangles::Read_nopo(MeshIstream & ff)
  Int4 np = nop2[21];
  // Int4 nef = nop2[13];
  Metric M1(1);
- if(verbosity>2) 
-   cout << "    ndim = " << ndim << " ncopnp= " << ncopnp << " ne = " << ne 
+ if(verbosity>2)
+   cout << "    ndim = " << ndim << " ncopnp= " << ncopnp << " ne = " << ne
 	<< "    ntri = " << ntria << " nquad = " << nquad << " np = " << np << endl;
  nbv = np;
  nbt = 2*nquad + ntria;
@@ -543,18 +543,18 @@ void  Triangles::Read_nopo(MeshIstream & ff)
  if( nop2[24]>=0)  f_in.Record();
   NbOfQuad = nquad;
   nbvx = nbv;
-  nbtx =  2*nbv-2; // for filling The Holes and quadrilaterals 
+  nbtx =  2*nbv-2; // for filling The Holes and quadrilaterals
   triangles =new Triangle[nbtx];
   assert(triangles);
   vertices=new Vertex[nbvx];
-  ordre=new Vertex* [nbvx];
+  ordre=new Vertex* [this->nbvx];
 
 
  f_in >> l;
 
   if(verbosity>9)
     cout << " Read cnop4 nb of float  " << l << endl;
-  
+
   assert(l==2*np);
   for (i=0;i<np;i++)
     {  float x,y;
@@ -573,7 +573,7 @@ void  Triangles::Read_nopo(MeshIstream & ff)
  Int4 k=0;
  Int4 nbe4 =  3*ntria + 4*nquad;
  // cout << " nbv = " << nbv << " nbe4 " << nbe4 << endl;
- SetOfEdges4 * edge4= new SetOfEdges4(nbe4,nbv); 
+ SetOfEdges4 * edge4= new SetOfEdges4(nbe4,nbv);
  Int4 * refe = new Int4[nbe4];
  Int4 kr =0;
  for (i=0;i<ne;i++)
@@ -582,42 +582,42 @@ void  Triangles::Read_nopo(MeshIstream & ff)
      Int4 np[4],rv[4],re[4];
      Int4 ncge,nmae,ndsde,npo;
      f_in >> ncge >> nmae >> ndsde >> npo ;
-     //cout << " element " << i << " " << ncge << " "  
+     //cout << " element " << i << " " << ncge << " "
      // << nmae <<" " <<  npo << endl;
      if (ncge != 3 && ncge != 4)
        {
-	 cerr << " read nopo type element[" << i << "] =" 
+	 cerr << " read nopo type element[" << i << "] ="
 	      << ncge << " not 3 or 4 " << endl;
 	 MeshError(115);
        }
      if (npo != 3 && npo != 4)
        {
-	 cerr << " read nopo element[" << i << "] npo = "  
+	 cerr << " read nopo element[" << i << "] npo = "
 	      << npo << " not 3 or 4 " << endl;
 	 MeshError(115);
        }
-     
+
      for( j=0;j<npo;j++)
        {f_in >>np[j];np[j]--;}
-     
-     if (ncopnp !=1) 
+
+     if (ncopnp !=1)
        {
 	 f_in >> npo;
 	 if (npo != 3 || npo != 4)
 	   {
-	     cerr << " read nopo type element[" << i << "]= "  
+	     cerr << " read nopo type element[" << i << "]= "
 		  << ncge << " not 3 or 4 " << endl;
 	     MeshError(115);
 	   }
-	 
+
 	 for(j=0;j<npo;j++)
 	   {f_in >>np[j];np[j]--;}
-	 
+
        }
-     if (nmae>0) 
+     if (nmae>0)
        {
-	 Int4  ining; // no ref 
-	 
+	 Int4  ining; // no ref
+
 	 f_in>>ining;
 	 if (ining==1)
 	   MeshError(116);
@@ -626,12 +626,12 @@ void  Triangles::Read_nopo(MeshIstream & ff)
 	     f_in >>re[j];
 	 for (j=0;j<npo;j++)
 	   f_in >>rv[j];
-	 
-	 
+
+
 	 // set the ref on vertex and the shift np of -1 to start at 0
 	 for (j=0;j<npo;j++)
 	   vertices[np[j]].ReferenceNumber = rv[j];
-	 
+
 	 if (ining==2)
 	   for (j=0;j<npo;j++)
 	     if (re[j])
@@ -643,21 +643,21 @@ void  Triangles::Read_nopo(MeshIstream & ff)
 		 refe[edge4->addtrie(i0,i1)]=re[j];
 	       }
        }
-     
-     if (npo==3) 
-       { // triangles 
-	 triangles[k]  = Triangle(this,np[0],np[1],np[2]); 
+
+     if (npo==3)
+       { // triangles
+	 triangles[k]  = Triangle(this,np[0],np[1],np[2]);
 	 triangles[k].color = ndsde;
 	 k++;
        }
      else if (npo==4)
-       { // quad 
+       { // quad
 	 Triangle & t1 = triangles[k++];
 	 Triangle & t2 = triangles[k++];
 	 t1 = Triangle(this,np[0],np[1],np[2]);
 	 t2 = Triangle(this,np[2],np[3],np[0]);
-	 t1.SetHidden(OppositeEdge[1]); // two time  because the adj was not created 
-	 t2.SetHidden(OppositeEdge[1]); 
+	 t1.SetHidden(OppositeEdge[1]); // two time  because the adj was not created
+	 t2.SetHidden(OppositeEdge[1]);
 	 t1.color = ndsde;
 	 t2.color = ndsde;
        }
@@ -666,8 +666,8 @@ void  Triangles::Read_nopo(MeshIstream & ff)
 	 cerr << " read nopo type element =" << npo << " not 3 or 4 " << endl;
 	 MeshError(114);
        }
-     
-     
+
+
    }
  // cout << k << " == " << nbt << endl;
  assert(k==nbt);
@@ -695,37 +695,37 @@ void  Triangles::Read_nopo(MeshIstream & ff)
 }
   void  Triangles::Read_ftq(MeshIstream & f_in)
 {
-  //  
+  //
   if (verbosity>1)
     cout << "  -- ReadMesh .ftq file " <<  f_in.CurrentFile  << endl;
-  
+
   Int4 i,ne,nt,nq;
   f_in.cm() >> nbv >> ne >> nt >> nq ;
   if (verbosity>3)
     cout << "    nbv = " << nbv  << " nbtra = " << nt << " nbquad = " << nq << endl;
   nbt = nt+2*nq;
-  
+
 
   nbvx = nbv;
-  nbtx =  2*nbv-2; // for filling The Holes and quadrilaterals 
+  nbtx =  2*nbv-2; // for filling The Holes and quadrilaterals
   triangles =new Triangle[nbtx];
   assert(triangles);
   vertices=new Vertex[nbvx];
-  ordre=new Vertex* [nbvx];
+  ordre=new Vertex* [this->nbvx];
   Int4 k=0;
-  
-  for ( i=0;i<ne;i++) 
+
+  for ( i=0;i<ne;i++)
     {
       long ii,i1,i2,i3,i4,ref;
       f_in >>  ii;
-	if (ii==3) 
-	  { // triangles 
+	if (ii==3)
+	  { // triangles
 	    f_in >> i1>>  i2 >>   i3 >> ref ;
-	    triangles[k]  = Triangle(this,i1-1,i2-1,i3-1); 
+	    triangles[k]  = Triangle(this,i1-1,i2-1,i3-1);
 	    triangles[k++].color = ref;
 	  }
 	else if (ii==4)
-	  { // quad 
+	  { // quad
 	    f_in >> i1>>  i2 >>   i3 >> i4 >> ref ;
 	    Triangle & t1 = triangles[k++];
 	    Triangle & t2 = triangles[k++];
@@ -733,8 +733,8 @@ void  Triangles::Read_nopo(MeshIstream & ff)
 	    t1.color=ref;
 	    t2 = Triangle(this,i3-1,i4-1,i1-1);
 	    t2.color=ref;
-	    t1.SetHidden(OppositeEdge[1]); // two time  because the adj was not created 
-	    t2.SetHidden(OppositeEdge[1]); 	  
+	    t1.SetHidden(OppositeEdge[1]); // two time  because the adj was not created
+	    t2.SetHidden(OppositeEdge[1]);
 	  }
 	else
 	  {
@@ -760,35 +760,35 @@ void  Triangles::Read_msh(MeshIstream &f_in)
     Metric M1(1.);
   if (verbosity>1)
     cout << "  -- ReadMesh .msh file " <<  f_in.CurrentFile  << endl;
-   	
+
      Int4 i;
      f_in.cm() >> nbv >> nbt ;
      while (f_in.in.peek()==' ')
          f_in.in.get();
-     if(isdigit(f_in.in.peek())) 
+     if(isdigit(f_in.in.peek()))
        f_in >> nbe;
      if (verbosity>3)
        cout << "    nbv = " << nbv  << " nbt = " << nbt << " nbe = " << nbe << endl;
      nbvx = nbv;
-     nbtx =  2*nbv-2; // for filling The Holes and quadrilaterals 
+     nbtx =  2*nbv-2; // for filling The Holes and quadrilaterals
      triangles =new Triangle[nbtx];
      assert(triangles);
      vertices=new Vertex[nbvx];
-     ordre=new Vertex* [nbvx];
+     ordre=new Vertex* [this->nbvx];
       edges = new Edge[nbe];
      for ( i=0;i<nbv;i++)
 	{
 	 f_in >> vertices[i].r.x >>   vertices[i].r.y >> vertices[i].ReferenceNumber;
 	    vertices[i].on=0;
 	    vertices[i].m=M1;
-         //if(vertices[i].ReferenceNumber>NbRef)	NbRef=vertices[i].ReferenceNumber;  
+         //if(vertices[i].ReferenceNumber>NbRef)	NbRef=vertices[i].ReferenceNumber;
   	}
      for (     i=0;i<nbt;i++)
        {
 	 Int4 i1,i2,i3,r;
 	 f_in >>  i1 >>  i2 >>   i3 >> r;
 	 triangles[i]  = Triangle(this,i1-1,i2-1,i3-1);
-	 triangles[i].color = r;	 
+	 triangles[i].color = r;
        }
      for (i=0;i<nbe;i++)
        {
@@ -801,7 +801,7 @@ void  Triangles::Read_msh(MeshIstream &f_in)
 	      edges[i].ref = r;
 	      edges[i].on=0;
        }
-      
+
 }
 
 //////////////////////////////////////////////////
@@ -811,18 +811,18 @@ void  Triangles::Read_amdba(MeshIstream &f_in )
   Metric M1(1);
   if (verbosity>1)
     cout << "  -- ReadMesh .amdba file " <<  f_in.CurrentFile  << endl;
-   	
+
      Int4 i;
      f_in.cm() >> nbv >> nbt ;
      //    if (verbosity>3)
        cout << "    nbv = " << nbv  << " nbt = " << nbt << endl;
-     f_in.eol() ;// 
+     f_in.eol() ;//
      nbvx = nbv;
-     nbtx =  2*nbv-2; // for filling The Holes and quadrilaterals 
+     nbtx =  2*nbv-2; // for filling The Holes and quadrilaterals
      triangles =new Triangle[nbtx];
      assert(triangles);
      vertices=new Vertex[nbvx];
-     ordre=new Vertex* [nbvx];
+     ordre=new Vertex* [this->nbvx];
      Int4 j;
       for ( i=0;i<nbv;i++)
 	{
@@ -833,7 +833,7 @@ void  Triangles::Read_amdba(MeshIstream &f_in )
 	   vertices[j].m=M1;
 	   vertices[j].DirOfSearch=NoDirOfSearch;
 	}
-     
+
       for (     i=0;i<nbt;i++)
        {
 	 Int4 i1,i2,i3,ref;
@@ -844,18 +844,18 @@ void  Triangles::Read_amdba(MeshIstream &f_in )
 	 triangles[j]  = Triangle(this,i1-1,i2-1,i3-1);
 	 triangles[j].color =ref;
        }
-      f_in.eol() ;// 
-      
+      f_in.eol() ;//
+
   // cerr << " a faire " << endl;
   //MeshError(888);
 }
 
 
-Triangles::Triangles(const char * filename,Real8 cutoffradian) 
+Triangles::Triangles(const char * filename,Real8 cutoffradian)
 : Gh(*(new Geometry())), BTh(*this)
-{ 
+{
 #ifdef DRAWING1
-   if (!withrgraphique) {initgraphique();withrgraphique=true;}   
+   if (!withrgraphique) {initgraphique();withrgraphique=true;}
 #endif
 
   //  Int4 beginquad=0,begintria=0;
@@ -877,36 +877,36 @@ Triangles::Triangles(const char * filename,Real8 cutoffradian)
   Int4 inbvx =0;
   PreInit(inbvx,cname);
   OnDisk = 1;
-  //  allocGeometry = &Gh; // after Preinit ; 
+  //  allocGeometry = &Gh; // after Preinit ;
 
   MeshIstream f_in (filename);
-  
+
   if (f_in.IsString("MeshVersionFormatted"))
     {
       int version ;
       f_in >> version ;
       Read(f_in,version,cutoffradian);
     }
-  else {     
+  else {
     if (am_fmt) Read_am_fmt(f_in);
     else if (am) Read_am(f_in);
     else if (amdba) Read_amdba(f_in);
     else if (msh) Read_msh(f_in);
     else if (nopo) Read_nopo(f_in);
     else if (ftq) Read_ftq(f_in);
-    else 
-      { 
+    else
+      {
 	cerr << " Unknown type mesh " << filename << endl;
 	MeshError(2);
       }
       ConsGeometry(cutoffradian);
-      Gh.AfterRead();    
+      Gh.AfterRead();
   }
 
   SetIntCoor();
   FillHoleInMesh();
   // Make the quad ---
-   
+
 }
 
 void Geometry::ReadGeometry(const char * filename)
@@ -920,7 +920,7 @@ void Geometry::ReadGeometry(const char * filename)
 
 
 
-void Geometry::ReadGeometry(MeshIstream & f_in,const char * filename)  
+void Geometry::ReadGeometry(MeshIstream & f_in,const char * filename)
 {
   if(verbosity>1)
     cout << "  -- ReadGeometry " << filename << endl;
@@ -931,8 +931,8 @@ void Geometry::ReadGeometry(MeshIstream & f_in,const char * filename)
  // BeginOfCurve=0;
   name=new char [strlen(filename)+1];
   strcpy(name,filename);
-  Real8 Hmin = HUGE_VAL;// the infinie value 
-//  Real8 MaximalAngleOfCorner = 10*Pi/180; ; 
+  Real8 Hmin = HUGE_VAL;// the infinie value
+//  Real8 MaximalAngleOfCorner = 10*Pi/180; ;
   Int4 hvertices =0;
   Int4 i;
   Int4 Version,dim=0;
@@ -940,10 +940,10 @@ void Geometry::ReadGeometry(MeshIstream & f_in,const char * filename)
   int showfield=0;
   int NbErr=0;
 
-  while (f_in.cm()) 
-    { 
+  while (f_in.cm())
+    {
       field=0;
-      // warning ruse for on allocate fiedname at each time 
+      // warning ruse for on allocate fiedname at each time
       char fieldname[256];
       f_in.cm() >> fieldname ;
       f_in.err();
@@ -958,22 +958,22 @@ void Geometry::ReadGeometry(MeshIstream & f_in,const char * filename)
       else if (!strcmp(fieldname,"Dimension"))
         {
           f_in   >>  dim ;
-	  if(verbosity>5) 
-	    cout << "     Geom Record Dimension dim = " << dim << endl;        
+	  if(verbosity>5)
+	    cout << "     Geom Record Dimension dim = " << dim << endl;
           assert(dim ==2);
          }
        else if (!strcmp(fieldname,"hVertices"))
-         { 
+         {
 	   if (nbv <=0) {
 	     cerr<<"Error: the field Vertex is not found before hVertices " << filename<<endl;
-	     NbErr++;}       
-	   if(verbosity>5) 
+	     NbErr++;}
+	   if(verbosity>5)
 	    cout << "     Geom Record hVertices nbv=" << nbv <<  endl;
 	   hvertices =1;
-           for (i=0;i< nbv;i++) 
+           for (i=0;i< nbv;i++)
 	     {
 	       Real4 h;
-	       f_in  >>  h ; 
+	       f_in  >>  h ;
 	       vertices[i].m = Metric(h);
 	     }
 	 }
@@ -981,13 +981,13 @@ void Geometry::ReadGeometry(MeshIstream & f_in,const char * filename)
          { hvertices =1;
 	   if (nbv <=0) {
 	     cerr<<"Error: the field Vertex is not found before MetricVertices " << filename<<endl;
-	     NbErr++;}       
-           if(verbosity>5) 
+	     NbErr++;}
+           if(verbosity>5)
 	     cout << "     Geom Record MetricVertices nbv =" << nbv <<  endl;
-           for (i=0;i< nbv;i++) 
+           for (i=0;i< nbv;i++)
 	     {
 	       Real4 a11,a21,a22;
-	       f_in  >>  a11 >> a21 >> a22  ; 
+	       f_in  >>  a11 >> a21 >> a22  ;
 	       vertices[i].m = Metric(a11,a21,a22);
 	     }
 	 }
@@ -995,26 +995,26 @@ void Geometry::ReadGeometry(MeshIstream & f_in,const char * filename)
          { hvertices =1;
 	   if (nbv <=0) {
 	     cerr<<"Error: the field Vertex is not found before h1h2VpVertices " << filename<<endl;
-	     NbErr++;}       
-           if(verbosity>5) 
+	     NbErr++;}
+           if(verbosity>5)
 	     cout << "     Geom Record h1h2VpVertices nbv=" << nbv << endl;
 
-           for (i=0;i< nbv;i++) 
+           for (i=0;i< nbv;i++)
 	     {
 	       Real4 h1,h2,v1,v2;
-	       f_in  >> h1 >> h2 >>v1 >>v2 ; 
+	       f_in  >> h1 >> h2 >>v1 >>v2 ;
 	       vertices[i].m = Metric(MatVVP2x2(1/(h1*h1),1/(h2*h2),D2(v1,v2)));
 	     }
 	 }
       else if (!strcmp(fieldname,"Vertices"))
-        { 
+        {
           assert(dim ==2);
           f_in   >>  nbv ;
 	  //          if(LineError) break;
           nbvx = nbv;
-          
+
           vertices = new GeometricalVertex[nbvx];
-	  if(verbosity>5) 
+	  if(verbosity>5)
 	    cout << "     Geom Record Vertices nbv = " << nbv << "vertices = " << vertices<<endl;
           assert(nbvx >= nbv);
           nbiv = nbv;
@@ -1038,21 +1038,21 @@ void Geometry::ReadGeometry(MeshIstream & f_in,const char * filename)
 	      pmax.x = Max(pmax.x,vertices[i].r.x);
 	      pmax.y = Max(pmax.y,vertices[i].r.y);
 	    }
-	    
+
 	      R2 DD05 = (pmax-pmin)*0.05;
 	      pmin -=  DD05;
 	      pmax +=  DD05;
-	    
+
 	    coefIcoor= (MaxICoor)/(Max(pmax.x-pmin.x,pmax.y-pmin.y));
 	    assert(coefIcoor >0);
 	    if (verbosity>5) {
 	      cout << "     Geom: min="<< pmin << "max ="<< pmax << " hmin = " << MinimalHmin() <<  endl;}
         }
       else if(!strcmp(fieldname,"MaximalAngleOfCorner")||!strcmp(fieldname,"AngleOfCornerBound"))
-        {         
+        {
           f_in >> MaximalAngleOfCorner;
-              
-	  if(verbosity>5) 
+
+	  if(verbosity>5)
 	    cout << "     Geom Record MaximalAngleOfCorner " << MaximalAngleOfCorner <<endl;
           MaximalAngleOfCorner *= Pi/180;
         }
@@ -1060,30 +1060,30 @@ void Geometry::ReadGeometry(MeshIstream & f_in,const char * filename)
         {
 	  if (nbv <=0) {
 	    cerr<<"Error: the field edges is not found before MetricVertices " << filename<<endl;
-	    NbErr++;}   
-	  else 
+	    NbErr++;}
+	  else
 	    {
 	      int i1,i2;
 	      R2 zero2(0,0);
 	      f_in   >>  nbe ;
-	      
+
 	      edges = new GeometricalEdge[nbe];
-	      if(verbosity>5) 
+	      if(verbosity>5)
 		cout << "     Record Edges: Nb of Edge " << nbe <<endl;
 	      assert(edges);
-	      assert (nbv >0); 
+	      assert (nbv >0);
 	      Real4 *len =0;
-	      if (!hvertices) 
+	      if (!hvertices)
 		{
 		  len = new Real4[nbv];
 		  for(i=0;i<nbv;i++)
 		    len[i]=0;
 		}
-	      
-	      for (i=0;i<nbe;i++) 
+
+	      for (i=0;i<nbe;i++)
 		{
 		  f_in  >> i1   >> i2 >>  edges[i].ref  ;
-		  
+
 		  i1--;i2--; // for C index
 		  edges[i].v[0]=  vertices + i1;
 		  edges[i].v[1]=  vertices + i2;
@@ -1094,41 +1094,41 @@ void Geometry::ReadGeometry(MeshIstream & f_in,const char * filename)
 		  edges[i].SensAdj[0] = edges[i].SensAdj[1] = -1;
 		  edges[i].Adj[0] = edges[i].Adj[1] = 0;
 		  edges[i].flag = 0;
-		  if (!hvertices) 
+		  if (!hvertices)
 		    {
 		      vertices[i1].color++;
 		      vertices[i2].color++;
 		      len[i1] += l12;
 		      len[i2] += l12;
 		    }
-		  
+
 		  Hmin = Min(Hmin,l12);
 		}
-	      // definition  the default of the given mesh size 
-	      if (!hvertices) 
+	      // definition  the default of the given mesh size
+	      if (!hvertices)
 		{
-		  for (i=0;i<nbv;i++) 
-		    if (vertices[i].color > 0) 
+		  for (i=0;i<nbv;i++)
+		    if (vertices[i].color > 0)
 		      vertices[i].m=  Metric(len[i] /(Real4) vertices[i].color);
-		    else 
+		    else
 		      vertices[i].m=  Metric(Hmin);
 		  delete [] len;
-		  
-		  if(verbosity>3) 
+
+		  if(verbosity>3)
 		    cout << "     Geom Hmin " << Hmin << endl;
 		}
-	      
+
 	    }
 	}
       else if (!strcmp(fieldname,"EdgesTangence") ||!strcmp(fieldname,"TangentAtEdges")  )
-        { 
+        {
           int n,i,j,k;
           R2 tg;
           f_in  >> n ;
-          
-	  if(verbosity>5) 
+
+	  if(verbosity>5)
 	    cout << "     Record TangentAtEdges: Nb of Edge " << n <<endl;
-          
+
           for (k=0;k<n;k++)
             {
 	      f_in  >>  i  >> j ;
@@ -1141,13 +1141,13 @@ void Geometry::ReadGeometry(MeshIstream & f_in,const char * filename)
             }
         }
       else if (!strcmp(fieldname,"Corners"))
-        { 
+        {
           int i,j,n;
           f_in  >> n ;
-	  if(verbosity>5) 
+	  if(verbosity>5)
 	    cout << "     Record Corner: Nb of Corner " << n <<endl;
-          
-          for (i=0;i<n;i++) {     
+
+          for (i=0;i<n;i++) {
             f_in  >>  j ;
             assert( j <= nbv );
             assert( j > 0 );
@@ -1156,11 +1156,11 @@ void Geometry::ReadGeometry(MeshIstream & f_in,const char * filename)
             vertices[j].SetRequired();  }
         }
       else if (!strcmp(fieldname,"RequiredVertices"))
-        { 
+        {
           int i,j,n;
           f_in  >> n ;
 
-          for (i=0;i<n;i++) {     
+          for (i=0;i<n;i++) {
             f_in  >>  j ;
             assert( j <= nbv );
             assert( j > 0 );
@@ -1168,11 +1168,11 @@ void Geometry::ReadGeometry(MeshIstream & f_in,const char * filename)
             vertices[j].SetRequired();  }
       }
       else if (!strcmp(fieldname,"RequiredEdges"))
-        { 
+        {
           int i,j,n;
           f_in  >> n ;
 
-          for (i=0;i<n;i++) {     
+          for (i=0;i<n;i++) {
             f_in  >>  j ;
             assert( j <= nbe );
             assert( j > 0 );
@@ -1180,17 +1180,17 @@ void Geometry::ReadGeometry(MeshIstream & f_in,const char * filename)
             edges[j].SetRequired();  }
       }
     else if (!strcmp(fieldname,"SubDomain") || !strcmp(fieldname,"SubDomainFromGeom"))
-      { 
+      {
 	f_in   >>  NbSubDomains ;
-	if (NbSubDomains>0) 
+	if (NbSubDomains>0)
 	  {
 	    subdomains = new GeometricalSubDomain[  NbSubDomains];
 	    Int4 i0,i1,i2,i3;
-	    for (i=0;i<NbSubDomains;i++) 
+	    for (i=0;i<NbSubDomains;i++)
 	      {
-		f_in  >> i0  >>i1 
-		      >> i2  >>i3 ; 
-		
+		f_in  >> i0  >>i1
+		      >> i2  >>i3 ;
+
 		assert(i0 == 2);
 		assert(i1<=nbe && i1>0);
 		subdomains[i].edge=edges + (i1-1);
@@ -1202,16 +1202,16 @@ void Geometry::ReadGeometry(MeshIstream & f_in,const char * filename)
       else
 	{ // unkown field
 	  field = ++showfield;
-	  if(showfield==1) // just to show one time 
+	  if(showfield==1) // just to show one time
 	    if (verbosity>3)
 	      cout << "    Warning we skip the field " << fieldname << " at line " << f_in.LineNumber << endl;
 	}
-      showfield=field; // just to show one time 
+      showfield=field; // just to show one time
     } // while !eof()
-  // generation  de la geometrie 
-  // 1 construction des aretes 
-  // construire des aretes en chaque sommets 
-  
+  // generation  de la geometrie
+  // 1 construction des aretes
+  // construire des aretes en chaque sommets
+
   if (nbv <=0) {
     cerr<<"Error: the field Vertex is not found in " << filename<<endl;
     NbErr++;}
@@ -1220,8 +1220,8 @@ void Geometry::ReadGeometry(MeshIstream & f_in,const char * filename)
       ;NbErr++;}
   if(NbErr) MeshError(1);
 
- 
+
 }
 
 
-}  // end of namespace bamg 
+}  // end of namespace bamg