diff --git a/Mesh/2D_Recombine.cpp b/Mesh/2D_Recombine.cpp index 672f18cc1a7ea1b36abc9a8f3c9f9614cb8db630..698c6ac04f78c42122d1997fd5d185e26d1100bc 100644 --- a/Mesh/2D_Recombine.cpp +++ b/Mesh/2D_Recombine.cpp @@ -1,4 +1,4 @@ -// $Id: 2D_Recombine.cpp,v 1.17 2004-02-07 01:40:21 geuzaine Exp $ +// $Id: 2D_Recombine.cpp,v 1.18 2004-04-18 17:45:39 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -29,8 +29,7 @@ extern Context_T CTX; -static Tree_T *RecEdges, *Triangles; -static Tree_T *RecSimplex, *TREEELM; +static Tree_T *RecEdges, *Triangles, *RecSimplex, *TREEELM; static double ALPHA; static int RECNUM; @@ -98,7 +97,7 @@ void Recombine_Farce(void *a, void *b) int Recombine(Tree_T * TreeAllVert, Tree_T * TreeAllElg, double a) { - Tree_T *TreeEdges, *tnxe; + Tree_T *tnxe; int ntot; ALPHA = a; @@ -109,16 +108,15 @@ int Recombine(Tree_T * TreeAllVert, Tree_T * TreeAllElg, double a) /* Initialisation */ RECNUM = 0; - TreeEdges = Tree_Create(sizeof(Edge), compareedge); RecEdges = Tree_Create(sizeof(Edge), compareedge_angle); RecSimplex = Tree_Create(sizeof(Simplex *), compareSimplex); Triangles = Tree_Create(sizeof(Simplex *), compareSimplex); /* Recombinaison */ Tree_Action(TreeAllElg, addTriangles); - crEdges(Triangles, TreeEdges); - Tree_Action(TreeEdges, CalculeAngles); - Tree_Action(TreeEdges, addrecedges); + EdgesContainer edges(Triangles, false); + Tree_Action(edges.AllEdges, CalculeAngles); + Tree_Action(edges.AllEdges, addrecedges); Tree_Action(RecEdges, Recombine_Farce); /* Lissage */ @@ -133,7 +131,6 @@ int Recombine(Tree_T * TreeAllVert, Tree_T * TreeAllElg, double a) } /* Destruction */ - Tree_Delete(TreeEdges); Tree_Delete(RecEdges); Tree_Delete(RecSimplex); Tree_Delete(Triangles); diff --git a/Mesh/3D_Coherence.cpp b/Mesh/3D_Coherence.cpp index 214f25bec8d5ccf255cf6e969e424a1431e98dc9..eaa147f49d2990ce968a33cd5df2dd518847aa22 100644 --- a/Mesh/3D_Coherence.cpp +++ b/Mesh/3D_Coherence.cpp @@ -1,4 +1,4 @@ -// $Id: 3D_Coherence.cpp,v 1.31 2004-02-07 01:40:21 geuzaine Exp $ +// $Id: 3D_Coherence.cpp,v 1.32 2004-04-18 17:45:39 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -38,12 +38,6 @@ static List_T *Teti; List_T *Missing, *MissingF, *MissingS; Tree_T *EdgesTree, *FacesTree, *swaps, *touchedvertex; -int edges_quad[4][2] = { - {0, 1}, - {1, 2}, - {2, 3}, - {3, 0} -}; int edges_tetra[6][2] = { {0, 1}, {1, 2}, @@ -53,7 +47,6 @@ int edges_tetra[6][2] = { {3, 1} }; int edges_non[3] = { 2, 0, 1 }; -int EdgesInVolume = 1; int memesens(Vertex * v1, Vertex * v2, Vertex * v3, Vertex * c1, Vertex * c2, Vertex * c3) @@ -243,18 +236,12 @@ void create_Edge(void *a, void *b) s = *ps; int edges[6][2]; - if(s->V[3] && EdgesInVolume) { + if(s->V[3]) { N = 6; for(i = 0; i < N; i++) for(j = 0; j < 2; j++) edges[i][j] = edges_tetra[i][j]; } - else if(s->V[3]) { - N = 4; - for(i = 0; i < N; i++) - for(j = 0; j < 2; j++) - edges[i][j] = edges_quad[i][j]; - } else if(s->V[2]) { N = 3; for(i = 0; i < N; i++) @@ -318,14 +305,6 @@ void create_Edges(Volume * V) } } - -void crEdges(Tree_T * TreeElem, Tree_T * treeedges) -{ - EdgesTree = treeedges; - Tree_Action(TreeElem, create_Edge); -} - - void find_missing(void *a, void *b) { Edge *e; diff --git a/Mesh/Mesh.h b/Mesh/Mesh.h index 2ef267e7179335b564c8a6479c1fabbd80e579b2..83e155d8d86978dd69689a4d78f30aa507e94f3f 100644 --- a/Mesh/Mesh.h +++ b/Mesh/Mesh.h @@ -495,7 +495,6 @@ void Projette_Plan_Moyen (void *a, void *b); void Projette_Inverse (void *a, void *b); void Freeze_Vertex (void *a, void *b); void deFreeze_Vertex (void *a, void *b); -void crEdges (Tree_T * TreeElem, Tree_T * treeedges); double Lc_XYZ (double X, double Y, double Z, Mesh * m); void Degre1(); diff --git a/Mesh/SecondOrder.cpp b/Mesh/SecondOrder.cpp index 1d5180294d533b00ecdc83386933f0eb95d91203..c224b50ffb549801fa5b2535eaf6b38d40614e85 100644 --- a/Mesh/SecondOrder.cpp +++ b/Mesh/SecondOrder.cpp @@ -1,4 +1,4 @@ -// $Id: SecondOrder.cpp,v 1.19 2004-04-18 03:36:07 geuzaine Exp $ +// $Id: SecondOrder.cpp,v 1.20 2004-04-18 17:45:39 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -31,17 +31,16 @@ // - middle face nodes for quads, hexas, prisms and pyramids // we really need to remove the quads from the simplex tree: it's a -// real mess right now (EdgesInVolume makes sense only if we don't try -// to do a 3D mesh with quads on surfaces) - -// -> add a Quad tree in Surface (like the Hax/Prism/Pyramid tree in -// Volume); generalize Edge in terms of Element, and dynamic cast to -// Simplex, Quandrangle, Hexahdra, etc. +// real mess right now -> add a Quad tree in Surface (like the +// Hax/Prism/Pyramid tree in Volume); generalize Edge in terms of +// Element, and dynamic cast to Simplex, Quandrangle, Hexahdra, etc. extern Mesh *THEM; -static Surface *THES; -static Curve *THEC; +static Surface *THES = NULL; +static Curve *THEC = NULL; +static EdgesContainer *edges = NULL; +static List_T *VerticesToDelete = NULL; Vertex *oncurve(Vertex * v1, Vertex * v2) { @@ -121,9 +120,20 @@ Vertex *onsurface(Vertex * v1, Vertex * v2) return pv; } -extern int edges_tetra[6][2]; -extern int edges_quad[4][2]; -extern int EdgesInVolume; +static int edges_tetra[6][2] = { + {0, 1}, + {1, 2}, + {2, 0}, + {3, 0}, + {3, 2}, + {3, 1} +}; +static int edges_quad[4][2] = { + {0, 1}, + {1, 2}, + {2, 3}, + {3, 0} +}; void PutMiddlePoint(void *a, void *b) { @@ -157,7 +167,7 @@ void PutMiddlePoint(void *a, void *b) for(i = 0; i < List_Nbr(ed->Simplexes); i++) { List_Read(ed->Simplexes, i, &s); - if(s->V[3] && EdgesInVolume) { // tetrahedron + if(s->V[3] && !THES) { // tetrahedron if(!s->VSUP) s->VSUP = (Vertex **) Malloc(6 * sizeof(Vertex *)); N = 6; @@ -201,9 +211,6 @@ void PutMiddlePoint(void *a, void *b) } } -static Tree_T *TreeEdges = NULL; -static List_T *VerticesToDelete = NULL; - void ResetDegre2_Vertex(void *a, void *b) { Vertex *v = *(Vertex**)a; @@ -242,9 +249,9 @@ void ResetDegre2_Volume(void *a, void *b) void Degre1() { // (re-)initialize the global tree of edges - if(TreeEdges) - Tree_Delete(TreeEdges); - TreeEdges = Tree_Create(sizeof(Edge), compareedge); + if(edges) + delete edges; + edges = new EdgesContainer(); // reset VSUP in each element Tree_Action(THEM->Curves, ResetDegre2_Curve); @@ -267,22 +274,20 @@ void Degre2_Curve(void *a, void *b) { Curve *c = *(Curve**)a; if(c->Dirty) return; + edges->AddTree(c->Simplexes, false); THEC = c; THES = NULL; - EdgesInVolume = 0; - crEdges(c->Simplexes, TreeEdges); - Tree_Action(TreeEdges, PutMiddlePoint); + Tree_Action(edges->AllEdges, PutMiddlePoint); } void Degre2_Surface(void *a, void *b) { Surface *s = *(Surface**)a; if(s->Dirty) return; + edges->AddTree(s->Simplexes, false); THEC = NULL; THES = s; - EdgesInVolume = 0; - crEdges(s->Simplexes, TreeEdges); - Tree_Action(TreeEdges, PutMiddlePoint); + Tree_Action(edges->AllEdges, PutMiddlePoint); } void Degre2_Volume(void *a, void *b) @@ -297,36 +302,14 @@ void Degre2_Volume(void *a, void *b) return; } + edges->AddTree(v->Simplexes, true); THEC = NULL; THES = NULL; - EdgesInVolume = 1; - crEdges(v->Simplexes, TreeEdges); - Tree_Action(TreeEdges, PutMiddlePoint); -} - -void Degre2(int dim) -{ - int old = EdgesInVolume; - - Degre1(); - if(dim >= 1) - Tree_Action(THEM->Curves, Degre2_Curve); - if(dim >= 2) - Tree_Action(THEM->Surfaces, Degre2_Surface); - if(dim >= 3) - Tree_Action(THEM->Volumes, Degre2_Volume); - - EdgesInVolume = old; + Tree_Action(edges->AllEdges, PutMiddlePoint); } -/* new interface -EdgesContainer *edges = NULL; - void Degre2(int dim) { - if(edges) - delete edges; - edges = new EdgesContainer(); Degre1(); if(dim >= 1) Tree_Action(THEM->Curves, Degre2_Curve); @@ -335,4 +318,3 @@ void Degre2(int dim) if(dim >= 3) Tree_Action(THEM->Volumes, Degre2_Volume); } -*/