Changeset 5143
- Timestamp:
- 08/11/10 09:01:16 (15 years ago)
- Location:
- issm/trunk/src/c/objects
- Files:
-
- 10 edited
- 2 moved
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk/src/c/objects/Bamg/AdjacentTriangle.cpp
r5141 r5143 4 4 #include <ctime> 5 5 6 #include " TriangleAdjacent.h"6 #include "AdjacentTriangle.h" 7 7 #include "Mesh.h" 8 8 … … 14 14 15 15 /*Methods*/ 16 /*FUNCTION TriangleAdjacent::Locked {{{1*/17 int TriangleAdjacent::Locked() const {16 /*FUNCTION AdjacentTriangle::Locked {{{1*/ 17 int AdjacentTriangle::Locked() const { 18 18 return t->TriaAdjSharedEdge[a] & 4; 19 19 } 20 20 /*}}}*/ 21 /*FUNCTION TriangleAdjacent::MarkUnSwap {{{1*/22 int TriangleAdjacent::MarkUnSwap() const {21 /*FUNCTION AdjacentTriangle::MarkUnSwap {{{1*/ 22 int AdjacentTriangle::MarkUnSwap() const { 23 23 return t->TriaAdjSharedEdge[a] & 8; 24 24 } 25 25 /*}}}*/ 26 /*FUNCTION TriangleAdjacent::GetAllFlag_UnSwap {{{1*/27 int TriangleAdjacent::GetAllFlag_UnSwap() const {26 /*FUNCTION AdjacentTriangle::GetAllFlag_UnSwap {{{1*/ 27 int AdjacentTriangle::GetAllFlag_UnSwap() const { 28 28 // take all flag except MarkUnSwap 29 29 return t->TriaAdjSharedEdge[a] & 1012; 30 30 } 31 31 /*}}}*/ 32 /*FUNCTION TriangleAdjacent::SetLock {{{1*/33 void TriangleAdjacent::SetLock(){32 /*FUNCTION AdjacentTriangle::SetLock {{{1*/ 33 void AdjacentTriangle::SetLock(){ 34 34 t->SetLocked(a); 35 35 } 36 36 /*}}}*/ 37 /*FUNCTION TriangleAdjacent::Adj {{{1*/38 TriangleAdjacent TriangleAdjacent::Adj() const {37 /*FUNCTION AdjacentTriangle::Adj {{{1*/ 38 AdjacentTriangle AdjacentTriangle::Adj() const { 39 39 return t->Adj(a); 40 40 } 41 41 /*}}}*/ 42 /*FUNCTION TriangleAdjacent::EdgeVertex {{{1*/43 BamgVertex* TriangleAdjacent::EdgeVertex(const int & i) const {42 /*FUNCTION AdjacentTriangle::EdgeVertex {{{1*/ 43 BamgVertex* AdjacentTriangle::EdgeVertex(const int & i) const { 44 44 return t->TriaVertices[VerticesOfTriangularEdge[a][i]]; 45 45 } 46 46 /*}}}*/ 47 /*FUNCTION TriangleAdjacent::OppositeVertex {{{1*/48 BamgVertex* TriangleAdjacent::OppositeVertex() const {47 /*FUNCTION AdjacentTriangle::OppositeVertex {{{1*/ 48 BamgVertex* AdjacentTriangle::OppositeVertex() const { 49 49 return t->TriaVertices[bamg::OppositeVertex[a]]; 50 50 } 51 51 /*}}}*/ 52 /*FUNCTION TriangleAdjacent::det {{{1*/53 Icoor2 & TriangleAdjacent::det() const {52 /*FUNCTION AdjacentTriangle::det {{{1*/ 53 Icoor2 & AdjacentTriangle::det() const { 54 54 return t->det; 55 55 } 56 56 /*}}}*/ 57 /*FUNCTION TriangleAdjacent::swap {{{1*/58 int TriangleAdjacent::swap(){57 /*FUNCTION AdjacentTriangle::swap {{{1*/ 58 int AdjacentTriangle::swap(){ 59 59 return t->swap(a); 60 60 } 61 61 /*}}}*/ 62 /*FUNCTION TriangleAdjacent::SetAdj2 {{{1*/63 void TriangleAdjacent::SetAdj2(const TriangleAdjacent& ta, int l ){62 /*FUNCTION AdjacentTriangle::SetAdj2 {{{1*/ 63 void AdjacentTriangle::SetAdj2(const AdjacentTriangle & ta, int l ){ 64 64 //set Adjacent Triangle of a triangle 65 65 if(t) { -
issm/trunk/src/c/objects/Bamg/AdjacentTriangle.h
r5141 r5143 11 11 class Triangle; 12 12 13 class TriangleAdjacent{13 class AdjacentTriangle { 14 14 15 15 public: … … 18 18 19 19 //Constructors 20 TriangleAdjacent() {};21 TriangleAdjacent(Triangle* tt,int aa): t(tt),a(aa &3) {};20 AdjacentTriangle() {}; 21 AdjacentTriangle(Triangle* tt,int aa): t(tt),a(aa &3) {}; 22 22 23 23 //Operators … … 25 25 operator Triangle & () const {return *t;} 26 26 operator int() const {return a;} 27 TriangleAdjacent& operator++(){ a= NextEdge[a]; return *this; }28 TriangleAdjacentoperator--(){ a= PreviousEdge[a]; return *this; }27 AdjacentTriangle & operator++(){ a= NextEdge[a]; return *this; } 28 AdjacentTriangle operator--(){ a= PreviousEdge[a]; return *this; } 29 29 30 30 //Methods … … 35 35 int GetAllFlag_UnSwap() const; 36 36 void SetLock(); 37 void SetAdj2(const TriangleAdjacent&ta, int l=0);37 void SetAdj2(const AdjacentTriangle &ta, int l=0); 38 38 int swap(); 39 TriangleAdjacentAdj() const;39 AdjacentTriangle Adj() const; 40 40 BamgVertex* EdgeVertex(const int & i) const; 41 41 BamgVertex* OppositeVertex() const; -
issm/trunk/src/c/objects/Bamg/BamgVertex.cpp
r5124 r5143 52 52 if (tstart->det <0){ // outside 53 53 double ba,bb; 54 TriangleAdjacentedge= CloseBoundaryEdge(IBTh,tstart,ba,bb) ;54 AdjacentTriangle edge= CloseBoundaryEdge(IBTh,tstart,ba,bb) ; 55 55 tstart = edge; 56 56 vP.m= Metric(ba,*edge.EdgeVertex(0),bb,*edge.EdgeVertex(1)); -
issm/trunk/src/c/objects/Bamg/Edge.h
r5130 r5143 16 16 17 17 public: 18 BamgVertex *v[2];19 long ref;20 GeometricalEdge *onGeometry;21 Edge * adj[2]; // the 2 adj edges if on the same curve18 BamgVertex *v[2]; 19 long ref; 20 GeometricalEdge *onGeometry; 21 Edge *adj[2]; // the 2 adj edges if on the same curve 22 22 23 23 //Operators 24 BamgVertex & operator[](int i){return *v[i];};25 BamgVertex * operator()(inti){return v[i];};26 R2 operator()(double t) const; // return the point27 const BamgVertex & operator[](int i) const {return *v[i];};24 BamgVertex &operator[](int i){return *v[i]; }; 25 BamgVertex *operator()(int i){return v[i];}; 26 R2 operator()(double t) const;// return the point 27 const BamgVertex &operator[](int i) const{return *v[i];}; 28 28 29 29 //Methods -
issm/trunk/src/c/objects/Bamg/GeometricalEdge.h
r5130 r5143 13 13 14 14 public: 15 GeometricalVertex *v[2];16 long ref;17 long CurveNumber;18 R2 tg[2];// the 2 tangentes (tg[0] =0 => no continuity)19 GeometricalEdge * Adj[2];20 int DirAdj[2];21 int flag;15 GeometricalVertex *v[2]; 16 long ref; 17 long CurveNumber; 18 R2 tg[2]; // the 2 tangentes (tg[0] =0 => no continuity) 19 GeometricalEdge *Adj[2]; 20 int DirAdj[2]; 21 int flag; 22 22 23 23 //Operators -
issm/trunk/src/c/objects/Bamg/Geometry.cpp
r5130 r5143 69 69 70 70 double Hmin = HUGE_VAL;// the infinie value 71 int i,j,k,n,i 1,i2;71 int i,j,k,n,i0,i1,i2,i3; 72 72 73 73 /*initialize some variables*/ 74 verbose= bamgopts->verbose;75 nbv = bamggeom->VerticesSize[0];76 nbe = bamggeom->EdgesSize[0];74 verbose= bamgopts->verbose; 75 nbv = bamggeom->VerticesSize[0]; 76 nbe = bamggeom->EdgesSize[0]; 77 77 78 78 //some checks … … 122 122 //Edges 123 123 if (bamggeom->Edges){ 124 R2 zero2(0,0);125 double* len=NULL;124 R2 zerovector(0,0); 125 double* verticeslength=NULL; 126 126 127 127 if(verbose>5) printf(" processing Edges\n"); … … 129 129 edges = new GeometricalEdge[nbe]; 130 130 131 //initialize len (length of each edge) 132 len = new double[nbv]; 133 for(i=0;i<nbv;i++) len[i]=0; 134 131 //initialize verticeslength (sum of the lengths of the edges holding vertex) 132 verticeslength = new double[nbv]; 133 for(i=0;i<nbv;i++) verticeslength[i]=0; 134 135 /*Loop over the edges*/ 135 136 for (i=0;i<nbe;i++){ 136 137 137 //printf("%i th edge of geometry: [%i %i]\n",i+1,(int)bamggeom->Edges[i*3+0],(int)bamggeom->Edges[i*3+1]);138 138 i1=(int)bamggeom->Edges[i*3+0]-1; //-1 for C indexing 139 139 i2=(int)bamggeom->Edges[i*3+1]-1; //-1 for C indexing 140 edges[i].v[0]= vertices + i1; //pointer toward vertex i1 (=&vertices[i1]) 141 edges[i].v[1]= vertices + i2; //pointer toward vertex i2 140 142 edges[i].ref=(long)bamggeom->Edges[i*3+2]; 141 143 142 edges[i].v[0]= vertices + i1;143 edges[i].v[1]= vertices + i2;144 145 144 //get length of edge 146 R2 x12=vertices[i2].r-vertices[i1].r;145 R2 x12=vertices[i2].r-vertices[i1].r; 147 146 double l12=sqrt((x12,x12)); 148 147 Hmin=Min(Hmin,l12); 149 148 150 149 //initialize other fields 151 edges[i].tg[0]=zero 2;152 edges[i].tg[1]=zero 2;150 edges[i].tg[0]=zerovector; 151 edges[i].tg[1]=zerovector; 153 152 edges[i].DirAdj[0] = edges[i].DirAdj[1] = -1; 154 edges[i].Adj[0] = edges[i].Adj[1] = 0;153 edges[i].Adj[0] = edges[i].Adj[1] = NULL; 155 154 edges[i].flag = 0; 156 155 157 156 //Cracked? 158 if (edges[i].ref!=1){ 159 edges[i].SetCracked(); 160 } 157 if (edges[i].ref!=1) edges[i].SetCracked(); 161 158 162 159 //prepare metric 163 160 vertices[i1].color++; 164 161 vertices[i2].color++; 165 len[i1] += l12;166 len[i2] += l12;162 verticeslength[i1] += l12; 163 verticeslength[i2] += l12; 167 164 } 168 165 169 166 // definition the default of the given mesh size 170 for (i=0;i<nbv;i++) 171 if (vertices[i].color > 0) 172 vertices[i].m=Metric(len[i] /(double) vertices[i].color); 173 else 174 vertices[i].m=Metric(Hmin); 175 delete [] len; 167 for (i=0;i<nbv;i++) { 168 if (vertices[i].color > 0) 169 vertices[i].m=Metric(verticeslength[i] /(double) vertices[i].color); 170 else 171 vertices[i].m=Metric(Hmin); 172 } 173 delete [] verticeslength; 176 174 177 175 } … … 217 215 tg.x=bamggeom->TangentAtEdges[k*4+2]; 218 216 tg.y=bamggeom->TangentAtEdges[k*4+3]; 219 if (j!=0 && j!=1){ 220 ISSMERROR("TangentAtEdges second index should be 1 or 2 only"); 221 } 217 if (i<0 || i>=nbe) ISSMERROR("TangentAtEdges first index exceeds matrix dimension"); 218 if (j!=0 && j!=1) ISSMERROR("TangentAtEdges second index should be 1 or 2 only"); 222 219 edges[i].tg[j] = tg; 223 220 } … … 231 228 for (i=0;i<n;i++) { 232 229 j=(int)bamggeom->Corners[i]-1; //for C indexing 233 if (j>nbv-1 || j<0){ 234 ISSMERROR("Bad corner definition: should in [0 %i]",nbv); 235 } 230 if (j>nbv-1 || j<0) ISSMERROR("Bad corner definition: should in [0 %i]",nbv); 231 /*Required => at the same time SetRequired and SetCorner*/ 236 232 vertices[j].SetCorner(); 237 vertices[j].SetRequired(); } 233 vertices[j].SetRequired(); 234 } 238 235 } 239 236 … … 245 242 for (i=0;i<n;i++) { 246 243 j=(int)bamggeom->RequiredVertices[i]-1; //for C indexing 247 if (j>nbv-1 || j<0){ 248 ISSMERROR("Bad RequiredVerticess definition: should in [0 %i]",nbv); 249 } 250 vertices[j].SetRequired(); } 244 if (j>nbv-1 || j<0) ISSMERROR("Bad RequiredVerticess definition: should in [0 %i]",nbv); 245 vertices[j].SetRequired(); 246 } 251 247 } 252 248 … … 258 254 for (i=0;i<n;i++) { 259 255 j=(int)bamggeom->RequiredEdges[i]-1; //for C indexing 260 if (j>nbe-1 || j<0){ 261 ISSMERROR("Bad RequiredEdges definition: should in [0 %i]",nbe); 262 } 256 if (j>nbe-1 || j<0) ISSMERROR("Bad RequiredEdges definition: should in [0 %i]",nbe); 263 257 edges[j].SetRequired(); 264 258 } … … 267 261 //SubDomain 268 262 if(bamggeom->SubDomains){ 269 long i0,i1,i2,i3;270 263 if(verbose>5) printf(" processing SubDomains\n"); 271 264 if (bamggeom->SubDomainsSize[1]!=4) ISSMERROR("SubDomains should have 4 columns"); 272 265 NbSubDomains=bamggeom->SubDomainsSize[0]; 273 266 subdomains = new GeometricalSubDomain[NbSubDomains]; 274 for (i=0;i<NbSubDomains;i++) 267 for (i=0;i<NbSubDomains;i++){ 275 268 i0=(int)bamggeom->SubDomains[i*4+0]; 276 269 i1=(int)bamggeom->SubDomains[i*4+1]; -
issm/trunk/src/c/objects/Bamg/ListofIntersectionTriangles.cpp
r5130 r5143 254 254 ilast=ifirst; 255 255 double ba,bb; 256 TriangleAdjacentedge=CloseBoundaryEdge(a,t,ba,bb);256 AdjacentTriangle edge=CloseBoundaryEdge(a,t,ba,bb); 257 257 BamgVertex & v0 = *edge.EdgeVertex(0), & v1 = *edge.EdgeVertex(1); 258 258 NewItem(A,Metric(ba,v0,bb,v1)); … … 260 260 // test if the point b is in the same side 261 261 if (det(v0.i,v1.i,b)>=0) { 262 TriangleAdjacentedge=CloseBoundaryEdge(a,t,ba,bb);262 AdjacentTriangle edge=CloseBoundaryEdge(a,t,ba,bb); 263 263 BamgVertex & v0 = *edge.EdgeVertex(0), & v1 = *edge.EdgeVertex(1); 264 264 NewItem(A,Metric(ba,v0,bb,v1)); … … 284 284 else if (detj<=0) // go to j direction on gamma 285 285 ocut = NextEdge[ocut]; 286 TriangleAdjacenttadj =t->Adj(ocut);286 AdjacentTriangle tadj =t->Adj(ocut); 287 287 t = tadj; 288 288 iedge= tadj; … … 290 290 double ba,bb; 291 291 long int verbose=2; 292 TriangleAdjacentedge=CloseBoundaryEdge(a,t,ba,bb);292 AdjacentTriangle edge=CloseBoundaryEdge(a,t,ba,bb); 293 293 BamgVertex & v0 = *edge.EdgeVertex(0), & v1 = *edge.EdgeVertex(1); 294 294 NewItem(A,Metric(ba,v0,bb,v1)); … … 304 304 t=tbegin; 305 305 double ba,bb; 306 TriangleAdjacentedge=CloseBoundaryEdge(b,t,ba,bb);306 AdjacentTriangle edge=CloseBoundaryEdge(b,t,ba,bb); 307 307 NewItem(B,Metric(ba,*edge.EdgeVertex(0),bb,*edge.EdgeVertex(1))); 308 308 return; … … 412 412 ilast=NewItem(t, ba[0],ba[1],ba[2]); 413 413 414 TriangleAdjacentta =t->Adj(ocut);414 AdjacentTriangle ta =t->Adj(ocut); 415 415 t = ta; 416 416 iedge= ta; 417 417 if (t->det <= 0) { 418 418 double ba,bb; 419 TriangleAdjacentedge=CloseBoundaryEdge(b,t,ba,bb);419 AdjacentTriangle edge=CloseBoundaryEdge(b,t,ba,bb); 420 420 NewItem(B,Metric(ba,*edge.EdgeVertex(0),bb,*edge.EdgeVertex(1))); 421 421 return; -
issm/trunk/src/c/objects/Bamg/Mesh.cpp
r5130 r5143 263 263 264 264 double Hmin = HUGE_VAL;// the infinie value 265 long i1,i2,i3 ,iref;265 long i1,i2,i3; 266 266 long i,j; 267 267 Metric M1(1); … … 309 309 void Mesh::ReadMesh(BamgMesh* bamgmesh, BamgOpts* bamgopts){ 310 310 311 int verbose; 312 double Hmin = HUGE_VAL;// the infinie value 313 long i1,i2,i3,iref; 314 long i,j; 315 long ifgeom=0; 311 int verbose; 312 double Hmin = HUGE_VAL; // the infinie value 313 long i1,i2,i3; 314 long i,j; 316 315 Metric M1(1); 317 316 … … 349 348 //other triangles will be added for each edge 350 349 for (i=0;i<nbt;i++){ 351 Triangle & t =triangles[i];350 Triangle &t=triangles[i]; 352 351 i1=(long)bamgmesh->Triangles[i*4+0]-1; //for C indexing 353 352 i2=(long)bamgmesh->Triangles[i*4+1]-1; //for C indexing … … 1138 1137 if (nbzerodet == 1) { 1139 1138 iedge = OppositeEdge[izerodet]; 1140 TriangleAdjacentta = t->Adj(iedge);1139 AdjacentTriangle ta = t->Adj(iedge); 1141 1140 1142 1141 // the point is on the edge … … 2283 2282 //Now, we are going to go through the adjacent triangle that hold i1 till 2284 2283 //we find one that has the cracked edge 2285 TriangleAdjacentta(tbegin,EdgesVertexTriangle[k][0]);2284 AdjacentTriangle ta(tbegin,EdgesVertexTriangle[k][0]); 2286 2285 count=0; 2287 2286 do { … … 2358 2357 2359 2358 //Force Edges 2360 TriangleAdjacentta(0,0);2359 AdjacentTriangle ta(0,0); 2361 2360 for (int i = 0; i < nbe; i++){ 2362 2361 … … 2575 2574 } 2576 2575 2577 TriangleAdjacentta(t,EdgesVertexTriangle[v0->vint][0]);// previous edges2576 AdjacentTriangle ta(t,EdgesVertexTriangle[v0->vint][0]);// previous edges 2578 2577 2579 2578 while (1) { … … 3072 3071 if (t->det <0) { // outside 3073 3072 double ba,bb; 3074 TriangleAdjacentedge= CloseBoundaryEdge(a,t,ba,bb) ;3073 AdjacentTriangle edge= CloseBoundaryEdge(a,t,ba,bb) ; 3075 3074 return Metric(ba,*edge.EdgeVertex(0),bb,*edge.EdgeVertex(1));} 3076 3075 else { // inside … … 3148 3147 //Loop over the edges of t 3149 3148 for(j=0;j<3;j++){ 3150 TriangleAdjacenttj(t,j);3149 AdjacentTriangle tj(t,j); 3151 3150 BamgVertex &vA = *tj.EdgeVertex(0); 3152 3151 BamgVertex &vB = *tj.EdgeVertex(1); … … 3157 3156 if (t->Locked(j)) continue; 3158 3157 3159 TriangleAdjacenttadjj = t->Adj(j);3158 AdjacentTriangle tadjj = t->Adj(j); 3160 3159 Triangle* ta=tadjj; 3161 3160 … … 3182 3181 for (i=nbvold;i<nbv;i++){ 3183 3182 BamgVertex* s = vertices + i; 3184 TriangleAdjacentta(s->t, EdgesVertexTriangle[s->vint][1]);3183 AdjacentTriangle ta(s->t, EdgesVertexTriangle[s->vint][1]); 3185 3184 Triangle* tbegin= (Triangle*) ta; 3186 3185 long kt; … … 3521 3520 3522 3521 //enforce the boundary 3523 TriangleAdjacentta(0,0);3522 AdjacentTriangle ta(0,0); 3524 3523 long nbloss = 0,knbe=0; 3525 3524 for ( i = 0; i < nbe; i++){ … … 3544 3543 krm++; 3545 3544 for (int j=0;j<3;j++){ 3546 TriangleAdjacentta = triangles[i].Adj(j);3545 AdjacentTriangle ta = triangles[i].Adj(j); 3547 3546 Triangle &tta = *(Triangle*)ta; 3548 3547 //if edge between remove and not remove … … 4035 4034 } 4036 4035 BamgVertex & vi = vertices[i]; 4037 TriangleAdjacentta(t,EdgesVertexTriangle[vertices[i].vint][0]);4036 AdjacentTriangle ta(t,EdgesVertexTriangle[vertices[i].vint][0]); 4038 4037 BamgVertex *pvj0 = ta.EdgeVertex(0); 4039 4038 while (1) { … … 4246 4245 for(int j=0;j<3;j++) 4247 4246 { 4248 const TriangleAdjacentta = t.Adj(j);4247 const AdjacentTriangle ta = t.Adj(j); 4249 4248 const Triangle & tt = ta; 4250 4249 if (&tt >= lastT) … … 4295 4294 if (t.Hidden(j)) invisibleedge=j,nbinvisible++; 4296 4295 4297 const TriangleAdjacentta = t.Adj(j);4296 const AdjacentTriangle ta = t.Adj(j); 4298 4297 const Triangle & tt = ta; 4299 4298 … … 4387 4386 } 4388 4387 // -------------------------- 4389 TriangleAdjacentta0(t0.Adj(i0)),ta1(t0.Adj(i1)),ta2(t0.Adj(i2));4388 AdjacentTriangle ta0(t0.Adj(i0)),ta1(t0.Adj(i1)),ta2(t0.Adj(i2)); 4390 4389 // save the flag Hidden 4391 4390 int hid[]={t0.Hidden(0),t0.Hidden(1),t0.Hidden(2)}; … … 4744 4743 ISSMERROR("k>=3"); 4745 4744 } 4746 TriangleAdjacentt1 = t->Adj(jj=ii[0]);4745 AdjacentTriangle t1 = t->Adj(jj=ii[0]); 4747 4746 if ((t1.det() < 0 ) && (k == 2)) 4748 4747 t1 = t->Adj(jj=ii[1]); … … 5453 5452 /*Intermediary*/ 5454 5453 /*FUNCTION CloseBoundaryEdge{{{1*/ 5455 TriangleAdjacentCloseBoundaryEdge(I2 A,Triangle *t, double &a,double &b) {5454 AdjacentTriangle CloseBoundaryEdge(I2 A,Triangle *t, double &a,double &b) { 5456 5455 /*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Mesh2.cpp/CloseBoundaryEdge)*/ 5457 5456 … … 5463 5462 int kkk=0; 5464 5463 Icoor2 IJ_IA,IJ_AJ; 5465 TriangleAdjacentedge(t,OppositeEdge[k]);5464 AdjacentTriangle edge(t,OppositeEdge[k]); 5466 5465 for (;;edge = dir >0 ? Next(Adj(Next(edge))) : Previous(Adj(Previous(edge)))) { 5467 5466 kkk++; … … 5493 5492 /*}}}1*/ 5494 5493 /*FUNCTION CloseBoundaryEdgeV2{{{1*/ 5495 TriangleAdjacentCloseBoundaryEdgeV2(I2 C,Triangle *t, double &a,double &b) {5494 AdjacentTriangle CloseBoundaryEdgeV2(I2 C,Triangle *t, double &a,double &b) { 5496 5495 /*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Mesh2.cpp/CloseBoundaryEdgeV2)*/ 5497 5496 // walk around the vertex … … 5514 5513 Icoor2 l0 = imax,l1 = imax; 5515 5514 double dd2 = imax;// infinity 5516 TriangleAdjacenter;5515 AdjacentTriangle er; 5517 5516 int cas=-2; 5518 5517 for (int j=0;j<3;j++) 5519 5518 { 5520 TriangleAdjacentta=t->FindBoundaryEdge(j);5519 AdjacentTriangle ta=t->FindBoundaryEdge(j); 5521 5520 if (! (Triangle *) ta) continue; 5522 5521 s0 = ta.EdgeVertex(0); … … 5582 5581 { 5583 5582 t=er; 5584 TriangleAdjacentedge(er);5583 AdjacentTriangle edge(er); 5585 5584 5586 5585 int kkk=0; … … 5642 5641 /*}}}1*/ 5643 5642 /*FUNCTION ForceEdge{{{1*/ 5644 int ForceEdge(BamgVertex &a, BamgVertex & b, TriangleAdjacent& taret) {5643 int ForceEdge(BamgVertex &a, BamgVertex & b,AdjacentTriangle & taret) { 5645 5644 /*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Mesh2.cpp/ForceEdge)*/ 5646 5645 … … 5650 5649 } 5651 5650 int k=0; 5652 taret= TriangleAdjacent(0,0); // erreur5653 5654 TriangleAdjacenttta(a.t,EdgesVertexTriangle[a.vint][0]);5651 taret=AdjacentTriangle(0,0); // erreur 5652 5653 AdjacentTriangle tta(a.t,EdgesVertexTriangle[a.vint][0]); 5655 5654 BamgVertex *v1, *v2 = tta.EdgeVertex(0),*vbegin =v2; 5656 5655 // we turn around a in the direct sens … … 5670 5669 5671 5670 while (v2 != &b) { 5672 TriangleAdjacenttc = Previous(Adj(tta));5671 AdjacentTriangle tc = Previous(Adj(tta)); 5673 5672 v1 = v2; 5674 5673 v2 = tc.EdgeVertex(0); … … 5741 5740 (*t2)(VerticesOfTriangularEdge[a2][1]) = s1 ; // avant sa 5742 5741 // mise a jour des 2 adjacences externes 5743 TriangleAdjacenttaas1 = t1->Adj(as1),5742 AdjacentTriangle taas1 = t1->Adj(as1), 5744 5743 taas2 = t2->Adj(as2), 5745 5744 tas1(t1,as1), tas2(t2,as2), … … 5763 5762 /*}}}1*/ 5764 5763 /*FUNCTION SwapForForcingEdge{{{1*/ 5765 int SwapForForcingEdge(BamgVertex * & pva ,BamgVertex * & pvb , TriangleAdjacent& tt1,Icoor2 & dets1, Icoor2 & detsa,Icoor2 & detsb, int & NbSwap) {5764 int SwapForForcingEdge(BamgVertex * & pva ,BamgVertex * & pvb ,AdjacentTriangle & tt1,Icoor2 & dets1, Icoor2 & detsa,Icoor2 & detsb, int & NbSwap) { 5766 5765 /*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Mesh2.cpp/SwapForForcingEdge)*/ 5767 5766 // l'arete ta coupe l'arete pva pvb … … 5773 5772 if(tt1.Locked()) return 0; // frontiere croise 5774 5773 5775 TriangleAdjacenttt2 = Adj(tt1);5774 AdjacentTriangle tt2 = Adj(tt1); 5776 5775 Triangle *t1=tt1,*t2=tt2;// les 2 triangles adjacent 5777 5776 short a1=tt1,a2=tt2;// les 2 numero de l arete dans les 2 triangles -
issm/trunk/src/c/objects/Bamg/Mesh.h
r5130 r5143 27 27 Geometry & Gh; // Geometry 28 28 Mesh & BTh; // Background Mesh Bth== *this =>no background 29 BamgVertex *vertices; 30 Triangle *triangles; 31 Edge *edges; 32 QuadTree *quadtree; 33 BamgVertex **ordre; 34 SubDomain *subdomains; 29 35 long NbRef; // counter of ref on the this class if 0 we can delete 30 36 long maxnbv,nbtx; // nombre max de sommets , de triangles … … 35 41 long NbOfTriangleSearchFind; 36 42 long NbOfSwapTriangle; 37 BamgVertex *vertices;38 43 long NbVerticesOnGeomVertex; 39 44 VertexOnGeom *VerticesOnGeomVertex; … … 50 55 R2 pmin,pmax; // extrema 51 56 double coefIcoor; // coef to integer Icoor1; 52 Triangle *triangles;53 Edge *edges;54 QuadTree *quadtree;55 BamgVertex **ordre;56 SubDomain *subdomains;57 57 ListofIntersectionTriangles lIntTria; 58 58 … … 156 156 157 157 /*Intermediary*/ 158 TriangleAdjacentCloseBoundaryEdge(I2 ,Triangle *, double &,double &) ;159 TriangleAdjacentCloseBoundaryEdgeV2(I2 A,Triangle *t, double &a,double &b);158 AdjacentTriangle CloseBoundaryEdge(I2 ,Triangle *, double &,double &) ; 159 AdjacentTriangle CloseBoundaryEdgeV2(I2 A,Triangle *t, double &a,double &b); 160 160 void swap(Triangle *t1,short a1, 161 161 Triangle *t2,short a2, 162 162 BamgVertex *s1,BamgVertex *s2,Icoor2 det1,Icoor2 det2); 163 163 int SwapForForcingEdge(BamgVertex * & pva ,BamgVertex * & pvb , 164 TriangleAdjacent& tt1,Icoor2 & dets1,164 AdjacentTriangle & tt1,Icoor2 & dets1, 165 165 Icoor2 & detsa,Icoor2 & detsb, int & nbswap); 166 int ForceEdge(BamgVertex &a, BamgVertex & b, TriangleAdjacent& taret) ;167 inline TriangleAdjacent Previous(const TriangleAdjacent& ta){168 return TriangleAdjacent(ta.t,PreviousEdge[ta.a]);166 int ForceEdge(BamgVertex &a, BamgVertex & b,AdjacentTriangle & taret) ; 167 inline AdjacentTriangle Previous(const AdjacentTriangle & ta){ 168 return AdjacentTriangle(ta.t,PreviousEdge[ta.a]); 169 169 } 170 inline TriangleAdjacent Next(const TriangleAdjacent& ta){171 return TriangleAdjacent(ta.t,NextEdge[ta.a]);170 inline AdjacentTriangle Next(const AdjacentTriangle & ta){ 171 return AdjacentTriangle(ta.t,NextEdge[ta.a]); 172 172 } 173 inline TriangleAdjacent Adj(const TriangleAdjacent& a){173 inline AdjacentTriangle Adj(const AdjacentTriangle & a){ 174 174 return a.Adj(); 175 175 } -
issm/trunk/src/c/objects/Bamg/Triangle.cpp
r5120 r5143 74 74 /*}}}*/ 75 75 /*FUNCTION Triangle::FindBoundaryEdge{{{1*/ 76 TriangleAdjacentTriangle::FindBoundaryEdge(int i) const{76 AdjacentTriangle Triangle::FindBoundaryEdge(int i) const{ 77 77 /*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Mesh2.cpp/FindBoundaryEdge)*/ 78 78 … … 103 103 outside = !ttc->link; 104 104 //if both previous triangle are outside, return 105 if (outside+outsidep == 1) return TriangleAdjacent(t,j);105 if (outside+outsidep == 1) return AdjacentTriangle(t,j); 106 106 107 107 //update t and j … … 117 117 } while (this!= t); 118 118 //not found, return empty triangle 119 return TriangleAdjacent(NULL,0);119 return AdjacentTriangle(NULL,0); 120 120 } 121 121 /*}}}1*/ -
issm/trunk/src/c/objects/Bamg/Triangle.h
r5124 r5143 3 3 4 4 #include "./include.h" 5 #include " TriangleAdjacent.h"5 #include "AdjacentTriangle.h" 6 6 7 7 namespace bamg { … … 14 14 class Triangle { 15 15 16 friend class TriangleAdjacent;16 friend class AdjacentTriangle; 17 17 18 18 private: 19 BamgVertex * TriaVertices[3];// 3 vertices if t is triangle, t[i] allowed by access function, (*t)[i] if pointer20 Triangle * TriaAdjTriangles[3];// 3 pointers toward the adjacent triangles21 short TriaAdjSharedEdge[3]; // number of the edges in the adjacent triangles the edge number 1 is the edge number TriaAdjSharedEdge[1] in the Adjacent triangle 119 BamgVertex *TriaVertices[3]; // 3 vertices if t is triangle, t[i] allowed by access function, (*t)[i] if pointer 20 Triangle *TriaAdjTriangles[3]; // 3 pointers toward the adjacent triangles 21 short TriaAdjSharedEdge[3]; // edge id in the adjacent triangles. The edge number 1 is the edge number TriaAdjSharedEdge[1] in the Adjacent triangle 1 22 22 23 23 public: 24 Icoor2 det; // determinant du triangle (2 fois l aire des vertices entieres)24 Icoor2 det; //Integer determinant (twice its area) 25 25 union { 26 Triangle * link;27 long color;26 Triangle *link; 27 long color; 28 28 }; 29 29 … … 49 49 double QualityQuad(int a,int option=1) const; 50 50 short NuEdgeTriangleAdj(int i) const {return TriaAdjSharedEdge[i&3]&3;} // Number of the adjacent edge in adj tria 51 TriangleAdjacentFindBoundaryEdge(int i) const;52 TriangleAdjacent Adj(int i) const {return TriangleAdjacent(TriaAdjTriangles[i],TriaAdjSharedEdge[i]&3);};51 AdjacentTriangle FindBoundaryEdge(int i) const; 52 AdjacentTriangle Adj(int i) const {return AdjacentTriangle(TriaAdjTriangles[i],TriaAdjSharedEdge[i]&3);}; 53 53 Triangle* TriangleAdj(int i) const {return TriaAdjTriangles[i&3];} 54 54 Triangle* Quadrangle(BamgVertex * & v0,BamgVertex * & v1,BamgVertex * & v2,BamgVertex * & v3) const ; -
issm/trunk/src/c/objects/objects.h
r5120 r5143 100 100 #include "./Bamg/Direction.h" 101 101 #include "./Bamg/BamgVertex.h" 102 #include "./Bamg/ TriangleAdjacent.h"102 #include "./Bamg/AdjacentTriangle.h" 103 103 #include "./Bamg/Edge.h" 104 104 #include "./Bamg/GeometricalVertex.h"
Note:
See TracChangeset
for help on using the changeset viewer.