Changeset 2858


Ignore:
Timestamp:
01/15/10 14:05:28 (15 years ago)
Author:
Mathieu Morlighem
Message:

removed all cout and cerr

Location:
issm/trunk/src/c/Bamgx
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk/src/c/Bamgx/Bamgx.cpp

    r2855 r2858  
    6969        // some verification
    7070        if ( maxsubdiv > boundmaxsubdiv || maxsubdiv <= 1.0){
    71                 cerr << " -maxsubdiv " << maxsubdiv << " is not in ]1,"<< boundmaxsubdiv << "]" << endl;
    72                 exit(3);
     71                throw ErrorException(__FUNCT__,exprintf("maxsubdiv %g is should be in ]1,%g]",maxsubdiv,boundmaxsubdiv));
    7372        }
    7473        if (iso) anisomax=1;
  • issm/trunk/src/c/Bamgx/Mesh2.h

    r2856 r2858  
    815815  void NewPoints( Triangles &,int KeepBackVertex =1 );
    816816  Int4 InsertNewPoints(Int4 nbvold,Int4 & NbTSwap) ;
    817   void NewPointsOld( Triangles & );
    818817  void NewPoints(int KeepBackVertex=1){ NewPoints(*this,KeepBackVertex);}
    819818  void ReNumberingTheTriangleBySubDomain(bool justcompress=false);
  • issm/trunk/src/c/Bamgx/Metric.h

    r2837 r2858  
    179179
    180180
    181 inline   void  MetricAnIso::Box(Real4 &hx,Real4 &hy) const
    182 {
     181inline   void  MetricAnIso::Box(Real4 &hx,Real4 &hy) const {
    183182  Real8 d=  a11*a22-a21*a21;
    184183  hx = sqrt(a22/d);
    185184  hy = sqrt(a11/d);
    186   //  cerr << " hx = " << hx << " hy =  " << hy << endl;
    187185}
    188186
  • issm/trunk/src/c/Bamgx/objects/Geometry.cpp

    r2856 r2858  
    708708                                GeometricalEdge & e1=edges[i];
    709709                                GeometricalEdge & e2=*e1.link;
    710                                 cerr << i << " " << e1[0].The() << " " << e2[0].The() << " " <<  e1[1].The() << " " << e2[1].The() << endl;
    711710                                if ( e1[0].The() == e2[0].The() && e1[1].The() == e2[1].The() )
    712711                                  {
  • issm/trunk/src/c/Bamgx/objects/Triangles.cpp

    r2857 r2858  
    15461546                                                  } // tt
    15471547                                                else
    1548                                                  cerr <<endl <<  " Bug " <<i<< " " << j << " t=" << t << endl;
    1549 
     1548                                                 throw ErrorException(__FUNCT__,exprintf("Bug..."));
    15501549                                          } // ke<0           
    15511550                                        else
     
    23492348        }
    23502349        /*}}}1*/
    2351         /*FUNCTION Triangles::NewPointsOld{{{1*/
    2352         void  Triangles::NewPointsOld(Triangles & Bh) {
    2353                 long int verbosity=2;
    2354                 Real8 seuil= 0.7 ;// for two neart point
    2355                 if (verbosity>1)
    2356                  cout << " begin :  Triangles::NewPointsOld " << endl;
    2357                 Int4 i,k;
    2358                 int j;
    2359                 Int4 BeginNewPoint[3];
    2360                 Int4 EndNewPoint[3];
    2361                 int step[3];
    2362                 Int4 *first_np_or_next_t = new Int4[nbtx];
    2363                 Int4 ColorEdge[3];
    2364                 Int4 color=-1;
    2365                 Triangle *t;
    2366                 // generation of the list of next Triangle
    2367                 // at 1 time we test all the triangles
    2368                 Int4 Headt =0,next_t;
    2369                 for(i=0;i<nbt;i++)
    2370                  first_np_or_next_t[i]=-(i+1);
    2371                 // end list i >= nbt
    2372                 // the list of test triangle is
    2373                 // the next Triangle on i is  -first_np_or_next_t[i]
    2374                 Int4 nbtold,nbvold;
    2375 
    2376                 // Big loop
    2377                 do {
    2378                         nbtold = nbt;
    2379                         nbvold = nbv;
    2380                         // default size of  IntersectionTriangle
    2381 
    2382                         i=Headt;
    2383                         next_t=-first_np_or_next_t[i];
    2384                         for(t=&triangles[i];i<nbt;t=&triangles[i=next_t],next_t=-first_np_or_next_t[i]) { // for each triangle  t
    2385                                 // we can change first_np_or_next_t[i]
    2386                                 if (i<0 || i >= nbt ){
    2387                                         throw ErrorException(__FUNCT__,exprintf("i<0 || i >= nbt"));
    2388                                 }
    2389                                 first_np_or_next_t[i] = nbv; // to save the fist new point of triangle
    2390                                 for(j=0;j<3;j++)
    2391                                   { // for each edge
    2392                                         TriangleAdjacent tj(t,j);
    2393                                         // color++;// the color is 3i+j
    2394                                         color = 3*i + j ;;
    2395                                         ColorEdge[j]=color;
    2396                                         BeginNewPoint[j]=nbv;
    2397                                         EndNewPoint[j]=nbv-1;
    2398                                         step[j]=1;// right sens
    2399                                         Vertex & vA = * tj.EdgeVertex(0);
    2400                                         Vertex & vB = * tj.EdgeVertex(1);
    2401 
    2402                                         if (!t->link) continue;// boundary
    2403                                         if (t->det <0) continue;
    2404                                         if (t->Locked(j)) continue;
    2405 
    2406                                         TriangleAdjacent tadjj = t->Adj(j);       
    2407                                         Triangle * ta= tadjj;
    2408 
    2409                                         if (ta->det <0) continue;         
    2410 
    2411                                         R2 A = vA;
    2412                                         R2 B = vB;
    2413 
    2414                                         k=Number(ta);
    2415                                         // the 2 opposite vertices
    2416                                         const Vertex & vC1  =  *tj.OppositeVertex();
    2417                                         const Vertex & vC2 = *tadjj.OppositeVertex();
    2418 
    2419                                         if(first_np_or_next_t[k]>0) { // this edge is done before
    2420                                                 // find the color of the edge and begin , end of newpoint
    2421                                                 register int kk = t->NuEdgeTriangleAdj(j);
    2422                                                 if ((*t)(VerticesOfTriangularEdge[j][0]) != (*ta)(VerticesOfTriangularEdge[kk][1])){
    2423                                                         throw ErrorException(__FUNCT__,exprintf("(*t)(VerticesOfTriangularEdge[j][0]) != (*ta)(VerticesOfTriangularEdge[kk][1])"));
    2424                                                 }
    2425                                                 if ((*t)(VerticesOfTriangularEdge[j][1]) != (*ta)(VerticesOfTriangularEdge[kk][0])){
    2426                                                         throw ErrorException(__FUNCT__,exprintf("(*t)(VerticesOfTriangularEdge[j][1]) != (*ta)(VerticesOfTriangularEdge[kk][0])"));
    2427                                                 }
    2428                                                 register Int4 kolor =3*k + kk;
    2429                                                 ColorEdge[j]=kolor;
    2430                                                 register Int4 kkk= 1;
    2431                                                 step[j]=-1;// other sens
    2432                                                 BeginNewPoint[j]=0;
    2433                                                 EndNewPoint[j]=-1; // empty list         
    2434                                                 for (Int4 iv=first_np_or_next_t[k];iv<nbv;iv++)
    2435                                                  if (vertices[iv].color > kolor)
    2436                                                   break; // the color is passed           
    2437                                                  else if (vertices[iv].color == kolor) {
    2438                                                          EndNewPoint[j]=iv;
    2439                                                          if (kkk) // one time test
    2440                                                           kkk=0,BeginNewPoint[j]=iv;}
    2441                                                          continue; // next edge of the triangle
    2442                                         } // end  if( k < i)
    2443 
    2444 
    2445                                         const Int4 NbvOld = nbv;
    2446                                         lIntTria.SplitEdge(Bh,A,B);
    2447                                         // Int4 NbvNp =
    2448                                         lIntTria.NewPoints(vertices,nbv,nbvx);
    2449                                         Int4 nbvNew=nbv;
    2450                                         nbv = NbvOld;
    2451                                         for (Int4 iv=NbvOld;iv<nbvNew;iv++) {
    2452                                                 vertices[nbv].color = color;
    2453                                                 vertices[nbv].ReferenceNumber=nbv;// circular link
    2454                                                 R2 C =  vertices[iv].r;
    2455                                                 vertices[nbv].r =  C;
    2456                                                 vertices[nbv].m =  vertices[iv].m ;
    2457                                                 // test if the new point is not to close to the 2 opposite vertex
    2458                                                 R2 CC1 = C-vC1 , CC2 = C-vC2;
    2459                                                 if (   (  (vC1.m(CC1) + vertices[nbv].m(CC1)) >  seuil)
    2460                                                                         && (  (vC2.m(CC2) + vertices[nbv].m(CC2)) >  seuil) )
    2461                                                  nbv++;
    2462                                         }
    2463 
    2464                                         EndNewPoint[j] = nbv-1;
    2465                                   } // end loop for each edge
    2466 
    2467                                 if (!t->link) continue;// boundary
    2468                                 if (t->det<=0) continue;// outside
    2469                                 //      continue;
    2470                                 for(int j0=0;j0<3;j0++)
    2471                                  for (Int4 i0= BeginNewPoint[j0]; i0 <= EndNewPoint[j0];i0++)
    2472                                         {
    2473                                          // find the neart  point one the opposite edge
    2474                                          // to compute i1
    2475                                          Vertex & vi0 = vertices[i0];
    2476                                          int kstack = 0;
    2477                                          Int4 stack[10];
    2478                                          //   Int4 savRef[10];
    2479                                          int j1 = j0;
    2480                                          while (j0 != (j1 = NextEdge[j1])) {//loop on the 2 other edge
    2481                                                  // computation of the intersection of edge j1 and DOrto
    2482                                                  // take the good sens
    2483 
    2484                                                  if (BeginNewPoint[j1]> EndNewPoint[j1])
    2485                                                   continue; //
    2486                                                  else if (EndNewPoint[j1] - BeginNewPoint[j1] <1) {
    2487                                                          for (Int4 ii1= BeginNewPoint[j1];ii1<=EndNewPoint[j1];ii1++)
    2488                                                           stack[kstack++] = ii1;
    2489                                                          continue;}
    2490 
    2491 
    2492                                                          int k0,k1;
    2493                                                          if (step[j1]<0) k0=1,k1=0; // reverse
    2494                                                          else k0=0,k1=1;
    2495                                                          R2 V10 = (R2)(*t)[VerticesOfTriangularEdge[j1][k0]];
    2496                                                          R2 V11 = (R2)(*t)[VerticesOfTriangularEdge[j1][k1]];
    2497                                                          R2 D = V11-V10;
    2498                                                          Real8 c0 =  vi0.m(D,(R2) vi0);
    2499 
    2500                                                          Real8 c10 =  vi0.m(D,V10);
    2501                                                          Real8 c11 =  vi0.m(D,V11);
    2502 
    2503                                                          Real8 s;
    2504                                                          //cout << " --i0 = " << i0  << D  << V10 << V11 << endl ;
    2505                                                          //cout << "   c10 " <<  c10 << " c0 " << c0 << " c11 " << c11 << endl;
    2506                                                          if (( c10 < c0 ) && (c0 < c11))
    2507                                                           s = (c11-c0)/(c11-c10);
    2508                                                          else if  (( c11 < c0 ) && (c0 < c10))
    2509                                                           s = (c11-c0) /(c11-c10);
    2510                                                          else break;
    2511                                                          R2 VP = V10*s + V11*(1-s);
    2512                                                          int sss = (c11-c10) >0 ? 1 : -1;
    2513                                                          // find the 2 point by dichotomie
    2514                                                          //cout << "   t =" << Number(t) << " c0 " << c0  ;
    2515                                                          Int4 ii0 =  BeginNewPoint[j1];
    2516                                                          Int4 ii1 =  EndNewPoint[j1];       
    2517                                                          Real8 ciii=-1,cii0=-1,cii1=-1  ;
    2518                                                          if ( sss * ((cii0=vi0.m(D,(R2) vertices[ii0]))- c0) >0 ) 
    2519                                                           stack[kstack++] = ii0;//cout << " add+0 " << ii0;
    2520                                                          else if ( sss * ((cii1=  vi0.m(D ,(R2) vertices[ii1]))- c0) < 0 ) 
    2521                                                           stack[kstack++] = ii1;//cout << " add+1 " << ii1;
    2522                                                          else {
    2523                                                                  while ((ii1-ii0)> 1) {
    2524                                                                          Int4 iii = (ii0+ii1)/2;
    2525                                                                          ciii = vi0.m( D ,(R2) vertices[iii]);
    2526                                                                          //cout << " (iii = " << iii << " " <<  ciii << ") ";
    2527                                                                          if ( sss * (ciii - c0) <0 )  ii0 = iii;
    2528                                                                          else ii1 = iii;}                             
    2529                                                                          stack[kstack++] = ii0;// cout << " add0 " << ii0;
    2530                                                                          if (ii1 != ii0)  stack[kstack++] = ii1;//cout << " add1 " << ii1;
    2531                                                          }
    2532                                                          if (kstack >5) // bug ?
    2533                                                           cout << "NewPoints: bug????? " << kstack << " stack  " << stack[kstack]<< endl;
    2534                                          }
    2535 
    2536                                          stack[kstack++] = -1; // to stop
    2537                                          Int4 i1;
    2538                                          kstack =0;
    2539                                          while( (i1=stack[kstack++]) >= 0){ // the two parameter is i0 and i1
    2540                                                  if (i1 >= nbv || i1 < 0){
    2541                                                          throw ErrorException(__FUNCT__,exprintf("i1 >= nbv || i1 < 0"));
    2542                                                  }
    2543                                                  if (i0 >= nbv || i0 < 0){
    2544                                                          throw ErrorException(__FUNCT__,exprintf("i0 >= nbv || i0 < 0"));
    2545                                                  }
    2546                                                  if (i1 == i0){
    2547                                                          throw ErrorException(__FUNCT__,exprintf("i1 == i0"));
    2548                                                  }
    2549                                                  R2 v01 = (R2) vertices[i1]- (R2) vertices[i0];
    2550                                                  Real8 d01 = (vertices[i0].m(v01) + vertices[i1].m(v01));
    2551                                                  if (i0< nbvold || i1<nbvold){
    2552                                                          throw ErrorException(__FUNCT__,exprintf("i0< nbvold || i1<nbvold"));
    2553                                                  }
    2554                                                  if (d01 == 0)
    2555                                                   break;
    2556                                                  if ( d01 < seuil)
    2557                                                   if (i1<nbvold) {
    2558                                                           // remove all the points i0;
    2559                                                           register Int4 ip,ipp;
    2560                                                           for  (ip=i0;i0 != (ipp = vertices[ip].ReferenceNumber);ip=ipp)
    2561                                                                 vertices[ip].ReferenceNumber = -1;// mark remove
    2562                                                           vertices[ip].ReferenceNumber = -1;// mark remove
    2563                                                   }
    2564                                                   else {
    2565                                                           // remove on of two points
    2566                                                           register Int4 ip0, ip1, ipp0,ipp1;
    2567                                                           register int kk0=1,kk1=1;
    2568                                                           // count the number of common points to compute weight w0,w1
    2569                                                           for  (ip0=i0;i0 != (ipp0 = vertices[ip0].ReferenceNumber);ip0=ipp0) kk0++;
    2570                                                           for  (ip1=i1;i1 != (ipp1 = vertices[ip1].ReferenceNumber);ip1=ipp1) kk1++;
    2571 
    2572                                                           register Real8 w0 = ((Real8) kk0)/(kk0+kk1);
    2573                                                           register Real8 w1 = ((Real8) kk1)/(kk0+kk1);
    2574 
    2575                                                           // make a circular link
    2576                                                           Exchange(vertices[i0].ReferenceNumber,vertices[i1].ReferenceNumber);
    2577                                                           // the new coordinate
    2578                                                           R2 C //= vertices[i0] ;
    2579                                                           =  vertices[i0].r *w0 + vertices[i1].r* w1;
    2580 
    2581                                                           // update the new point points of the list
    2582                                                           for  (ip0=i0;i0 != (ipp0 = vertices[ip0].ReferenceNumber);ip0=ipp0)
    2583                                                                 vertices[ip0].r = C;         
    2584                                                           vertices[ip0].r = C;
    2585                                                   }
    2586                                                 }
    2587                                         } // for (i0= ....
    2588                           }// for triangle   
    2589 
    2590                         // remove of all the double points
    2591 
    2592                         Int4 ip,ipp,kkk=nbvold;
    2593                         for (i=nbvold;i<nbv;i++)
    2594                          if (vertices[i].ReferenceNumber>=0) {// good points
    2595                                  //  cout <<" i = " << i ;
    2596                                  for  (ip=i;i != (ipp = vertices[ip].ReferenceNumber);ip=ipp)
    2597                                   vertices[ip].ReferenceNumber = -1;// mark remove
    2598                                  vertices[ip].ReferenceNumber = -1;// mark remove
    2599                                  // cout << i << " ---> " << kkk << endl;       
    2600                                  vertices[kkk] = vertices[i];
    2601                                  vertices[kkk].i = toI2(vertices[kkk].r);
    2602                                  vertices[kkk++].ReferenceNumber = 0;
    2603 
    2604                          }
    2605 
    2606                         // insertion part ---
    2607 
    2608                         const Int4 nbvnew = kkk-nbvold;
    2609 
    2610                         cout << "    Remove " << nbv - kkk  << " to close  vertex " ;
    2611                         cout << " and   Insert the " <<nbvnew<< " new points " << endl; 
    2612                         nbv = kkk;
    2613                         Int4 NbSwap=0;
    2614                         Icoor2 dete[3];
    2615 
    2616                         // construction d'un ordre aleatoire
    2617                         if (! nbvnew)
    2618                          break;
    2619                         if (nbvnew) {
    2620                                 const Int4 PrimeNumber= AGoodNumberPrimeWith(nbv)  ;
    2621                                 Int4 k3 = rand()%nbvnew ;
    2622                                 for (Int4 is3=0; is3<nbvnew; is3++)
    2623                                  ordre[nbvold+is3]= &vertices[nbvold +(k3 = (k3 + PrimeNumber)% nbvnew)];
    2624 
    2625                                 for (i=nbvold;i<nbv;i++)
    2626                                   { Vertex * vi = ordre[i];
    2627                                         Triangle *tcvi = FindTriangleContening(vi->i,dete);
    2628                                         //     Vertex * nv =  quadtree->NearestVertex(vi->i.x,vi->i.y);
    2629                                         //      cout << " Neart Vertex of "  << Number(vi)<< vi->i << " is "
    2630                                         //   << Number(nv) << nv->i  << endl;
    2631                                         // Int4  kt = Number(tcvi);
    2632                                         //
    2633 
    2634                                         quadtree->Add(*vi); //
    2635                                         if (tcvi->det<0){// internal
    2636                                                 throw ErrorException(__FUNCT__,exprintf("tcvi->det<0"));
    2637                                         }
    2638                                         Add(*vi,tcvi,dete),NbSwap += vi->Optim(1);         
    2639                                   } 
    2640                         }
    2641                         cout << " Nb swap = " << NbSwap << " after " ;
    2642 
    2643                         for (i=nbvold;i<nbv;i++)
    2644                          NbSwap += vertices[i].Optim(1); 
    2645                         cout << NbSwap << endl;
    2646 
    2647                         for (i=nbtold;i<nbt;i++)
    2648                          first_np_or_next_t[i]=1;
    2649 
    2650                         Headt = nbt; // empty list
    2651                         for (i=nbvold;i<nbv;i++)
    2652                           { // for all the triangle contening the vertex i
    2653                                 Vertex * s  = vertices + i;
    2654                                 TriangleAdjacent ta(s->t, EdgesVertexTriangle[s->vint][1]);
    2655                                 Triangle * tbegin= (Triangle*) ta;
    2656                                 Int4 kt;
    2657                                 do {
    2658                                         kt = Number((Triangle*) ta);
    2659                                         if (first_np_or_next_t[kt]>0)
    2660                                          first_np_or_next_t[kt]=-Headt,Headt=kt;
    2661                                         if (ta.EdgeVertex(0) != s){
    2662                                                 throw ErrorException(__FUNCT__,exprintf("ta.EdgeVertex(0) != s"));
    2663                                         }
    2664                                         ta = Next(Adj(ta));
    2665                                 } while ( (tbegin != (Triangle*) ta));
    2666                           }
    2667 
    2668 
    2669                 } while (nbv!=nbvold);
    2670                 delete []  first_np_or_next_t;
    2671                 cout << " end :  Triangles::NewPoints old  nbv=" << nbv << endl;
    2672 
    2673         }
    2674         /*}}}1*/
    26752350        /*FUNCTION Triangles::Insert{{{1*/
    26762351        void Triangles::Insert() {
    26772352                long int verbosity=2;
    2678                 if (verbosity>2) cout << "  -- Insert initial " << nbv << " vertices " << endl ;
     2353                if (verbosity>2) printf("   Insert initial %i vertices\n",nbv);
    26792354                Triangles * OldCurrentTh =CurrentTh;
    26802355
    26812356                CurrentTh=this;
    2682                 double time0=CPUtime(),time1,time2,time3;
    26832357                SetIntCoor();
    26842358                Int4 i;
     
    27372411                quadtree->Add(*v1);
    27382412
    2739                 // on ajoute les sommets un Ò un
     2413                //the vertices are added one by one
    27402414                Int4 NbSwap=0;
    27412415
    2742                 time1=CPUtime();
    2743 
    2744                 if (verbosity>3) cout << "  -- Begin of insertion process " << endl;
     2416
     2417                if (verbosity>3) printf("   Begining of insertion process...\n");
    27452418
    27462419                for (Int4 icount=2; icount<nbv; icount++) {
    27472420                        Vertex *vi  = ordre[icount];
    2748                         //    cout << " Insert " << Number(vi) << endl;
    27492421                        Icoor2 dete[3];
    27502422                        Triangle *tcvi = FindTriangleContening(vi->i,dete);
     
    27522424                        Add(*vi,tcvi,dete);
    27532425                        NbSwap += vi->Optim(1,0);
    2754 
    2755                 }// fin de boucle en icount
    2756                 time2=CPUtime();
    2757                 if (verbosity>3)
    2758                  cout << "    NbSwap of insertion " <<    NbSwap
    2759                         << " NbSwap/Nbv " <<  (float) NbSwap / (float) nbv
    2760                         << " NbUnSwap " << NbUnSwap << " Nb UnSwap/Nbv "
    2761                         << (float)NbUnSwap /(float) nbv
    2762                         <<endl;
     2426                }
     2427                if (verbosity>3) {
     2428                        printf("      NbSwap of insertion: %i\n",NbSwap);
     2429                        printf("      NbSwap/nbv:          %i\n",NbSwap/nbv);
     2430                        printf("      NbUnSwap:            %i\n",NbUnSwap);
     2431                        printf("      NbUnSwap/nbv         %i\n",NbUnSwap/nbv);
     2432                }
    27632433                NbUnSwap = 0;
    27642434                // construction d'un ordre aleatoire
     
    27702440                 ordre[is4]= &vertices[k3 = (k3 + PrimeNumber)% nbv];
    27712441
    2772                 double timeloop = time2 ;
    27732442                for(int Nbloop=0;Nbloop<NBLOOPOPTIM;Nbloop++)
    27742443                  {
    2775                         double time000 = timeloop;
    27762444                        Int4  NbSwap = 0;
    27772445                        for (int is1=0; is1<nbv; is1++)
    27782446                         NbSwap += ordre[is1]->Optim(0,0);
    2779                         timeloop = CPUtime();
    2780                         if (verbosity>3)
    2781                          cout << "    Optim Loop "<<Nbloop<<" NbSwap: " <<  NbSwap
    2782                                 << " NbSwap/Nbv "          <<  (float) NbSwap / (float) nbv
    2783                                 << " CPU=" << timeloop - time000 << "  s, "
    2784                                 << " NbUnSwap/Nbv " << (float)NbUnSwap /(float) nbv 
    2785                                 <<  endl;
     2447                        if (verbosity>3) {
     2448                                printf("      Optim Loop: %i\n",Nbloop);
     2449                                printf("      NbSwap/nbv:          %i\n",NbSwap/nbv);
     2450                                printf("      NbUnSwap:            %i\n",NbUnSwap);
     2451                                printf("      NbUnSwap/nbv         %i\n",NbUnSwap/nbv);
     2452                        }
    27862453                        NbUnSwap = 0;
    27872454                        if(!NbSwap) break;
     
    27902457                // because we break the TriangleContainingTheVertex
    27912458#endif
    2792                 time3=CPUtime();
    2793                 if (verbosity>4)
    2794                  cout << "    init " << time1 - time0 << " initialisation,  "
    2795                         << time2 - time1 << "s, insert point  "
    2796                         << time3 -time2 << "s, optim " << endl
    2797                         << "     Init Total Cpu Time = " << time3 - time0 << "s " << endl;
    2798 
    27992459                CurrentTh=OldCurrentTh;
    28002460        }
     
    28032463        void Triangles::ForceBoundary() {
    28042464                long int verbosity=2;
    2805                 if (verbosity > 2)
    2806                  cout << "  -- ForceBoundary  nb of edge " << nbe << endl;
     2465                if (verbosity > 2) printf("   ForceBoundary  nb of edge: %i\n",nbe);
    28072466                int k=0;
    28082467                Int4  nbfe=0,nbswp=0,Nbswap=0;
    2809                 for (Int4 t = 0; t < nbt; t++) 
    2810                  if (!triangles[t].det)
    2811                   k++,cerr << " det T" << t << " = " << 0 << endl;
     2468                for (Int4 t = 0; t < nbt; t++){
     2469                        if (!triangles[t].det) k++;
     2470                }
    28122471                if (k!=0) {
    28132472                        throw ErrorException(__FUNCT__,exprintf("there is %i triangles of mes = 0",k));
     
    28222481                                else Nbswap += nbswp;
    28232482                                if (nbswp) nbfe++;
    2824                                 if ( nbswp < 0 && k < 5)
    2825                                   {
    2826                                         cerr << " Missing  Edge " << i << " v0 =  " << Number(edges[i][0]) << edges[i][0].r
    2827                                           <<" v1= " << Number(edges[i][1]) << edges[i][1].r << " " << edges[i].on->Cracked() << "  " << (Triangle *) ta ;
    2828                                         if(ta.t)
    2829                                           {
    2830                                                 Vertex *aa = ta.EdgeVertex(0), *bb = ta.EdgeVertex(1); 
    2831                                                 cerr << " crossing with  [" << Number(aa) << ", " << Number(bb) << "]\n";
    2832                                           }
    2833                                         else cerr << endl;
    2834 
     2483                                if ( nbswp < 0 && k < 5){
     2484                                        throw ErrorException(__FUNCT__,exprintf("Missing  Edge %i, v0=%i,v1=%i",i ,Number(edges[i][0]),Number(edges[i][1])));
    28352485                                  }
    28362486                                if ( nbswp >=0 && edges[i].on->Cracked())
     
    28442494                        for (Int4 j=0;j<nbv;j++)
    28452495                         Nbswap +=  vertices[j].Optim(1,0);
    2846                         if (verbosity > 3)
    2847                          cout << "     Nb of inforced edge = " << nbfe << " Nb of Swap " << Nbswap << endl;
    2848 
     2496                        if (verbosity > 3) printf("      number of inforced edge = %i, number of swap= %i\n",nbfe,Nbswap);
    28492497        }
    28502498        /*}}}1*/
     
    28532501                long int verbosity=0;
    28542502
    2855                 if (verbosity >2)
    2856                   {
    2857                         if (OutSide)
    2858                          cout << "  -- Find all external sub-domain "; 
    2859                         else
    2860                          cout << "  -- Find all internal sub-domain ";
    2861                         if(verbosity>99)
    2862                           {
    2863 
    2864                                 for(int i=0;i<nbt;++i)
    2865                                  cout << i<< " " << triangles[i] << endl;
    2866                           }
    2867 
     2503                if (verbosity >2){
     2504                        if (OutSide) printf("   Find all external sub-domain\n");
     2505                        else printf("   Find all internal sub-domain\n");
    28682506                  }
    2869                 // if (verbosity > 4) cout << " OutSide=" << OutSide << endl;
    28702507                short * HeapArete = new short[nbt];
    28712508                Triangle  **  HeapTriangle = new Triangle*  [nbt];
     
    29192556                                        // infini triangle
    29202557                                        NbSubDomTot --;
    2921                                         //  cout << " triangle infini " << it << triangles[it] << endl;
    29222558                                        t=&triangles[it];
    29232559                                        NbOutT--;  // on fait un coup de trop.
    2924                                         while  (t){ // cout << Number(t) << " " << endl;
     2560                                        while  (t){
    29252561                                                NbOutT++;
    29262562                                                t1=t;
    29272563                                                t=t->link;
    2928                                                 t1->link=0;}//while (t)
     2564                                                t1->link=0;
     2565                                        }
    29292566                                  }
    29302567                          }   
     
    29602597                                                mark[it]=k;
    29612598                                                subdomains[k].head = t1;
    2962                                                 // cout << " New -- " << Number(t1) << " " << it << endl;
    2963                                                 do {// cout << " k " << k << " " << Number(t) << endl;
     2599                                                do {
    29642600                                                        mark[Number(t)]=k;
    29652601                                                        t=t->link;
     
    29852621                                                                  Int4 kr = mark[it];
    29862622                                                                  if(kr !=kl) {
    2987                                                                           //cout << kl << " " << kr << " rl "  << subdomains[kl].ref
    2988                                                                           // << " rr " << subdomains[kr].ref ;
    29892623                                                                          if (kl >=0 && subdomains[kl].ref <0 && kr >=0 && subdomains[kr].ref>=0)
    29902624                                                                                nbk--,subdomains[kr].ref=subdomains[kl].ref-1;
     
    29952629                                                                          if(kl<0 && kr >=0 && subdomains[kr].ref>=0)
    29962630                                                                                nbk--,subdomains[kr].ref=-1;
    2997                                                                           //   cout << " after \t "   
    2998                                                                           //     << kl << subdomains[kl].ref << " rr " << kr
    2999                                                                           // << subdomains[kr].ref << endl;
    30002631                                                                  }
    30012632                                                                 }
    3002                                                         //  cout << subdomains[0].ref << subdomains[1].ref << endl;
    30032633                                                        Int4  j=0;
    30042634                                                        for ( i=0;i<NbSubDomains;i++)
    30052635                                                         if((-subdomains[i].ref) %2) { // good
    3006                                                                  //cout << " sudom ok  = " << i << " " << subdomains[i].ref
    3007                                                                  // << " " << (-subdomains[i].ref) %2 << endl;
    30082636                                                                 if(i != j)
    30092637                                                                  Exchange(subdomains[i],subdomains[j]);
    30102638                                                                 j++;}
    3011                                                          else
    3012                                                                 { //cout << " remove sub domain " << i << endl;
     2639                                                         else{
    30132640                                                                 t= subdomains[i].head;
    3014                                                                  while  (t){// cout << Number(t) << " " << endl;
     2641                                                                 while (t){
    30152642                                                                         NbOutT++;
    30162643                                                                         t1=t;
    30172644                                                                         t=t->link;
    3018                                                                          t1->link=0;}//while (t)
     2645                                                                         t1->link=0;
     2646                                                                 }//while (t)
    30192647                                                                }
    3020 
    3021                                                         if(verbosity>4)
    3022                                                          cout << " Number of remove sub domain (OutSideMesh) =" << NbSubDomains-j << endl;
     2648                                                        if(verbosity>4) printf("      Number of removes subdomains (OutSideMesh) = %i\n",NbSubDomains-j);
    30232649                                                        NbSubDomains=j;
    30242650                                                  }
     
    30342660                                 subdomains = new SubDomain[ Gh.NbSubDomains];
    30352661                                NbSubDomains =Gh.NbSubDomains;
    3036                                 if(verbosity>4)
    3037                                  cout << "     find the " << NbSubDomains << " sub domain " << endl;
    30382662                                Int4 err=0;
    30392663                                ReMakeTriangleContainingTheVertex();
     
    30582682                                        int sens = Gh.subdomains[i].sens;
    30592683                                        // test if ge and e is in the same sens
    3060                                         //      cout << " geom edge = " <<  Gh.Number(eg) <<" @" << &eg << " ref = " << subdomains[i].ref
    3061                                         //     << " ref edge =" << eg.ref << " sens " << sens ;
    30622684                                        if (((eg[0].r-eg[1].r),(e[0].r-e[1].r))<0) sens = -sens ;
    30632685                                        subdomains[i].sens = sens;
     
    30732695                                                        throw ErrorException(__FUNCT__,exprintf("v0 != ta.EdgeVertex(1)"));
    30742696                                                }
    3075                                                 //       cout << " recherche " << Number( ta.EdgeVertex(0)) << endl;
    30762697                                                if (ta.EdgeVertex(0) == v1) { // ok we find the edge
    30772698                                                        if (sens>0) 
     
    30792700                                                        else
    30802701                                                         subdomains[i].head=t=ta;
    3081                                                         //cout << "      triangle  =" << Number(t) << " = " << (*t)[0].r <<  (*t)[1].r <<  (*t)[2].r << endl;
    30822702                                                        if(t<triangles || t >= triangles+nbt || t->det < 0 || t->link == 0) {
    30832703                                                                throw ErrorException(__FUNCT__,exprintf("bad definition of SubSomain %i",i));
     
    30852705                                                        Int4 it = Number(t);
    30862706                                                        if (mark[it] >=0) {
    3087                                                                 if(verbosity>10){
    3088                                                                         cerr << "     Warning: the sub domain " << i << " ref = " << subdomains[i].ref
    3089                                                                           << " is previouly defined with "  <<mark[it] << " ref = " << subdomains[mark[it]].ref
    3090                                                                           << " skip this def " << endl;
    3091                                                                 }
    30922707                                                                break;
    30932708                                                        }
     
    31062721                                                                tt=tt->link;
    31072722                                                          } while (tt!=t);
    3108                                                         if(verbosity>7)
    3109                                                          cout << "     Nb de triangles dans le sous domaine " << i << " de ref " << subdomains[i].ref << " = " << kkk << endl;
    31102723                                                        break;
    31112724                                                }
     
    31182731
    31192732                                if (inew < NbSubDomains) {
    3120                                         if (verbosity>5)
    3121                                          cout << "     Warning: We remove " << NbSubDomains-inew << " SubDomains " << endl;
     2733                                        if (verbosity>5) printf("WARNING: %i SubDomains are being removed\n",NbSubDomains-inew);
    31222734                                        NbSubDomains=inew;}
    31232735
     
    31332745                        for (it=0;it<nbt;it++)
    31342746                         if(!triangles[it].link)  NbOutT++;
    3135                         if (verbosity> 4)
    3136                          cout << "    " ;
    3137                         if (verbosity> 2)
    3138                          cout << " Nb of Sub borned Domain  = " <<  NbSubDomTot << " NbOutTriangles = " << NbOutT <<endl;
    3139 
    3140 
    31412747        }
    31422748        /*}}}1*/
     
    32362842                        while (t0 != (t=t->link));
    32372843                  }
    3238                 if (verbosity>9)
    3239                  cout << " number of inside triangles " << k << " nbt = " << nbt << endl;
    32402844                // take is same numbering if possible   
    32412845                if(justcompress)
     
    33002904                        while (t0 != (t=t->link));
    33012905                  }
    3302                 //  NbOutT = nbt - k;
    3303                 if (verbosity>5)
    3304                  cout << " Nb of Sub Domain =" << NbSubDomains  << " Nb of In Triangles " << k
    3305                         << " Nbt = " << nbt << " Out Triangles = " << nbt - k <<  endl;
    3306 
    33072906                return k;   
    3308 
    33092907        }
    33102908        /*}}}1*/
     
    33752973                                Gh[i].to = vertices + nbv;// save Geom -> Th
    33762974                                VerticesOnGeomVertex[nbv]= VertexOnGeom(vertices[nbv],Gh[i]);
    3377                                 // cout << "--------- "  <<Number(Gh[i].to) << " " << Gh[i].to << " " << i << endl;
    33782975                                nbv++;
    33792976                        }
     
    34002997                        Gh.UnMarkEdges();       
    34012998                        int bfind=0;
    3402                         /*
    3403                                 cout << " nb curves = " << Gh.NbOfCurves << endl;
    3404                                 for(int i=0;i<Gh.NbOfCurves ;i++)
    3405                                 {
    3406                                 cout << " Curve " << i << " begin e=" << Gh.Number(Gh.curves[i].be) << " k=" << Gh.curves[i].kb
    3407                                 << "  end e= " << Gh.Number(Gh.curves[i].ee) << " k=" << Gh.curves[i].ke << endl;
    3408                                 }*/
    34092999                        for (int i=0;i<Gh.NbOfCurves;i++)
    34103000                          {
     
    34203010                                         // a begin of curve
    34213011                                         int nc = ei.on->CurveNumber;
    3422 
    3423                                          //cout << "curve " <<  nc << " v " << Gh.Number((GeometricalVertex *) *ei[je].on) << " "
    3424                                          //     << " e "  << " " << Gh.Number(ei.on) << " vc " << Gh.Number((*Gh.curves[nc].be)[Gh.curves[nc].kb]) << endl;
    34253012                                         if(
    34263013                                                                 ei.on==Gh.curves[nc].be    &&
     
    34283015                                                )     
    34293016                                                {
    3430                                                  // cout << " find " << endl;
    34313017                                                 bcurve[nc]=iedge*2+je;
    34323018                                                 bfind++;       
     
    34493035                        Int4 iedge;
    34503036                        Gh.UnMarkEdges();       
    3451                         /*   add Curve loop  FH   
    3452                         // find a starting back groud edges to walk
    3453                         for (iedge=0;iedge<BTh.nbe;iedge++) {     
    3454                         Edge & ei = BTh.edges[iedge];
    3455                         for(int jedge=0;jedge<2;jedge++) // for the 2 extremites
    3456                         if (!ei.on->Mark() && ei[jedge].on->IsRequiredVertex() )
    3457                         {
    3458                         */ 
    3459                         // new code FH 2004
    34603037                        Real8 L=0;
    34613038                        for (int icurve=0;icurve<Gh.NbOfCurves;icurve++)
     
    34723049                                Int4 NbCreatePointOnCurve=0;// Nb of new points on curve     (phase==1)
    34733050
    3474 
    3475                                 //    cout.precision(16);
    34763051                                for(int phase=0;phase<=step;phase++)
    34773052                                  {
     
    35643139                                                                         A1->ReferenceNumber = eeequi.ref;
    35653140                                                                         A1->DirOfSearch =NoDirOfSearch;
    3566                                                                          //cout << icurveequi << " " << i << " " <<  *A1 << endl;
    35673141                                                                         e->on = ongequi;
    35683142                                                                         e->v[0]=  A0;
    35693143                                                                         e->v[1]=  A1;
    3570                                                                          if(verbosity>99)
    3571                                                                           cout << i << "+ New P "<< nbv-1 << " "  <<sNew<< " L0=" << L0
    3572                                                                                  << " AB=" << LAB << " s=" << (sNew-L0)/LAB << " se= " 
    3573                                                                                  << se <<" B edge " << BTh.Number(ee) << " signe = " << k1 <<" " << A1->r <<endl;
    3574 
    35753144                                                                         e->ref = eeequi.ref;
    35763145                                                                         e->adj[0]=PreviousNewEdge;
     
    35813150                                                                         A0=A1;
    35823151                                                                         sNew += Lstep;
    3583                                                                          //   cout << " sNew = " << sNew << " L = " << L
    3584                                                                          //        << "  ------" <<NbCreatePointOnCurve << " " << i <<  endl;
    35853152                                                                         if (++i== NbCreatePointOnCurve) break;
    35863153                                                                 }
     
    35903157                                                                 throw ErrorException(__FUNCT__,exprintf("ee.on->CurveNumber!=ei.on->CurveNumber"));
    35913158                                                         }
    3592                                                          if(verbosity>98) cout <<  BTh.Number(ee) << " " << " on=" << *ee[k1].on << " "<< ee[k1].on->IsRequiredVertex() <<  endl;
    35933159                                                         if ( ee[k1].on->IsRequiredVertex()) {
    35943160                                                                 if (!eeequi[k1equi].on->IsRequiredVertex()){
     
    36143180                                                  {
    36153181                                                        Edge *e = edges + nbe++;
    3616                                                         if (verbosity>10)
    3617                                                          cout << " Fin curve A1" << *A1 << " " << icurve << " <=> " << icurveequi <<"-----" <<
    3618                                                                 NbCreatePointOnCurve << " == " <<i<<endl;
    36193182                                                        e->on  = ongequi;
    36203183                                                        e->v[0]=  A0;
     
    36453208                                                        NbOfNewPoints += NbCreatePointOnCurve;
    36463209                                                  }
    3647                                                 if(verbosity>5)
    3648                                                  cout << icurve << " NbSegOnCurve = " <<  NbSegOnCurve << " Lstep="
    3649                                                         << Lstep <<" " << NbOfNewPoints<< " NBPC= " << NbCreatePointOnCurve <<endl;
    36503210                                                // do'nt
    36513211                                                //  if(NbCreatePointOnCurve<1) break;
     
    37193279                         Gh[i].to = vertices + nbv;// save Geom -> Th
    37203280                         VerticesOnGeomVertex[nbv]= VertexOnGeom(*Gh[i].to,Gh[i]);
    3721                          //  cout << "--------- "  <<Number(Gh[i].to) << " " << Gh[i].to << " " << i << endl;
    37223281                         nbv++;
    37233282                 }
     
    37383297                        nbe = 0;
    37393298                        Int4 NbVerticesOnGeomEdge0=NbVerticesOnGeomEdge;
    3740                         //  cout <<  "  -------------- step =" << step << endl;
    37413299                        Gh.UnMarkEdges();       
    37423300                        NbOfCurves = 0;
     
    37473305                                  if (!ei.Mark() && ei[j].Required()) {
    37483306                                          // warning ei.Mark() can be change in loop for(j=0;j<2;j++)
    3749                                           //  cout << " New curve = " << NbOfCurves << endl;
    37503307                                          Int4 nbvend  =0;
    37513308
     
    37943351                                                          va = a->to;
    37953352                                                          e->SetMark();
    3796                                                           //  cout << " New curve " ;
    37973353
    37983354                                                          // if SameGeo  We have go in the background geometry
     
    38183374                                                                          A= a->r;
    38193375                                                                          Metric MAs =MA,MBs;
    3820                                                                           // cout << " lSubEdge old=" << ledge
    3821                                                                           //      << " new " << A << MA << endl;
    38223376                                                                          ledge = 0;
    38233377                                                                          Real8 x =0, xstep= 1. /  NbSubEdge;
     
    38283382                                                                                  AB = A-B;
    38293383                                                                                  lSubEdge[kk]= (ledge += (MAs(AB)+MBs(AB))/2);
    3830                                                                                   // cout << "     " << lSubEdge[kk] << " x " << x 
    3831                                                                                   //      << " " << A << B << MA << MB<< endl ;
    38323384                                                                          }
    3833                                                                           //  cout << endl;
    38343385                                                                  }
    38353386
     
    38843435                                                                  lcurve = lcurveb;
    38853436                                                                  e->SetMark();
    3886                                                                   // cout << e-Gh.edges << ", " << k << " "
    3887                                                                   //      <<(*e)[k].r <<" " <<(*e)[1-k].r <<" "
    3888                                                                   //      << lcurve<< ";; " ;                         
    38893437                                                                  a=b;
    38903438                                                                  if (b->Required() ) break;
     
    38973445                                                                 }// for(;;)
    38983446                                                          vb = b->to;
    3899                                                           //            cout << endl;
    39003447                                                          NbEdgeCurve = Max((Int4) (lcurve +0.5), (Int4) 1);
    39013448                                                          NbNewPoints = NbEdgeCurve-1;
     
    39073454
    39083455                                                                  lstep = lcurve / NbEdgeCurve;
    3909                                                                   //   cout <<"lstep " << lstep << " lcurve "
    3910                                                                   //    << lcurve << " NbEdgeCurve " << NbEdgeCurve << " " <<NbVerticesOnGeomEdge0<<" " <<NbVerticesOnGeomEdge<<" step =" <<step<<  endl;
    39113456                                                         }
    39123457                                                  // end of curve --
     
    39793524                         int j= ii;
    39803525                         while (!(*on)[j].Required()) {
    3981                                  //     cout << i << " " << ii << " j= " << j << " curve = "
    3982                                  //           <<  on->CurveNumber << "  " << Gh.Number(on) << " on " << j
    3983                                  //   << " s0 " << Gh.Number( (*on)[0]) << " s1  " << Gh.Number( (*on)[1])
    3984                                  //   << " ->  " ;
    39853526                                 Adj(on,j); // next geom edge
    39863527                                 j=1-j;
    3987                                  //       cout << Gh.Number(on) << "  " << j  << " e[ON] =  " <<  e[Gh.Number(on)]
    3988                                  //    << " s0 " << Gh.Number( (*on)[0]) << " s1  " << Gh.Number( (*on)[1]) << endl;
    39893528                                 if (e[Gh.Number(on)])  break; // optimisation     
    39903529                                 e[Gh.Number(on)] = ei;
     
    39933532
    39943533                int kk=0;
    3995                 for ( i=0;i<Gh.nbe ; i++)
    3996                  if (!e[i])
    3997                   if(kk++<10) {
    3998                           cerr << " Bug -- the geometrical edge " << i << " is on no edge curve = " << Gh.edges[i].CurveNumber
    3999                                  << " s0 " << Gh.Number( Gh.edges[i][0]) << " s1  " << Gh.Number( Gh.edges[i][1]) << endl;
    4000                   }
     3534                for ( i=0;i<Gh.nbe ; i++){
     3535                        if (!e[i]){
     3536                                kk++;
     3537                                if(kk<10) printf("BUG: the geometrical edge %i is on no edge curve\n",i);
     3538                        }
     3539                }
    40013540                if(kk) throw ErrorException(__FUNCT__,exprintf("See above"));
    40023541
     
    42173756                                 for (Int4 icount=2; icount<nbvb; icount++) {
    42183757                                         Vertex *vi  = ordre[icount];
    4219                                          //       cout << " Add vertex " <<  Number(vi) << endl;
    42203758                                         Icoor2 dete[3];
    42213759                                         Triangle *tcvi = FindTriangleContening(vi->i,dete);
     
    43223860                                 triangles = savetriangles;
    43233861                                 subdomains = savesubdomains;
    4324                                  //      cout <<  triangles << " <> " << OutSidesTriangles << endl;
    4325                                  /*      k=0;
    4326                                                  for (i=0;i<nbt;i++)
    4327                                                  for (int j=0;j<3;j++)
    4328                                                  if (!triangles[i].TriangleAdj(j))
    4329                                                  k++;
    4330                                                  */
    43313862                                 if (k) {
    43323863                                         throw ErrorException(__FUNCT__,exprintf("number of triangles edges alone = %i",k));
    43333864                                 }
    43343865                                 FindSubDomain();
    4335                                  // cout << " NbTOld = " << NbTold << " ==  " << nbt - NbOutT << " " << nbt << endl;
    43363866
    43373867                                 delete edge4;
     
    43473877                                         if (!edges[i].adj[j])
    43483878                                          if(!edges[i][j].on->IsRequiredVertex()) {
    4349                                                   cerr << " Erreur adj et sommet requis edges [" << i <<  "][ " << j << "]= "
    4350                                                          <<  Number(edges[i][j]) << " : "  << " on = " << Gh.Number(edges[i].on) ;
    4351                                                   if (edges[i][j].on->OnGeomVertex())
    4352                                                         cerr << " vertex " << Gh.Number(edges[i][j].on->gv);
    4353                                                   else if (edges[i][j].on->OnGeomEdge())
    4354                                                         cerr << "Edges " << Gh.Number(edges[i][j].on->ge);
    4355                                                   else
    4356                                                         cerr << " = " << edges[i][j].on ;
    4357                                                   cerr << endl;
     3879                                                  throw ErrorException(__FUNCT__,exprintf("adj and vertex required esge(?)"));
    43583880                                          }
    43593881                  }
     
    43723894                jp = aa[jp]&3;
    43733895                do {
    4374                         //    cout << *t << " " <<  j  << "\n\t try swap " ;
    43753896                        while (t->swap(j,koption))
    43763897                          {
     
    43823903                                t=  tp->at[jp];      // set unchange t qnd j for previous triangles
    43833904                                j=  NextEdge[tp->aa[jp]&3];
    4384                                 //   cout << "\n\t s  " <<  *t << " " << j << endl;
    43853905                          }
    43863906                        // end on this  Triangle
     
    44163936                for ( k=0;k<NbVerticesOnGeomEdge;k++ )
    44173937                 tstart[ Number(VerticesOnGeomEdge[k].mv)]=&vide;
    4418                 if(verbosity>2)
    4419                  cout << "  -- SmoothingVertex: nb Iteration = " << nbiter << " Omega = " << omega << endl;
     3938                if(verbosity>2) printf("   SmoothingVertex: nb Iteration = %i, Omega=%g\n",nbiter,omega);
    44203939                for (k=0;k<nbiter;k++)
    44213940                  {
     
    44293948                          if (tstart[i] != &vide) // not a boundary vertex
    44303949                                NbSwap += vertices[i].Optim(1);
    4431                         if (verbosity>3)
    4432                          cout << "    Move max = " <<  sqrt(delta) << " iteration = "
    4433                                 << k << " Nb of Swap = " << NbSwap << endl;
     3950                        if (verbosity>3) printf("      move max = %g, iteration = %i, nb of swap = %i\n",pow(delta,0.5),k,NbSwap);
    44343951                  }
    44353952
     
    44413958        void Triangles::MakeQuadTree() { 
    44423959                long int verbosity=0;
    4443                 if(verbosity>8)
    4444                  cout << "      MakeQuadTree" << endl;
    44453960                if (  !quadtree )  quadtree = new QuadTree(this);
    44463961
     
    44543969                D2xD2 Br(D2xD2(Beq,Heq).t());
    44553970                D2xD2 B1r(Br.inv());
    4456                 /*   D2xD2 BB = Br.t()*Br;
    4457                           cout << " BB = " << BB << " " << Br*B1r <<  endl;
    4458                           MetricAnIso MMM(BB.x.x,BB.x.y,BB.y.y);
    4459                           MatVVP2x2 VMM(MMM);
    4460                           cout << " " << VMM.lambda1 << " " << VMM.lambda2 <<  endl;
    4461                           */
    44623971                double gammamn=1e100,hmin=1e100;
    44633972                double gammamx=0,hmax=0;
     
    44843993                         MatVVP2x2 VMK(MK);
    44853994                         alpha2 = Max(alpha2,Max(VMK.lambda1/VMK.lambda2,VMK.lambda2/VMK.lambda1));
    4486                          // cout << B_K << " * " << B1r << " == " << BK << " " << B_K*B_K.inv() << endl;
    44873995                         Real8 betaK=0;
    44883996
     
    44994007                                 MetricAnIso M1(BMB.x.x,BMB.x.y,BMB.y.y);
    45004008                                 MatVVP2x2 VM1(M1);
    4501                                  //cout << B_K <<" " <<  M << " " <<  he << " " << BMB << " " << VM1.lambda1 << " " << VM1.lambda2<<   endl;
    45024009                                 gammamn=Min3(gammamn,VM1.lambda1,VM1.lambda2);
    45034010                                 gammamx=Max3(gammamx,VM1.lambda1,VM1.lambda2);         
     
    45054012                         betaK *= area3;//  1/2 (somme sqrt(det))* area(K)
    45064013                         Marea+= betaK;
    4507                          // cout << betaK << " " << area3 << " " << beta << " " << beta0 << " " << area3*3*3*3 <<endl;
    45084014                         beta=min(beta,betaK);
    45094015                         beta0=max(beta0,betaK);
     
    45124018                gammamn=sqrt(gammamn);
    45134019                gammamx=sqrt(gammamx);   
    4514                 cout << "  -- adaptmesh Regulary:  Nb triangles " << nt <<  " , h  min " << hmin  << " , h max " << hmax << endl; 
    4515                 cout << "     area =  " << area << " , M area = " << Marea << " , M area/( |Khat| nt) " << Marea/(aireKh*nt) << endl;
    4516                 cout << "     infiny-regulaty:  min " << gammamn << "  max " << gammamx << endl; 
    4517                 cout << "     anisomax  "<< sqrt(alpha2) << ", beta max = " << 1./sqrt(beta/aireKh)
    4518                   << " min  "<<  1./sqrt(beta0/aireKh)  << endl;
     4020                printf("   Adaptmesh info:\n");
     4021                printf("      number of triangles = %i\n",nt);
     4022                printf("      hmin = %g, hmax=%g\n",hmin,hmax);
     4023                printf("      area = %g, M area = %g, M area/( |Khat| nt) = %g\n",area,Marea, Marea/(aireKh*nt));
     4024                printf("      infinite-regularity(?): min = %g, max = %g\n",gammamn,gammamx);
     4025                printf("      anisomax = %g, beta max = %g, min = %g\n",pow(alpha2,0.5),1./pow(beta/aireKh,0.5), 1./pow(beta0/aireKh,0.5));
    45194026        }
    45204027        /*}}}1*/
     
    45494056                                }
    45504057                        } 
    4551                 cout << "  -- Histogram of the unit mesh,  nb of edges" << nbedges << endl <<endl;
    4552 
    4553                 cout << "        length of edge in   | % of edge  | Nb of edges " << endl;
    4554                 cout << "        ------------------- | ---------- | ----------- " << endl;
    4555                 for   (i=0;i<=kmax;i++)
    4556                   {
    4557                         cout << "    " ;
    4558                         cout.width(10);
    4559                         if (i==0) cout  << " 0 " ;
    4560                         else cout  << exp(lmin+i/delta) ;
    4561                         cout.width(); cout << "," ;
    4562                         cout.width(10);
    4563                         if (i==kmax) cout << " +infty " ;
    4564                         else cout  << exp(lmin+(i+1)/delta) ;
    4565                         cout.width();cout << "   |   " ;
    4566 
    4567                         cout.precision(4);
    4568                         cout.width(6);
    4569                         cout <<  ((long)  ((10000.0 * histo[i])/ nbedges))/100.0 ;
    4570                         cout.width();
    4571                         cout.precision();
    4572                         cout <<  "   |   " << histo[i] <<endl;
     4058                printf(" --- Histogram of the unit mesh,  nb of edges = %i\n",nbedges);
     4059                printf("      length of edge in   | %% of edge  | Nb of edges \n");
     4060                printf("      --------------------+-------------+-------------\n");
     4061                for   (i=0;i<=kmax;i++){
     4062                        if (i==0) printf("      %10i",0);
     4063                        else      printf("      %10g",exp(lmin+i/delta));
     4064                        if (i==kmax) printf("          +inf   ");
     4065                        else printf("      %10g",exp(lmin+(i+1)/delta));
     4066                        printf("|  %10g |\n",((long)  ((10000.0 * histo[i])/ nbedges))/100.0);
     4067                        printf("  %g\n",histo[i]);
    45734068                  }
    4574                 cout << "        ------------------- | ---------- | ----------- " << endl <<endl;
    4575 
     4069                printf("      --------------------+-------------+-------------\n");
    45764070        }
    45774071        /*}}}1*/
     
    46054099                if( k==0) return 0;
    46064100                CurrentTh = this;
    4607                 cout << " Nb of Cracked Edges = " << k << endl;
     4101                printf("      number of Cracked Edges = %i\n",k);
    46084102                NbCrackedEdges =k;
    46094103                CrackedEdges = new  CrackedEdge[k];
     
    46894183
    46904184                //  set the ref
    4691                 cout << " set the ref " <<  endl ;
    46924185                NbCrackedVertices =   nbcrakev;
    46934186                // int nbvo = nbv;
    46944187                nbv = vlast - vertices;
    46954188                int nbnewv =  nbv - nbv; // nb of new vrtices
    4696                 if (nbcrakev && verbosity > 1 )
    4697                  cout << " Nb of craked vertices = " << nbcrakev << " Nb of created vertices " <<   nbnewv<< endl;
     4189                if (nbcrakev && verbosity > 1 ) printf("      number of Cracked vertices = %i, number of created vertices = %i\n",nbcrakev,nbnewv);
    46984190                // all the new vertices are on geometry
    4699                 //  BOFBO--  A VOIR
    47004191                if (nbnewv)
    47014192                  { //
     
    47384229                        throw ErrorException(__FUNCT__,exprintf("Not enougth vertices: to crack the mesh we need %i vertices",nbv));
    47394230                  }
    4740                 cout << "  NbCrackedVertices " <<  NbCrackedVertices << endl;
    47414231                CurrentTh = CurrentThOld;
    47424232                return  NbCrackedVertices;
     
    48354325        void Triangles::IntersectGeomMetric(const Real8 err=1,const int iso=0){
    48364326                long int verbosity=0;
    4837 
    4838                 if(verbosity>1)
    4839                  cout << "  -- IntersectGeomMetric geometric err=" << err << (iso ? " iso " : " aniso "  ) << endl;
    48404327                Real8 ss[2]={0.00001,0.99999};
    48414328                Real8 errC = 2*sqrt(2*err);
     
    48544341                         Vertex V;
    48554342                         VertexOnGeom GV;
    4856                          // cerr << Number(edges[i]) << " " << ss[j] << endl;
    48574343                         Gh.ProjectOnCurve(edges[i],ss[j],V,GV);
    48584344                                {
     
    48704356                                 }
    48714357                                 MatVVP2x2 Vp(1/(ht*ht),1/(hn*hn),tg);
    4872                                  //cerr << " : " ;
    48734358                                 Metric MVp(Vp);
    4874                                  // cerr << " : "  << MVp  << endl;
    48754359                                 edges[i][j].m.IntersectWith(MVp);
    4876                                  //cerr << " . " << endl;
    48774360                                }
    48784361
     
    48864369
    48874370                double lminaniso = 1/ (Max(hminaniso*hminaniso,1e-100));
    4888                 if (verbosity > 1)
    4889                  cout << "  -- BoundAnisotropy by  " << anisomax << endl;
     4371                if (verbosity > 1)  printf("   BoundAnisotropy by %g\n",anisomax);
    48904372                Real8 h1=1.e30,h2=1e-30,rx=0;
    48914373                Real8 coef = 1./(anisomax*anisomax);
     
    49134395                  }
    49144396
    4915                 if (verbosity>2)
    4916                   {
    4917                         cout << "     input :  Hmin = " << sqrt(1/h2)  << " Hmax = " << sqrt(1/h1)
    4918                           << " factor of anisotropy max  = " << sqrt(rx) << endl;
    4919                         cout << "     output:  Hmin = " << sqrt(1/hn2) << " Hmax = " << sqrt(1/hn1)
    4920                           << " factor of anisotropy max  = " << sqrt(rnx) << endl;
     4397                if (verbosity>2){
     4398                        printf("      input:  Hmin = %g, Hmax = %g, factor of anisotropy max  = %g\n",pow(h2,-0.5),pow(h1,-0.5),pow(rx,0.5));
     4399                        printf("      output: Hmin = %g, Hmax = %g, factor of anisotropy max  = %g\n",pow(hn2,-0.5),pow(hn1,-0.5),pow(rnx,0.5));
    49214400                  }
    49224401        }
     
    49604439                Real8 coef2 = 1/(coef*coef);
    49614440
    4962                 if(verbosity>1)
    4963                   {
    4964                         cout << "  -- Construction of Metric: Nb of field. " << n << " nbt = "
    4965                           << nbt << " nbv= " << nbv
    4966                           << " coef = " << coef << endl
    4967                           << "     hmin = " << hmin << " hmax=" << hmax
    4968                           << " anisomax = " << anisomax <<  " Nb Jacobi " << NbJacobi << " Power = " << power ;
    4969                         if (RelativeMetric)
    4970                          cout << " RelativeErr with CutOff= "  <<  CutOff << endl;
    4971                         else
    4972                          cout << " Absolute Err" <<endl;
     4441                if(verbosity>1) {
     4442                        printf("   Construction of Metric: number of field: %i (nbt=%i, nbv=%i)\n",n,nbt,nbv);
     4443                        printf("      coef = %g\n",coef);
     4444                        printf("      hmin = %g hmax = %g\n",hmin,hmax);
     4445                        printf("      anisomax = %g nb Jacobi = %i, power = %i\n",anisomax,NbJacobi,power);
     4446                        if (RelativeMetric) printf("      RelativeErr with CutOff= %g\n",CutOff);
     4447                        else printf("      Absolute error\n");
    49734448                  }
    4974                 double *ss=(double*)s;//, *ssiii = ss;
     4449                double *ss=(double*)s;
    49754450
    49764451                double sA,sB,sC;
     
    50704545                        Real8 cnorm = DoNormalisation ? coef2/sdelta : coef2;
    50714546
    5072                         if(verbosity>2)
    5073                          cout << "    Solution " << nusol <<  " Min = " << smin << " Max = "
    5074                                 << smax << " Delta =" << sdelta << " cnorm = " << cnorm <<  " Nb of fields =" << nbfield << endl;
    5075 
    5076 
    5077                         if ( sdelta < 1.0e-10*Max(absmax,1e-20) && (nbfield ==1))
    5078                           {
    5079                                 if (verbosity>2)
    5080                                  cout << "      Solution " << nusol << " is constant. We skip. "
    5081                                         << " Min = " << smin << " Max = " << smax << endl;
     4547                        if(verbosity>2) printf("      Solution %i, Min = %g, Max = %g, Delta = %g, cnorm = %g, number of fields = %i\n",nusol,smin,smax,sdelta,cnorm,nbfield);
     4548
     4549                        if ( sdelta < 1.0e-10*Max(absmax,1e-20) && (nbfield ==1)) {
     4550                                if (verbosity>2) printf("      Solution %i is constant, skipping...\n");
    50824551                                continue;
    50834552                          }
     
    51444613                                                                 taa[1][j] =  lC*lA;
    51454614                                                                 taa[2][j] =  lA*lB;
    5146                                                                  //Real8 xx = V.x-V.y;
    5147                                                                  //Real8 yy = V.x + V.y;
    5148                                                                  //cout << " iv " << ss[iV*n] << " == " << (8*xx*xx+yy*yy)
    5149                                                                  //     << " l = " << lA << " " << lB << " " << lC
    5150                                                                  //     << " = " << lA+lB+lC << " " <<  V << " == " << A*lA+B*lB+C*lC << endl;
    5151 
    51524615                                                                 lla = lA,llb=lB,llc=lC,llf=ss[iV*n] ;
    51534616
     
    51844647                                                 Real8 coef = 1.0/(3*dd*det33);
    51854648                                                 Real8 coef2 = 2*coef;
    5186                                                  //     cout << " H = " << Hxx << " " << Hyy << " " <<  Hxy/2 << " coef2 = " << coef2 << endl;
    51874649                                                 Hxx *= coef2;
    51884650                                                 Hyy *= coef2;
    51894651                                                 Hxy *= coef2;
    5190                                                  //cout << i  << " H = " << 3*Hxx/dd << " " << 3*Hyy/dd << " " <<  3*Hxy/(dd*2) << " nbb = " << nbb << endl;
    51914652                                                 if(nbb==0)
    51924653                                                        {
     
    52454706                                         Metric M(dxdx[iv], dxdy[iv], dydy[iv]);
    52464707                                         MatVVP2x2 Vp(M);
    5247                                          //cout <<iv <<  "  M  = " <<  M <<  " aniso= " << Vp.Aniso() ;
    52484708                                         Vp.Abs();
    52494709                                         M = Vp;
     
    52514711                                         dxdy[iv] = M.a21;
    52524712                                         dydy[iv] = M.a22;
    5253                                          //  cout << " (abs)  iv M  = " <<  M <<  " aniso= " << Vp.Aniso() <<endl;
    52544713                                        }
    52554714                                 else kk++;
     
    53114770                                for ( iv=0,k=0 ; iv<nbv; iv++,k+=n )
    53124771                                  { // for all vertices
    5313                                         //{
    5314                                         //Metric M(dxdx[iv], dxdy[iv], dydy[iv]);
    5315                                         // MatVVP2x2 Vp(M);       
    5316                                         //cout << " iv M="<<  M << "  Vp = " << Vp << " aniso  " << Vp.Aniso() << endl;
    5317                                         //}
    53184772                                        MetricIso Miso;
    5319                                         // new code to compute ci ---     
    53204773                                        Real8 ci ;
    53214774                                        if (RelativeMetric)
     
    53294782                                        else ci = cnorm;
    53304783
    5331                                         // old
    5332                                         //        Real8 ci = RelativeMetric ? coef2/(Max(Abs(ss[k]),rCutOff)) : cnorm ;
    5333                                         //   modif F Hecht 101099
    53344784                                        Metric Miv(dxdx[iv]*ci, dxdy[iv]*ci,  dydy[iv]*ci);
    53354785                                        MatVVP2x2 Vp(Miv);
     
    53584808                                        vertices[iv].m.IntersectWith(MVp);
    53594809                                  }// for all vertices
    5360                                 if (verbosity>2)
    5361                                   {
    5362                                         cout << "              Field " << nufield << " of solution " << nusol  << endl;
    5363                                         cout << "              before bounding :  Hmin = " << sqrt(1/h2) << " Hmax = "
    5364                                           << sqrt(1/h1)  << " factor of anisotropy max  = " << sqrt(rx) << endl;
    5365                                         cout << "              after  bounding :  Hmin = " << sqrt(1/hn2) << " Hmax = "
    5366                                           << sqrt(1/hn1)  << " factor of anisotropy max  = " << sqrt(rnx) << endl;
     4810                                if (verbosity>2) {
     4811                                        printf("      Field %i of solution %i\n",nufield,nusol);
     4812                                        printf("         before bounding : Hmin = %g, Hmax = %g, factor of anisotropy max = %g\n",pow(h2,-0.5), pow(h1,-0.5), pow(rx,0.5));
     4813                                        printf("         after  bounding : Hmin = %g, Hmax = %g, factor of anisotropy max = %g\n",pow(hn2,-0.5),pow(hn1,-0.5),pow(rnx,0.5));
    53674814                                  }
    53684815                          } //  end of for all field
     
    53864833
    53874834                const  Real8 maxsubdiv2 = maxsubdiv*maxsubdiv;
    5388                 if(verbosity>1)
    5389                  cout << "  -- Limit the subdivision of a edges in the new mesh by " << maxsubdiv <<   endl  ;
     4835                if(verbosity>1) printf("   Limit the subdivision of a edges in the new mesh by %g\n",maxsubdiv);
    53904836                // for all the edges
    53914837                // if the len of the edge is to long
     
    54344880                          }
    54354881                  }
    5436                 if(verbosity>3)
    5437                  cout << "    Nb of metric change = " << nbchange
    5438                         << " Max  of the subdivision of a edges before change  = " << sqrt(lmax) << endl;
    5439 
     4882                if(verbosity>3){
     4883                        printf("      number of metric changes = %i, maximum number of subdivision of a edges before change = %g\n",nbchange,pow(lmax,0.5));
     4884                }
    54404885        }
    54414886        /*}}}1*/
     
    54454890
    54464891                if(raisonmax<1.1) return;
    5447                 if(verbosity > 1)
    5448                  cout << "  -- Triangles::SmoothMetric raisonmax = " << raisonmax << " " <<nbv <<endl;
     4892                if(verbosity > 1) printf("   Triangles::SmoothMetric raisonmax = %g\n",raisonmax);
    54494893                ReMakeTriangleContainingTheVertex();
    54504894                Int4 i,j,kch,kk,ip;
     
    54644908                        for (i=Head0;i>=0;i=first_np_or_next_t0[ip=i],first_np_or_next_t0[ip]=-1) {
    54654909                                //  pour tous les triangles autour du sommet s
    5466                                 //      cout << kk << " i = " << i << " " << ip << endl;
    54674910                                register Triangle* t= vertices[i].t;
    54684911                                if (!t){
     
    54914934                                                          {
    54924935                                                                Real8 dh=(hj-hi)/ll;
    5493                                                                 //cout << " dh = " << dh << endl;
    54944936                                                                if (dh>logseuil) {
    54954937                                                                        vj.m.IntersectWith(vi.m/(1 +logseuil*ll/hi));
     
    55024944                                                  {
    55034945                                                        Real8 li = vi.m(Aij);
    5504                                                         //Real8 lj = vj.m(Aij);
    5505                                                         //              if ( i == 2 || j == 2)
    5506                                                         //  cout << " inter " << i << " " << j << " " << ((1 +logseuil*li)) <<  endl;
    55074946                                                        if( vj.m.IntersectWith(vi.m/(1 +logseuil*li)) )
    5508                                                          //if( vj.m.IntersectWith(vi.m*(lj/li/(1 +logseuil*lj))) )
    55094947                                                         if(first_np_or_next_t1[j]<0) // if the metrix change
    55104948                                                          kch++,first_np_or_next_t1[j]=Head1,Head1=j;
     
    55174955                        Head1 = -1;
    55184956                        Exchange(first_np_or_next_t0,first_np_or_next_t1);
    5519                         if(verbosity>5)
    5520                          cout << "     Iteration " << kk << " Nb de  vertices with change  " << kch << endl;
    5521                 }
    5522                 if(verbosity>2 && verbosity < 5)
    5523                  cout << "    Nb of Loop " << kch << endl;
     4957                }
     4958                if(verbosity>2) printf("      number of iterations = %i\n",kch);
    55244959                delete [] first_np_or_next_t0;
    55254960                delete [] first_np_or_next_t1;
     
    55995034                        strcat(strcat(identity,";"),countbuf);
    56005035                        strcat(identity,buf);
    5601                         // cout << "New MAILLAGE "<< identity << endl;
    56025036                  }
    56035037
    56045038                quadtree=0;
    5605                 //  edgescomponante=0;
    56065039                edges=0;
    56075040                VerticesOnGeomVertex=0;
     
    56095042                NbVerticesOnGeomVertex=0;
    56105043                NbVerticesOnGeomEdge=0;
    5611                 //  nbMaxIntersectionTriangles=0;
    5612                 //  lIntTria;
    56135044                subdomains=0;
    56145045                NbSubDomains=0;
    5615                 //  Meshbegin = vertices;
    5616                 //  Meshend  = vertices + nbvx;
    5617                 if (verbosity>98)
    5618                  cout << "Triangles::PreInit() " << nbvx << " " << nbtx
    5619                         << " " << vertices
    5620                         << " " << ordre << " " <<  triangles <<endl;
    56215046        }
    56225047        /*}}}1*/
     
    57245149                        I2 I=vI, J=vJ, IJ= J-I;
    57255150                        IJ_IA = (IJ ,(A-I));
    5726                         //   cout << A << vI.i << vJ.i << edge << " " <<  IJ_IA << " dir " << dir <<endl;
    57275151                        if (IJ_IA<0) {
    57285152                                if (dir>0) {a=1;b=0;return edge;}// change of signe => I
     
    57405164                                                        a= IJ_AJ/IJ2;
    57415165                                                        b= IJ_IA/IJ2;
    5742                                                         //    cout<< "CloseBoundaryEdge a = " << a << " b= " << b << endl;
    57435166                                                        return edge;
    57445167                  }
     
    57865209                                if ( (d2=(double) ACAC)  <  dd2)
    57875210                                  {
    5788                                         //  cout << " A "  << d2  << " " <<  dd2;
    57895211                                        er = ta;
    57905212                                        l0 = ACAC;
     
    57985220                                if ( (d2=(double) BCBC)  <  dd2)
    57995221                                  {
    5800                                         // cout << " B "  << d2  << " " <<  dd2;
    58015222                                        dd2 = d2;
    58025223                                        er = Adj(ta); // other direction
     
    58225243                                        s = 0;
    58235244                                        cas = -1;
    5824                                         //       cout << " ABAC " <<  ABAC << " ABAC " << ABAC
    5825                                         //            << " AB2 " << AB2 << endl;
    58265245                                        b = ((double) ABAC/(double) AB2);
    58275246                                        a = 1 - b;
     
    59115330                        if ( o < oo)
    59125331                         o=oo,pi=BigPrimeNumber[i];}
    5913                         //  cout << " AGoodNumberPrimeWith " << n << " " <<pi << " "<< o << endl;
    59145332                        return pi;
    59155333        }
     
    60505468                        }
    60515469                        det2 = det(*v2,a,b);
    6052                         //   cout << " No Change try the next" << endl;
    60535470                }
    60545471
     
    60685485                                }
    60695486                                Icoor2 detss = 0,l=0,ks;
    6070                                 // cout << "Real ForcingEdge " << *va << *vb << detss << endl;
    60715487                                while ((ks=SwapForForcingEdge(  va,  vb, tc, detss, det1,det2,NbSwap)))
    60725488                                 if(l++ > 10000000) {
Note: See TracChangeset for help on using the changeset viewer.