Changeset 12218
- Timestamp:
- 05/07/12 10:54:06 (13 years ago)
- Location:
- issm/trunk-jpl/src/c
- Files:
-
- 7 edited
- 2 moved
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/Makefile.am
r12210 r12218 572 572 ./objects/Bamg/Metric.cpp\ 573 573 ./objects/Bamg/Metric.h\ 574 ./objects/Bamg/ QuadTree.cpp\575 ./objects/Bamg/ QuadTree.h\574 ./objects/Bamg/BamgQuadtree.cpp\ 575 ./objects/Bamg/BamgQuadtree.h\ 576 576 ./objects/Bamg/R2.h\ 577 577 ./objects/Bamg/SetOfE4.cpp\ -
issm/trunk-jpl/src/c/modules/Bamgx/Bamgx.cpp
r11551 r12218 92 92 93 93 //Make Quadtree from background mesh 94 BTh.Make QuadTree();94 BTh.MakeBamgQuadtree(); 95 95 96 96 //Bound hmin and hmax -
issm/trunk-jpl/src/c/objects/Bamg/BamgQuadtree.cpp
r12216 r12218 48 48 #define J_IJ(k,l) ((k&2) ? l:0) 49 49 /*}}}*/ 50 /*DOCUMENTATION What is a QuadTree? {{{150 /*DOCUMENTATION What is a BamgQuadtree? {{{1 51 51 * A Quadtree is a very simple way to group vertices according 52 52 * to their locations. A square that holds all the points of the mesh … … 97 97 98 98 /*Constructors/Destructors*/ 99 /*FUNCTION QuadTree::QuadTree(){{{1*/100 QuadTree::QuadTree(){99 /*FUNCTION BamgQuadtree::BamgQuadtree(){{{1*/ 100 BamgQuadtree::BamgQuadtree(){ 101 101 102 102 /*Number of boxes and vertices*/ 103 Nb QuadTreeBox=0;103 NbBamgQuadtreeBox=0; 104 104 NbVertices=0; 105 105 … … 108 108 109 109 /*Create Root, pointer toward the main box*/ 110 root=New QuadTreeBox();110 root=NewBamgQuadtreeBox(); 111 111 112 112 } 113 113 /*}}}1*/ 114 /*FUNCTION QuadTree::QuadTree(Mesh * t,long nbv){{{1*/115 QuadTree::QuadTree(Mesh * t,long nbv){114 /*FUNCTION BamgQuadtree::BamgQuadtree(Mesh * t,long nbv){{{1*/ 115 BamgQuadtree::BamgQuadtree(Mesh * t,long nbv){ 116 116 117 117 /*Number of boxes and vertices*/ 118 Nb QuadTreeBox=0;118 NbBamgQuadtreeBox=0; 119 119 NbVertices=0; 120 120 … … 123 123 124 124 /*Create Root, pointer toward the main box*/ 125 root=New QuadTreeBox();125 root=NewBamgQuadtreeBox(); 126 126 127 127 /*Check Sizes*/ … … 134 134 } 135 135 /*}}}1*/ 136 /*FUNCTION QuadTree::~QuadTree(){{{1*/137 QuadTree::~QuadTree() {136 /*FUNCTION BamgQuadtree::~BamgQuadtree(){{{1*/ 137 BamgQuadtree::~BamgQuadtree() { 138 138 delete boxcontainer; 139 139 root=NULL; … … 142 142 143 143 /*Methods*/ 144 /*FUNCTION QuadTree::Add{{{1*/145 void QuadTree::Add(BamgVertex &w){146 /*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, QuadTree.cpp/Add)*/147 QuadTreeBox** pb=NULL;148 QuadTreeBox* b=NULL;144 /*FUNCTION BamgQuadtree::Add{{{1*/ 145 void BamgQuadtree::Add(BamgVertex &w){ 146 /*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, BamgQuadtree.cpp/Add)*/ 147 BamgQuadtreeBox** pb=NULL; 148 BamgQuadtreeBox* b=NULL; 149 149 150 150 /*Get integer coodinate of current point w*/ … … 184 184 /*Now, try to add the vertex, if the subbox is full (nbitems=4), we have to divide it 185 185 in 4 new subboxes*/ 186 while ((b= *pb) && (b->nbitems == 4)){ // the QuadTreeBox is full187 188 /*Copy the 4 vertices in the current QuadTreebox*/186 while ((b= *pb) && (b->nbitems == 4)){ // the BamgQuadtreeBox is full 187 188 /*Copy the 4 vertices in the current BamgQuadtreebox*/ 189 189 BamgVertex* v4[4]; 190 190 v4[0]= b->v[0]; … … 208 208 int ij; 209 209 /*bb is the new "sub"box of b where v4[k] is located*/ 210 QuadTreeBox *bb = b->b[ij=IJ(v4[k]->i.x,v4[k]->i.y,level)];211 212 // alloc the QuadTreeBox213 if (!bb) bb=b->b[ij]=New QuadTreeBox();210 BamgQuadtreeBox *bb = b->b[ij=IJ(v4[k]->i.x,v4[k]->i.y,level)]; 211 212 // alloc the BamgQuadtreeBox 213 if (!bb) bb=b->b[ij]=NewBamgQuadtreeBox(); 214 214 215 215 /*Copy the current vertex*/ … … 221 221 } 222 222 223 /*alloc the QuadTreeBox if necessary*/224 if (!(b=*pb)) b=*pb= New QuadTreeBox();223 /*alloc the BamgQuadtreeBox if necessary*/ 224 if (!(b=*pb)) b=*pb= NewBamgQuadtreeBox(); 225 225 226 226 /*Add w*/ … … 231 231 } 232 232 /*}}}1*/ 233 /*FUNCTION QuadTree::NearestVertex{{{1*/234 BamgVertex* QuadTree::NearestVertex(Icoor1 i,Icoor1 j) {235 /*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, QuadTree.cpp/NearestVertex)*/233 /*FUNCTION BamgQuadtree::NearestVertex{{{1*/ 234 BamgVertex* BamgQuadtree::NearestVertex(Icoor1 i,Icoor1 j) { 235 /*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, BamgQuadtree.cpp/NearestVertex)*/ 236 236 237 237 /*Intermediaries*/ 238 QuadTreeBox *pb[MaxDepth];238 BamgQuadtreeBox *pb[MaxDepth]; 239 239 int pi[MaxDepth]; 240 240 Icoor1 ii[MaxDepth]; … … 242 242 int level; 243 243 long n0; 244 QuadTreeBox *b;244 BamgQuadtreeBox *b; 245 245 long h0; 246 246 long h = MaxISize; … … 261 261 if (!root->nbitems) return nearest_v; 262 262 263 /*else, find the smallest non-empty QuadTreeBox containing the point (i,j)*/263 /*else, find the smallest non-empty BamgQuadtreeBox containing the point (i,j)*/ 264 264 while((n0=b->nbitems)<0){ 265 265 266 266 Icoor1 hb2 = hb >> 1; //size of the current box 267 267 int k = IJ(iplus,jplus,hb2); //box number (0,1,2 or 3) 268 QuadTreeBox *b0 = b->b[k]; //pointer toward current box268 BamgQuadtreeBox *b0 = b->b[k]; //pointer toward current box 269 269 270 270 /* break if NULL box or empty (Keep previous box b)*/ … … 273 273 /*Get next Quadtree box*/ 274 274 b=b0; 275 i0 += I_IJ(k,hb2); // i orign of QuadTreeBox (macro)276 j0 += J_IJ(k,hb2); // j orign of QuadTreeBox275 i0 += I_IJ(k,hb2); // i orign of BamgQuadtreeBox (macro) 276 j0 += J_IJ(k,hb2); // j orign of BamgQuadtreeBox 277 277 hb = hb2; // size of the box (in Int) 278 278 } … … 346 346 * non empty box containing w, or the closest point to w (so far) */ 347 347 else{ 348 QuadTreeBox* b0=b;348 BamgQuadtreeBox* b0=b; 349 349 350 350 /*if the next box exists:*/ … … 390 390 } 391 391 /*}}}1*/ 392 /*FUNCTION QuadTree::NearestVertexWithNormal{{{1*/393 BamgVertex* QuadTree::NearestVertexWithNormal(Icoor1 i,Icoor1 j) {394 /*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, QuadTree.cpp/NearestVertexWithNormal)*/395 396 QuadTreeBox * pb[ MaxDepth ];392 /*FUNCTION BamgQuadtree::NearestVertexWithNormal{{{1*/ 393 BamgVertex* BamgQuadtree::NearestVertexWithNormal(Icoor1 i,Icoor1 j) { 394 /*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, BamgQuadtree.cpp/NearestVertexWithNormal)*/ 395 396 BamgQuadtreeBox * pb[ MaxDepth ]; 397 397 int pi[ MaxDepth ]; 398 398 Icoor1 ii[ MaxDepth ], jj [ MaxDepth]; 399 399 int l; // level 400 QuadTreeBox * b;400 BamgQuadtreeBox * b; 401 401 long h =MaxISize,h0; 402 402 long hb=MaxISize; … … 416 416 { 417 417 // search the non empty 418 // QuadTreeBox containing the point (i,j)418 // BamgQuadtreeBox containing the point (i,j) 419 419 register Icoor1 hb2 = hb >> 1 ; 420 register int k = IJ(iplus,jplus,hb2);// QuadTreeBox number of size hb2 contening i;j421 register QuadTreeBox * b0= b->b[k];420 register int k = IJ(iplus,jplus,hb2);// BamgQuadtreeBox number of size hb2 contening i;j 421 register BamgQuadtreeBox * b0= b->b[k]; 422 422 if ( ( b0 == 0) || (b0->nbitems == 0) ) 423 423 break; // null box or empty => break 424 424 b=b0; 425 i0 += I_IJ(k,hb2); // i orign of QuadTreeBox426 j0 += J_IJ(k,hb2); // j orign of QuadTreeBox425 i0 += I_IJ(k,hb2); // i orign of BamgQuadtreeBox 426 j0 += J_IJ(k,hb2); // j orign of BamgQuadtreeBox 427 427 hb = hb2; 428 428 } … … 456 456 int k = pi[l]; 457 457 458 if (b->nbitems>0) // BamgVertex QuadTreeBox none empty458 if (b->nbitems>0) // BamgVertex BamgQuadtreeBox none empty 459 459 { 460 460 I2 i2 = b->v[k]->i; … … 468 468 } 469 469 } 470 else // Pointer QuadTreeBox470 else // Pointer BamgQuadtreeBox 471 471 { 472 register QuadTreeBox *b0=b;472 register BamgQuadtreeBox *b0=b; 473 473 if ((b=b->b[k])) 474 474 { … … 498 498 } 499 499 /*}}}1*/ 500 /*FUNCTION QuadTree::NewQuadTreeBox {{{1*/501 QuadTree::QuadTreeBox* QuadTree::NewQuadTreeBox(void){500 /*FUNCTION BamgQuadtree::NewBamgQuadtreeBox {{{1*/ 501 BamgQuadtree::BamgQuadtreeBox* BamgQuadtree::NewBamgQuadtreeBox(void){ 502 502 503 503 /*Output*/ 504 QuadTreeBox* newbox=NULL;504 BamgQuadtreeBox* newbox=NULL; 505 505 506 506 /*Create and initialize a new box*/ 507 newbox=new QuadTreeBox;507 newbox=new BamgQuadtreeBox; 508 508 newbox->nbitems=0; 509 509 newbox->b[0]=NULL; … … 516 516 517 517 /*Increase counter*/ 518 Nb QuadTreeBox++;518 NbBamgQuadtreeBox++; 519 519 520 520 /*currentbox now points toward next quadtree box*/ 521 521 return newbox; 522 522 }/*}}}*/ 523 /*FUNCTION QuadTree::ToClose {{{1*/524 BamgVertex* QuadTree::ToClose(BamgVertex & v,double seuil,Icoor1 hx,Icoor1 hy){525 /*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, QuadTree.cpp/ToClose)*/523 /*FUNCTION BamgQuadtree::ToClose {{{1*/ 524 BamgVertex* BamgQuadtree::ToClose(BamgVertex & v,double seuil,Icoor1 hx,Icoor1 hy){ 525 /*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, BamgQuadtree.cpp/ToClose)*/ 526 526 527 527 const Icoor1 i=v.i.x; … … 530 530 const Metric Mx(v.m); 531 531 532 QuadTreeBox * pb[ MaxDepth ];532 BamgQuadtreeBox * pb[ MaxDepth ]; 533 533 int pi[ MaxDepth ]; 534 534 Icoor1 ii[ MaxDepth ], jj [ MaxDepth]; 535 535 register int l=0; // level 536 register QuadTreeBox * b;536 register BamgQuadtreeBox * b; 537 537 Icoor1 h=MaxISize; 538 538 Icoor1 hb = MaxISize; … … 555 555 register int k = pi[l]; 556 556 557 if (b->nbitems>0){ // BamgVertex QuadTreeBox none empty557 if (b->nbitems>0){ // BamgVertex BamgQuadtreeBox none empty 558 558 I2 i2 = b->v[k]->i; 559 559 if ( ABS(i-i2.x) <hx && ABS(j-i2.y) <hy ) … … 566 566 } 567 567 } 568 else{ // Pointer QuadTreeBox569 register QuadTreeBox *b0=b;568 else{ // Pointer BamgQuadtreeBox 569 register BamgQuadtreeBox *b0=b; 570 570 if ((b=b->b[k])){ 571 571 hb >>=1 ; // div by 2 -
issm/trunk-jpl/src/c/objects/Bamg/BamgQuadtree.h
r12216 r12218 1 /*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, QuadTree.h)*/1 /*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, BamgQuadtree.h)*/ 2 2 #ifndef _QUADTREE_H 3 3 #define _QUADTREE_H … … 12 12 class BamgVertex; 13 13 14 class QuadTree{14 class BamgQuadtree{ 15 15 16 16 private: … … 21 21 * - up to 4 vertices 22 22 * - 4 "sub" quadtree boxes*/ 23 class QuadTreeBox: public Object{23 class BamgQuadtreeBox: public Object{ 24 24 public: 25 25 int nbitems; // number of current vertices in the box 26 26 union{ 27 QuadTreeBox* b[4];27 BamgQuadtreeBox* b[4]; 28 28 BamgVertex* v[4]; 29 29 }; 30 30 /*Object functions*/ 31 void Echo(){_error_("not implemented yet");};32 void DeepEcho(){_error_("not implemented yet");};33 int Id(){_error_("not implemented yet");};34 int MyRank(){_error_("not implemented yet");};35 int ObjectEnum(){_error_("not implemented yet");};36 Object * copy(){_error_("not implemented yet");};31 void Echo() {_error_("not implemented yet"); }; 32 void DeepEcho() {_error_("not implemented yet"); }; 33 int Id() {_error_("not implemented yet"); }; 34 int MyRank() {_error_("not implemented yet"); }; 35 int ObjectEnum() {_error_("not implemented yet"); }; 36 Object *copy() {_error_("not implemented yet"); }; 37 37 }; 38 38 39 /* QuadTree private Fields*/39 /*BamgQuadtree private Fields*/ 40 40 DataSet* boxcontainer; 41 41 42 42 public: 43 43 44 /* QuadTree public Fields*/45 QuadTreeBox* root;46 long Nb QuadTreeBox;44 /*BamgQuadtree public Fields*/ 45 BamgQuadtreeBox* root; 46 long NbBamgQuadtreeBox; 47 47 long NbVertices; 48 48 49 QuadTree();50 QuadTree(Mesh *t,long nbv=-1);51 ~ QuadTree();49 BamgQuadtree(); 50 BamgQuadtree(Mesh *t,long nbv=-1); 51 ~BamgQuadtree(); 52 52 53 BamgVertex* NearestVertex(Icoor1 i,Icoor1 j); 54 BamgVertex* NearestVertexWithNormal(Icoor1 i,Icoor1 j); 55 QuadTreeBox* NewQuadTreeBox(void); 56 BamgVertex* ToClose(BamgVertex & ,double ,Icoor1,Icoor1); 57 void Add( BamgVertex & w); 58 53 BamgVertex *NearestVertex(Icoor1 i,Icoor1 j); 54 BamgVertex *NearestVertexWithNormal(Icoor1 i,Icoor1 j); 55 BamgQuadtreeBox *NewBamgQuadtreeBox(void); 56 BamgVertex *ToClose(BamgVertex &,double ,Icoor1,Icoor1); 57 void Add(BamgVertex &w); 59 58 }; 60 59 } -
issm/trunk-jpl/src/c/objects/Bamg/Geometry.cpp
r9309 r12218 505 505 float *eangle = new float[nbe]; 506 506 double eps = 1e-20; 507 QuadTree quadtree; // build quadtree to find duplicates507 BamgQuadtree quadtree; // build quadtree to find duplicates 508 508 BamgVertex *v0 = vertices; 509 509 GeomVertex *v0g = (GeomVertex*) (void*)v0; -
issm/trunk-jpl/src/c/objects/Bamg/Geometry.h
r5573 r12218 12 12 13 13 class Triangle; 14 class QuadTree;14 class BamgQuadtree; 15 15 class GeomSubDomain; 16 16 class Edge; … … 20 20 public: 21 21 22 long NbRef;// counter of ref on the this class if 0 we can delete23 long nbv;// number of vertices24 long nbe;// number of edges25 long 26 long 22 long NbRef; // counter of ref on the this class if 0 we can delete 23 long nbv; // number of vertices 24 long nbe; // number of edges 25 long nbsubdomains; 26 long nbcurves; 27 27 GeomVertex *vertices; 28 28 GeomEdge *edges; 29 QuadTree*quadtree;29 BamgQuadtree *quadtree; 30 30 GeomSubDomain *subdomains; 31 Curve 32 R2 pmin,pmax;// domain extrema coordinates33 double coefIcoor;// coef to integer Icoor1;34 double 31 Curve *curves; 32 R2 pmin,pmax; // domain extrema coordinates 33 double coefIcoor; // coef to integer Icoor1; 34 double MaxCornerAngle; 35 35 36 36 //Constructor/Destructors … … 44 44 GeomVertex &operator[](long i) { return vertices[i]; }; 45 45 const GeomEdge &operator()(long i) const { return edges[i]; }; 46 GeomEdge &operator()(long i) { return edges[i]; 46 GeomEdge &operator()(long i) { return edges[i]; }; 47 47 48 48 //Methods -
issm/trunk-jpl/src/c/objects/Bamg/Mesh.cpp
r11584 r12218 2885 2885 2886 2886 //build quadtree 2887 if (!quadtree) quadtree = new QuadTree(this,0);2887 if (!quadtree) quadtree = new BamgQuadtree(this,0); 2888 2888 quadtree->Add(*v0); 2889 2889 quadtree->Add(*v1); … … 3107 3107 } 3108 3108 /*}}}1*/ 3109 /*FUNCTION Mesh::Make QuadTree{{{1*/3110 void Mesh::Make QuadTree() {3111 /*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Mesh2.cpp/Make QuadTree)*/3109 /*FUNCTION Mesh::MakeBamgQuadtree{{{1*/ 3110 void Mesh::MakeBamgQuadtree() { 3111 /*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Mesh2.cpp/MakeBamgQuadtree)*/ 3112 3112 3113 3113 long int verbose=0; 3114 if ( !quadtree ) quadtree = new QuadTree(this);3114 if ( !quadtree ) quadtree = new BamgQuadtree(this); 3115 3115 3116 3116 } … … 3622 3622 3623 3623 if (!quadtree) delete quadtree; //ReInitialise; 3624 quadtree = new QuadTree(this,0);3624 quadtree = new BamgQuadtree(this,0); 3625 3625 quadtree->Add(*v0); 3626 3626 quadtree->Add(*v1); … … 3900 3900 if (quadtree){ 3901 3901 delete quadtree; 3902 quadtree = new QuadTree(this);3902 quadtree = new BamgQuadtree(this); 3903 3903 } 3904 3904 … … 4116 4116 4117 4117 delete [] tstart; 4118 if (quadtree) quadtree= new QuadTree(this);4118 if (quadtree) quadtree= new BamgQuadtree(this); 4119 4119 } 4120 4120 /*}}}1*/ -
issm/trunk-jpl/src/c/objects/Bamg/Mesh.h
r10205 r12218 17 17 class Geometry; 18 18 class CrackedEdge; 19 class QuadTree;19 class BamgQuadtree; 20 20 class SubDomain; 21 21 … … 29 29 Triangle *triangles; 30 30 Edge *edges; 31 QuadTree*quadtree;31 BamgQuadtree *quadtree; 32 32 BamgVertex **orderedvertices; 33 33 SubDomain *subdomains; … … 94 94 void MakeQuadrangles(double costheta); 95 95 int SplitElement(int choice); 96 void Make QuadTree();96 void MakeBamgQuadtree(); 97 97 void NewPoints(Mesh &,BamgOpts* bamgopts,int KeepVertices=1); 98 98 long InsertNewPoints(long nbvold,long & NbTSwap) ; -
issm/trunk-jpl/src/c/objects/objects.h
r12207 r12218 170 170 #include "./Bamg/Mesh.h" 171 171 #include "./Bamg/Geometry.h" 172 #include "./Bamg/ QuadTree.h"172 #include "./Bamg/BamgQuadtree.h" 173 173 #include "./Bamg/SetOfE4.h" 174 174
Note:
See TracChangeset
for help on using the changeset viewer.