Changeset 5583
- Timestamp:
- 08/26/10 08:15:19 (15 years ago)
- Location:
- issm/trunk/src/c/objects/Bamg
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk/src/c/objects/Bamg/Mesh.cpp
r5582 r5583 237 237 if (triangles) delete [] triangles; 238 238 if (quadtree) delete quadtree; 239 //if (ord re) delete [] ordre;239 //if (orderedvertices) delete [] orderedvertices; 240 240 if (subdomains) delete [] subdomains; 241 241 if (VerticesOnGeomEdge) delete [] VerticesOnGeomEdge; … … 273 273 if (verbose) printf("Reading vertices (%i)\n",nbv); 274 274 vertices=(BamgVertex*)xmalloc(nbv*sizeof(BamgVertex)); 275 ord re=(BamgVertex**)xmalloc(nbv*sizeof(BamgVertex*));275 orderedvertices=(BamgVertex**)xmalloc(nbv*sizeof(BamgVertex*)); 276 276 for (i=0;i<nbv;i++){ 277 277 vertices[i].r.x=x[i]; … … 324 324 325 325 vertices=(BamgVertex*)xmalloc(nbv*sizeof(BamgVertex)); 326 ord re=(BamgVertex**)xmalloc(nbv*sizeof(BamgVertex*));326 orderedvertices=(BamgVertex**)xmalloc(nbv*sizeof(BamgVertex*)); 327 327 328 328 for (i=0;i<nbv;i++){ … … 2707 2707 vertices=new BamgVertex[maxnbv]; 2708 2708 ISSMASSERT(vertices); 2709 ord re=new (BamgVertex* [maxnbv]);2710 ISSMASSERT(ord re);2709 orderedvertices=new (BamgVertex* [maxnbv]); 2710 ISSMASSERT(orderedvertices); 2711 2711 triangles=new Triangle[maxnbt]; 2712 2712 ISSMASSERT(triangles); … … 2714 2714 else { 2715 2715 vertices=NULL; 2716 ord re=NULL;2716 orderedvertices=NULL; 2717 2717 triangles=NULL; 2718 2718 maxnbt=0; … … 2738 2738 SetIntCoor(); 2739 2739 2740 /*Now we want to build a list (ord re) of the vertices in a random2740 /*Now we want to build a list (orderedvertices) of the vertices in a random 2741 2741 * order. To do so, we use the following method: 2742 2742 * … … 2770 2770 int k0=rand()%nbv; 2771 2771 2772 //Build ord re2772 //Build orderedvertices 2773 2773 for (i=0; i<nbv; i++){ 2774 ord re[i]=&vertices[k0=(k0+PrimeNumber)%nbv];2775 } 2776 2777 /*Modify ord resuch that the first 3 vertices form a triangle*/2774 orderedvertices[i]=&vertices[k0=(k0+PrimeNumber)%nbv]; 2775 } 2776 2777 /*Modify orderedvertices such that the first 3 vertices form a triangle*/ 2778 2778 2779 2779 //get first vertex i such that [0,1,i] are not aligned 2780 for (i=2; det(ord re[0]->i,ordre[1]->i,ordre[i]->i)==0;){2780 for (i=2; det(orderedvertices[0]->i,orderedvertices[1]->i,orderedvertices[i]->i)==0;){ 2781 2781 //if i is higher than nbv, it means that all the determinants are 0, 2782 2782 //all vertices are aligned! 2783 2783 if (++i>=nbv) ISSMERROR("all the vertices are aligned"); 2784 2784 } 2785 // exchange i et 2 in "ord re" so that2785 // exchange i et 2 in "orderedvertices" so that 2786 2786 // the first 3 vertices are not aligned (real triangle) 2787 Exchange(ord re[2], ordre[i]);2787 Exchange(orderedvertices[2], orderedvertices[i]); 2788 2788 2789 2789 /*Take the first edge formed by the first two vertices and build 2790 2790 * the initial simple mesh from this edge and 2 boundary triangles*/ 2791 2791 2792 BamgVertex * v0=ord re[0], *v1=ordre[1];2792 BamgVertex * v0=orderedvertices[0], *v1=orderedvertices[1]; 2793 2793 2794 2794 nbt = 2; … … 2830 2830 2831 2831 //Get new vertex 2832 BamgVertex *newvertex=ord re[icount];2832 BamgVertex *newvertex=orderedvertices[icount]; 2833 2833 2834 2834 //Find the triangle in which newvertex is located … … 2856 2856 k0 = rand()%nbv ; 2857 2857 for (int is4=0; is4<nbv; is4++) 2858 ord re[is4]= &vertices[k0 = (k0 + PrimeNumber)% nbv];2858 orderedvertices[is4]= &vertices[k0 = (k0 + PrimeNumber)% nbv]; 2859 2859 2860 2860 for(int Nbloop=0;Nbloop<NBLOOPOPTIM;Nbloop++){ 2861 2861 long NbSwap = 0; 2862 2862 for (int is1=0; is1<nbv; is1++) 2863 NbSwap += ord re[is1]->Optim(0,0);2863 NbSwap += orderedvertices[is1]->Optim(0,0); 2864 2864 if (verbose>3) { 2865 2865 printf(" Optim Loop: %i\n",Nbloop); … … 2900 2900 register long j=nbvold +(k3 = (k3+PrimeNumber)%nbvnew); 2901 2901 register long i=nbvold+is3; 2902 ord re[i]= vertices + j;2903 ord re[i]->ReferenceNumber=i;2902 orderedvertices[i]= vertices + j; 2903 orderedvertices[i]->ReferenceNumber=i; 2904 2904 } 2905 2905 … … 2907 2907 long iv=nbvold; 2908 2908 for (i=nbvold;i<nbv;i++){ 2909 BamgVertex &vi=*ord re[i];2909 BamgVertex &vi=*orderedvertices[i]; 2910 2910 vi.i=R2ToI2(vi.r); 2911 2911 vi.r=I2ToR2(vi.i); … … 2917 2917 BamgVertex &vj = vertices[iv]; 2918 2918 long j=vj.ReferenceNumber; 2919 if (&vj!=ord re[j]){2920 ISSMERROR("&vj!= ord re[j]");2919 if (&vj!=orderedvertices[j]){ 2920 ISSMERROR("&vj!= orderedvertices[j]"); 2921 2921 } 2922 2922 if(i!=j){ 2923 2923 Exchange(vi,vj); 2924 Exchange(ord re[j],ordre[i]);2924 Exchange(orderedvertices[j],orderedvertices[i]); 2925 2925 } 2926 2926 vj.ReferenceNumber=0; … … 3416 3416 if(verbose>2) printf(" Reconstruct mesh of %i vertices\n",nbv); 3417 3417 3418 //initialize ord re3419 ISSMASSERT(ord re);3420 for (i=0;i<nbv;i++) ord re[i]=0;3418 //initialize orderedvertices 3419 ISSMASSERT(orderedvertices); 3420 for (i=0;i<nbv;i++) orderedvertices[i]=0; 3421 3421 3422 3422 //Initialize nbsubdomains … … 3485 3485 if (i<nbe){ 3486 3486 long i0=edge4->i(i); 3487 ord re[i0] = vertices+i0;3487 orderedvertices[i0] = vertices+i0; 3488 3488 long i1=edge4->j(i); 3489 ord re[i1] = vertices+i1;3489 orderedvertices[i1] = vertices+i1; 3490 3490 } 3491 3491 else { … … 3510 3510 vertices[i].t=0; 3511 3511 vertices[i].IndexInTriangle=0; 3512 if (ord re[i]) ordre[nbvb++]=ordre[i];3512 if (orderedvertices[i]) orderedvertices[nbvb++]=orderedvertices[i]; 3513 3513 } 3514 3514 … … 3527 3527 3528 3528 //Find a vertex that is not aligned with vertices 0 and 1 3529 for (i=2;det(ord re[0]->i,ordre[1]->i,ordre[i]->i)==0;)3529 for (i=2;det(orderedvertices[0]->i,orderedvertices[1]->i,orderedvertices[i]->i)==0;) 3530 3530 if (++i>=nbvb) { 3531 3531 ISSMERROR("ReconstructExistingMesh: All the vertices are aligned"); 3532 3532 } 3533 //Move this vertex (i) to the 2d position in ord re3534 Exchange(ord re[2], ordre[i]);3533 //Move this vertex (i) to the 2d position in orderedvertices 3534 Exchange(orderedvertices[2], orderedvertices[i]); 3535 3535 3536 3536 /*Reconstruct mesh beginning with 2 triangles*/ 3537 BamgVertex * v0=ord re[0], *v1=ordre[1];3537 BamgVertex * v0=orderedvertices[0], *v1=orderedvertices[1]; 3538 3538 3539 3539 triangles[0](0) = NULL; // Infinite vertex … … 3568 3568 long NbSwap=0; 3569 3569 for (int icount=2; icount<nbvb; icount++) { 3570 BamgVertex *vi = ord re[icount];3570 BamgVertex *vi = orderedvertices[icount]; 3571 3571 Icoor2 dete[3]; 3572 3572 Triangle *tcvi = TriangleFindFromCoord(vi->i,dete); -
issm/trunk/src/c/objects/Bamg/Mesh.h
r5573 r5583 30 30 Edge *edges; 31 31 QuadTree *quadtree; 32 BamgVertex **ord re;32 BamgVertex **orderedvertices; 33 33 SubDomain *subdomains; 34 34 long NbRef; // counter of ref on the this class if 0 we can delete
Note:
See TracChangeset
for help on using the changeset viewer.