Go to the documentation of this file.
352 unsigned int mID, double *goal, unsigned int nv,
354 double *pl, unsigned int *ns, double ***path, Tatlas *a);
396 unsigned int cmID, unsigned int parentID, Tatlas *a);
660 unsigned int xID, unsigned int yID, unsigned int zID, Tatlas *a);
815 printf( " Not in Boundary : %u (%3.2f)\n",
819 printf( " Errors : %u (%3.2f)\n",
822 printf( " Errors (Sing) : %u (%3.2f)\n",
825 printf( " Large Error : %u (%3.2f)\n",
828 printf( " Non-regular point : %u (%3.2f)\n",
831 printf( " Not in Manifold : %u (%3.2f)\n",
834 printf( " Decomp. Error : %u (%3.2f)\n",
837 printf( " Far From Parent : %u (%3.2f)\n",
840 printf( " Radius Changes : %u (%3.2f)\n",
843 printf( " Collisions : %u (%3.2f)\n",
846 printf( " Good ones : %u (%3.2f)\n",
852 printf( "Bifurcation detection disabled\n");
861 printf( " Correct jumps : %u (%3.2f)\n",
864 printf( " Num Small angle : %u (%3.2f)\n",ast-> nSmallAngle,
866 printf( " Missed singular points: %u (%3.2f)\n",ast-> nSPMissed,
893 for(i=0;((!found)&&(i<a->currentChart));i++)
908 for(i=a-> npCharts;i<a->currentChart;i++)
911 Warning( "Bifurcation undetected in PostProcessNewCharts. Redude epsilon?");
934 if ( Norm(a-> k,t)<0.99*a-> r)
939 boolean canContinue,chartCreated,smallError,closeEnough,wrong,outOfDomain;
941 unsigned int chartCode;
963 memcpy(ct,t,a-> k* sizeof( double));
971 a-> m,a-> k,pt,a-> e,a-> ce,a-> r,&(a-> J),a-> w,
973 chartCreated=(chartCode==0);
990 wrong=((!smallError)||(!chartCreated)||(!closeEnough));
1008 } while((!outOfDomain)&&(wrong)&&(canContinue));
1011 if ((outOfDomain)||(!canContinue))
1029 boolean canContinue,canInitChart,smallError,closeEnough,wrong;
1030 boolean searchBorder,inside;
1033 unsigned int chartCode;
1035 #if (!SIMPLE_BORDER)
1036 boolean outOfDomain;
1042 NEW(pt,a-> m, double);
1050 NEW(ct,a-> k, double);
1054 inside=( Norm(a-> k,t)<0.99*a-> r);
1064 #if (!SIMPLE_BORDER)
1075 memcpy(ct,t,a-> k* sizeof( double));
1086 #if (!SIMPLE_BORDER)
1098 a-> m,a-> k,pt,a-> e,a-> ce,a-> r,&(a-> J),a-> w,
1100 canInitChart=(chartCode==0);
1108 #if (!SIMPLE_BORDER)
1112 #if (!SIMPLE_BORDER)
1119 #if (!SIMPLE_BORDER)
1150 Error( "Unknown chart creation error code");
1161 wrong=((searchBorder)||(!smallError)||(!canInitChart)||(!closeEnough));
1201 } while((wrong)&&(canContinue));
1205 #if (!SIMPLE_BORDER)
1221 printf( " Could not extend singular chart\n");
1232 printf( " New Chart %u [p:%u]\n",a-> currentChart,parentID);
1257 boolean collisionStops,
1261 double *tp,*pt,*ptGood;
1263 boolean moved,inCollision,canInitChart,smallError,closeEnough;
1265 unsigned int chartCode;
1266 double currentDelta;
1269 NEW(pt,a-> m, double);
1270 NEW(tp,a-> k, double);
1274 NEW(ptGood,a-> m, double);
1300 memcpy(tp,t,a-> k* sizeof( double));
1308 a-> m,a-> k,pt,a-> e,a-> ce,a-> r,
1309 &(a-> J),a-> w,&mTmp);
1310 canInitChart=(chartCode==0);
1332 memcpy(ptGood,pt, sizeof( double)*a-> m);
1336 if (currentDelta!=delta)
1365 Error( "Unknown chart creation error code");
1375 if ((!moved)&&(!inCollision))
1378 if (currentDelta<=delta)
1380 if (currentDelta>epsilon)
1414 currentDelta=5*delta;
1423 } while((smallError)&&(canInitChart)&&(closeEnough)&&(!inCollision));
1433 printf( " Could not jump over a singularity (decrease epsilon?)");
1439 Error( " The impossible happened (II)");
1453 a-> m,a-> k,ptGood,a-> e,a-> ce,a-> r,
1455 Error( "Can not create a chart already created just above?");
1473 unsigned int mID, double *goal, unsigned int nv,
1474 boolean *systemVars,
1475 double *pl, unsigned int *ns, double ***path, Tatlas *a)
1477 unsigned int nvs,i,k;
1479 unsigned int *chartID;
1508 NEW(chartID,k, unsigned int);
1520 cp=a-> charts[chartID[0]];
1526 printf( " Step to %u %f\n",chartID[i], Norm(a-> k,t));
1528 if (! PathInChart(pr,t,a-> tp,&(a-> J),nvs,systemVars,&ms,pl,ns,path,cp))
1531 Warning( "Collision when reconstructing path in atlas");
1539 printf( " Last step %f\n", Norm(a-> k,t));
1541 if (! PathInChart(pr,t,a-> tp,&(a-> J),nvs,systemVars,&ms,pl,ns,path,cp))
1544 Warning( "Collision when reconstructing path in atlas");
1557 unsigned int cmID, unsigned int parentID,
1568 if ((a-> n==0)||(db==0))
1573 Error( "DetermineChartNeighbours must be used for charts without any neighbour.");
1575 #if (USE_ATLAS_TREE)
1576 unsigned int nn=0,id;
1577 unsigned int *n=NULL;
1578 boolean intersectWithParent;
1581 intersectWithParent= FALSE;
1588 Error( "The chart was not supposed to be in the tree");
1592 Error( "Repeated chart center");
1599 fprintf(stderr, " Chart %u intersects with chart %u [parent %u]\n",cmID, id,parentID);
1601 if ((bif)&&((db>1)||(parentID== NO_UINT)||( id==parentID)))
1605 intersectWithParent= TRUE;
1609 if ((parentID!= NO_UINT)&&(!intersectWithParent))
1610 Error( "A chart that does not intersect with its parent (1)");
1627 fprintf(stderr, " Chart %u intersects with chart %u\n",cmID,i);
1629 if ((bif)&&((db>1)||(parentID== NO_UINT)||(i==parentID)))
1635 Error( "A chart that does not intersect with its parent (2)");
1655 double *v,*pt,*ptPrev;
1657 double *start,*goal;
1660 boolean projectionOk,inCollision,reached;
1662 #if (PROJECT_WITH_PLANE)
1667 NEW(pt,a-> m, double);
1668 NEW(ptPrev,a-> m, double);
1669 #if (PROJECT_WITH_PLANE)
1670 NEW(ptp,a-> m, double);
1682 memcpy(ptPrev,start,a-> m* sizeof( double));
1688 while((projectionOk)&&(!inCollision)&&(!reached)&&(d< INF))
1692 #if (PROJECT_WITH_PLANE)
1693 memcpy(ptp,pt,a-> m* sizeof( double));
1706 if (dStep<(delta/100.0))
1711 memcpy(ptPrev,pt,a-> m* sizeof( double));
1737 #if (PROJECT_WITH_PLANE)
1753 boolean singular,singular1,singular2;
1766 singular=((singular1)||(singular2));
1769 printf( " *Degree of chart %u -> %u [%u]\n",mID1,d1,singular1);
1770 printf( " -Degree of chart %u -> %u [%u]\n",mID2,d2,singular2);
1776 if ((!singular1)&&(!singular2)&&(d1!=d2))
1796 unsigned int degreeLow,degreeUp,degree;
1797 double *d,*tg1,*tg2,*p,*T;
1812 if (degreeLow==degreeUp)
1813 Error( "Degrees must be different at FindSingularPoint");
1818 NEW(tg1,a-> k, double);
1819 NEW(tg2,a-> k, double);
1821 NEW(p1,a-> m, double);
1825 NEW(p2,a-> m, double);
1832 NEW(tg,a-> k, double);
1834 memcpy(p,p2,a-> m* sizeof( double));
1842 printf( " Incompatible initial charts in FindSingularPoint\n");
1850 while((!done)&&(!error))
1852 t=tLow+(tUp-tLow)*0.5;
1859 if ((!done)&&(!error))
1866 a-> m,a-> k,p,a-> e,a-> ce,a-> r,&(a-> J),a-> w,&tmpM);
1877 if ((c1<(1-a-> ce))||(c2<(1-a-> ce)))
1881 fprintf(stderr, " Could not find singular point. Large tangent error %f (%f %f)\n",tUp-tLow,c1,c2);
1892 if (degree==degreeLow)
1895 memcpy(p1,p,a-> m* sizeof( double));
1899 if (degree==degreeUp)
1902 memcpy(p2,p,a-> m* sizeof( double));
1905 Error( "Incoherent degree change");
1908 done=((tUp-tLow)<100*epsilon);
1915 Error( "Error initializing a new chart in FindSingularPoint");
1940 double epsilon,nullSingularValue;
1941 unsigned int maxIterations;
1943 double *y,*x,*lambda;
1950 double dif,d1,d2,d3;
1972 nullSingularValue=epsilon/100;
1990 lambda=&(y[a-> ncJ]);
2005 memcpy(x,p1, sizeof( double)*a-> ncJ);
2020 NEW(K,a-> ncJ*(a-> k+1), double);
2036 for(i=1;i<a-> ncJ;i++)
2055 while((!converged)&&(it<maxIterations))
2076 ptr=&(bData[a-> nrJ]);
2093 if ((d1<10*epsilon)&&(d2<10*epsilon)&&(d3<10*epsilon))
2101 for(i=0;i<a-> nrJ;i++)
2103 for(j=0;j<a-> ncJ;j++)
2106 for(k=0;k<a-> ncJ;k++)
2107 aData[ RC2INDEX(a-> nrJ+i,j,r,c)]+=(h[i][k][j]*lambda[k]);
2118 for(i=0;i<a-> ncJ;i++)
2119 aData[ RC2INDEX(r-1,a-> ncJ+i,r,c)]=(2.0*lambda[i]);
2122 err= NewtonStep(nullSingularValue,y,&dif,&newton);
2151 return(it<maxIterations);
2160 unsigned int it,itMin,ck;
2179 Error( "FindRightNullVector needs a singular point");
2218 NEW((*phi),a-> m, double);
2219 NEW(Proj,a-> k*ck, double);
2228 printf( " Proj(T):[ ");
2234 for(it=0;it<=a-> k;it++)
2268 double *pInit, double *p, Tatlas *a)
2272 memcpy(p,point, sizeof( double)*a-> m);
2277 double epsilon,nullSingularValue;
2278 unsigned int j,it,maxIterations;
2291 nullSingularValue=epsilon/100;
2293 if (maxIterations==0)
2294 Error( "MAX_NEWTON_ITERATIONS must be larger than 0 to use Newton2ManifoldPlane");
2301 memcpy(p,point, sizeof( double)*a-> m);
2303 memcpy(p,pInit, sizeof( double)*a-> m);
2308 while((!converged)&&(it<maxIterations))
2315 ptr=&(bData[a-> nrJ]);
2317 for(j=0;j<a-> ncJ;j++)
2318 (*ptr)+=(vector[j]*(p[j]-point[j]));
2320 errorVal= Norm(a-> nrJ+1,bData);
2322 if (errorVal<epsilon)
2338 ptr=&(bData[a-> nrJ]);
2340 for(j=0;j<a-> ncJ;j++)
2341 (*ptr)+=(vector[j]*(p[j]-point[j]));
2343 err= NewtonStep(nullSingularValue,p,&errorVal,&newton);
2349 if(errorVal<epsilon)
2356 if ((converged)&&(a-> tp!=NULL))
2362 return(it<maxIterations);
2367 double *phi, double **p, Tatlas *a)
2374 Error( "FindPointInOtherBranch needs a singular point");
2379 NEW(p0,a-> m, double);
2388 NEW((*p),a-> m, double);
2397 printf( " Converged too far from singularity\n");
2402 printf( " Could not jump to the other branch\n");
2417 Error( "DefineChartsAtBifurcation needs a singular point");
2430 Warning( "Can not create a chart on the singular point");
2442 if ( InitSingularChart(pr, FALSE,a-> ambient,a-> tp,a-> m,a-> k,v,a-> e,a-> ce,a-> r,
2444 Warning( "Can not create a chart on the other branch");
2451 printf( " New Bifurcation Chart %u (%f)\n",a-> currentChart,c);
2475 printf( " Searching for bifurcation\n");
2552 fprintf(f, "%u %u %u %u %u\n",
2566 unsigned int xID, unsigned int yID, unsigned int zID, Tatlas *a)
2570 double x[2],y[2],z[2];
2624 Error( "The heap element penalty factor must be >1");
2649 double t,b1,b2,c1,c2;
2677 Error( "Missmatch number of variables in SetAtlasTopology");
2682 while((i<a->m)&&(!hasS))
2696 unsigned int k, double e, double ce, double r, TAtlasBase *w,
2745 a-> nCores=omp_get_max_threads();
2755 fprintf(stderr, "Number of computing cores (atlas) : %u\n",a-> nCores);
2764 unsigned int chartCode;
2766 double *ps,*pWithDummies;
2775 InitAtlas(pr,parallel,simpleChart,k,e,ce,r,w,a);
2788 Error( "Starting point for the atlas is in collision");
2796 Warning( "N_DOF parameter set to 0. Assuming that the initial point is regular");
2801 Error( "System with mobility 0");
2803 fprintf(stderr, "Setting N_DOF=%u\n\n",a-> k);
2810 chartCode= InitChart(pr,a-> simpleChart,a-> ambient,a-> tp,a-> m,a-> k,ps,a-> e,a-> ce,a-> r,
2816 Error( "The expected mobility is too low (increase N_DOF)");
2819 Error( "The expected mobility is too high (decrease N_DOF)");
2822 Error( "There is a numerical error when computing the tangent space");
2825 Error( "The initial point is not on the manifold");
2829 initOK=(chartCode==0);
2836 Error( "The initial chart is out of the ambient space domain");
2840 #if (USE_ATLAS_TREE)
2863 initOK=( InitChart(pr,a-> simpleChart,a-> ambient,a-> tp,a-> m,a-> k,ps,a-> e,a-> ce,a-> r,
2868 printf( " New Chart %u [parent: %u]\n",a-> currentChart,parentID);
2902 initOK=( InitTrustedChart(pr,a-> simpleChart,a-> ambient,a-> tp,a-> m,a-> k,ps,a-> e,a-> ce,a-> r,
2920 if ((db>0)&&(parentID!= NO_UINT))
2945 unsigned int cm,cmPrev;
2949 unsigned int maxCharts;
2951 unsigned int i,*cornerID,*chartID,maxInProcess,ncInProcess;
2958 Error( "Can not start atlas from the given point (BuildAtlasFromPoint)");
2977 fprintf(stderr, "Executing in %u parallel threads\n",a-> nCores);
2981 maxInProcess=( unsigned int)(1.5*a-> nCores);
2982 NEW(chartID,maxInProcess, unsigned int);
2983 NEW(cornerID,maxInProcess, unsigned int);
2984 NEW(tv,maxInProcess, double *);
2985 for(i=0;i<maxInProcess;i++)
2986 NEWZ(tv[i],a-> k, double);
2993 NEWZ(t,a-> k, double);
3010 printf( "Extending chart %u\n",mID);
3036 while((! HeapEmpty(&h))&&(ncInProcess<maxInProcess))
3044 #pragma omp parallel for private(i) schedule(dynamic)
3045 for(i=0;i<ncInProcess;i++)
3048 tv[i],a-> charts[chartID[i]]))
3051 printf( "Extending chart %u (%u)\n",chartID[i],omp_get_thread_num());
3053 printf( "Extending chart %u\n",chartID[i]);
3065 for(i=0;i<ncInProcess;i++)
3067 if (newCharts[i]!=NULL)
3094 for(i=0;i<ncInProcess;i++)
3141 unsigned int maxSteps,
3142 double (*costF)( Tparameters*, boolean, double*, void*),
3143 void (*costG)( Tparameters*, boolean, double*, double**, void*),
3147 unsigned int i,j,k,l,nv,nvs,nt,mt,pnc;
3149 boolean *systemVars,done;
3150 double *o,*currentPoint;
3152 double *g,*newPoint,*d,ng,*gFull;
3153 double delta,epsilon,e;
3171 Error( "Can not start atlas from the given point (MinimizeOnAtlas)");
3192 InitSamples(&(t[0]->ms),&(t[0]->ns),&(t[0]->path));
3196 NEW(newPoint,a-> m, double);
3208 cost=costF(pr, TRUE,currentPoint,costData);
3209 fprintf(stderr, " Initial cost: %g\n",cost);
3229 cost=costF(pr, TRUE,currentPoint,costData);
3239 cost1=costF(pr, TRUE,newPoint,costData);
3240 g[i]=-(cost1-cost)/(100*epsilon);
3243 Error( "Can not converge to the manifold in MinimizeOnAtlas");
3250 costG(pr, TRUE,currentPoint,&gFull,costData);
3253 memcpy(g,gFull,a-> k* sizeof( double));
3262 done=( Norm(k,g)<epsilon);
3280 if ( Chart2Manifold(pr,&(a-> J),g,NULL,currentPoint,newPoint,currentChart)>e)
3284 cost1=costF(pr, TRUE,newPoint,costData);
3305 done=( Norm(k,g)<epsilon);
3308 } while((retraction)&&(!done));
3310 if ((maxSteps<150)||(t[l]-> st%100==1))
3312 fprintf(stderr, " Branch %u step %u: point: [%g %g ...]\n",l,t[l]->st,newPoint[0],newPoint[1]);
3313 fprintf(stderr, " cost: %g\n",cost1);
3314 fprintf(stderr, " norm gradient: %g\n",ng);
3315 fprintf(stderr, " norm disp.: %g\n", Norm(k,g));
3322 fprintf(stderr, " ******* BIFURCATION *******\n");
3330 InitSamples(&(t[nt]->ms),&(t[nt]->ns),&(t[nt]->path));
3331 for(j=0;j<t[l]-> ns;j++)
3333 &(t[nt]->ms),&(t[nt]->ns),&(t[nt]->path));
3350 AddSample2Samples(nv,o,nvs,systemVars,&(t[nt]->ms),&(t[nt]->ns),&(t[nt]->path));
3354 AddSample2Samples(nv,o,nvs,systemVars,&(t[nt]->ms),&(t[nt]->ns),&(t[nt]->path));
3372 done=(t[l]-> st>maxSteps);
3386 Warning( "A singularity was detected during the minimization but it could not be determined if it was a bifurcation. Try a smaller epsilon or a larger delta?");
3433 double *pl, unsigned int *ns, double ***path, Tatlas *a)
3438 unsigned int *chartID;
3449 double *ps,*pWithDummies;
3452 boolean *systemVars;
3453 unsigned int cm,cmPrev,mmPrev;
3459 boolean collision= FALSE;
3461 unsigned int maxCharts;
3468 Error( "AtlasAStar assumes an initial atlas with only one local chart");
3478 Error( "Dimension missmatch in AtlasAStar");
3485 Error( "Target point for the AtlasAStar is not on the manifold");
3489 Warning( "Target point for the AtlasAStar is in collision");
3515 NEW(ts[i],a-> k, double);
3537 printf( "Iteration %u (c:%u t:%g)\n",it,a-> currentChart,*time);
3543 infoParent=&(info[mID]);
3572 while((i< HeapSize(&h))&&(nce<a->nCores))
3581 #pragma omp parallel for private(i) schedule(static)
3597 if (newCharts[i]!=NULL)
3621 Error( "Can not generate neighbouring charts");
3634 if (mmPrev<a->maxCharts)
3662 printf( " N[%u->%u][%u] : ",mID, id,infoID-> status);
3685 c=infoParent-> cost+dst;
3687 if ((infoID-> status==0)||
3692 printf( "new %g -> %g\n",dst,c);
3694 printf( "cheaper %g -> %g<%g\n",dst,c,infoID-> cost);
3711 printf( "%g > %g\n",c,infoID-> cost);
3716 printf( "closed (%g)\n",infoID-> cost);
3769 double *pl, unsigned int *ns, double ***path, Tatlas *a)
3779 double *ps,*pWithDummies;
3782 boolean *systemVars;
3783 unsigned int cm,cmPrev,mmPrev;
3788 boolean collision= FALSE;
3790 unsigned int maxCharts;
3793 Error( "Connect2Atlas assumes an initial atlas with only one local chart");
3804 Error( "Dimension missmatch in AtlasGBF");
3810 Error( "Target point for the AtlasGBF is not on the manifold");
3814 Warning( "Target point for the AtlasGBF is in collision");
3848 printf( "Iteration %u (c:%u t:%g)\n",it,a-> currentChart,*time);
3876 if (mmPrev<a->maxCharts)
3940 Error( "Could not open fiel to store atlas");
3942 fprintf(f, "%u\n",a-> m);
3943 fprintf(f, "%u\n",a-> k);
3944 fprintf(f, "%u\n",a-> n);
3945 fprintf(f, "%.12f\n",a-> e);
3946 fprintf(f, "%.12f\n",a-> ce);
3947 fprintf(f, "%.12f\n",a-> r);
3967 Error( "Could not open file to read atlas");
3969 fscanf(f, "%u",&(a-> m));
3970 fscanf(f, "%u",&(a-> k));
3971 fscanf(f, "%u",&(a-> n));
3972 fscanf(f, "%lf",&(a-> e));
3973 fscanf(f, "%lf",&(a-> ce));
3974 fscanf(f, "%lf",&(a-> r));
3992 #if (USE_ATLAS_TREE)
4013 a-> nCores=omp_get_max_threads();
4030 if (id<a->currentChart)
4038 double *t, double *p, Tatlas *a)
4070 printf( " Volume of chart %u: %g\n",i,vc);
4088 Error( "Could not open the file to store the atlas graph in SaveAtlasGraph");
4106 boolean saveWithDummies, Tatlas *a)
4109 unsigned int i,j,nv,nvs;
4110 boolean *systemVars;
4115 if (saveWithDummies)
4122 Error( "Could not open the file to store the boxes in GetChartCenters");
4138 if (saveWithDummies)
4139 fprintf(fo, "%u { %u ",i,nv);
4141 fprintf(fo, "%u { %u ",i,nvs);
4144 if ((saveWithDummies)||(systemVars[j]))
4145 fprintf(fo, "[%.12g,%.12g] ",o[j],o[j]);
4160 boolean saveWithDummies, Tatlas *a)
4163 unsigned int i,j,nv,nvs;
4164 boolean *systemVars;
4169 if (saveWithDummies)
4176 Error( "Could not open the file to store the boxes in GetChartCenters");
4194 if (saveWithDummies)
4195 fprintf(fo, "%u { %u ",i,nv);
4197 fprintf(fo, "%u { %u ",i,nvs);
4200 if ((saveWithDummies)||(systemVars[j]))
4201 fprintf(fo, "[%.12g,%.12g] ",o[j],o[j]);
4216 unsigned int xID, unsigned int yID, unsigned int zID, Tatlas *a)
4221 unsigned int obj,np;
4242 if ((a-> k==2)&&(fcost!=NULL))
4335 double x[2],y[2],z[2];
4352 fprintf(stderr, "Chart %u has no neighbours",i);
4377 unsigned int xID, unsigned int yID, unsigned int zID, Tatlas *a)
4388 unsigned int *nvf,**fv;
4390 double v1[3],v2[3],cosAngle;
4391 boolean *corrected,*used;
4394 boolean correctionDone;
4395 unsigned int nn,*nID1,*nID2;
4402 Error( "TriangulateAtlas only operates on surfaces (manifold dim=2)");
4404 NEW(tp,3, unsigned int);
4438 if ((cx<0)&&(v[i][0]<cx))
4440 if ((cx>0)&&(v[i][0]>cx))
4442 if ((cy<0)&&(v[i][1]<cy))
4444 if ((cy>0)&&(v[i][1]>cy))
4446 if ((cz<0)&&(v[i][2]<cz))
4448 if ((cz>0)&&(v[i][2]>cz))
4455 if (fscanf(fcost, "%lf",&cost)!=1)
4456 Error( "No enough data in the cost file");
4465 NEW(fv,mf, unsigned int*);
4478 NEW(fv[nf],3, unsigned int);
4513 while ((!found)&&(k<nf))
4529 NEW(nvf,nf, unsigned int);
4533 NEW(used,nf, boolean);
4534 NEW(corrected,nf, boolean);
4535 NEW(normal,nf, double*);
4540 NEW(normal[i],3, double);
4548 correctionDone= FALSE;
4549 while((!correctionDone)&&(nc<nf))
4553 while ((i<nf)&&((used[i])||(!corrected[i])))
4556 correctionDone= TRUE;
4558 if (!correctionDone)
4638 fprintf(f, "\n %% Atlas defines\n");
4645 fprintf(f, " W_BTREE %u\n", W_BTREE);
4679 #if (USE_ATLAS_TREE)
|
Follow us!