Skip to content
Snippets Groups Projects
Commit 27004ccf authored by Christophe Geuzaine's avatar Christophe Geuzaine
Browse files

- converted 2D_Recombine and SecondOrder to the EdgesContainer class
- removed the quadrangle hak and the ugly EdgesInVolume global from 3D_Coherence
parent 8ee58fb2
No related branches found
No related tags found
No related merge requests found
// $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 // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
// //
...@@ -29,8 +29,7 @@ ...@@ -29,8 +29,7 @@
extern Context_T CTX; extern Context_T CTX;
static Tree_T *RecEdges, *Triangles; static Tree_T *RecEdges, *Triangles, *RecSimplex, *TREEELM;
static Tree_T *RecSimplex, *TREEELM;
static double ALPHA; static double ALPHA;
static int RECNUM; static int RECNUM;
...@@ -98,7 +97,7 @@ void Recombine_Farce(void *a, void *b) ...@@ -98,7 +97,7 @@ void Recombine_Farce(void *a, void *b)
int Recombine(Tree_T * TreeAllVert, Tree_T * TreeAllElg, double a) int Recombine(Tree_T * TreeAllVert, Tree_T * TreeAllElg, double a)
{ {
Tree_T *TreeEdges, *tnxe; Tree_T *tnxe;
int ntot; int ntot;
ALPHA = a; ALPHA = a;
...@@ -109,16 +108,15 @@ int Recombine(Tree_T * TreeAllVert, Tree_T * TreeAllElg, double a) ...@@ -109,16 +108,15 @@ int Recombine(Tree_T * TreeAllVert, Tree_T * TreeAllElg, double a)
/* Initialisation */ /* Initialisation */
RECNUM = 0; RECNUM = 0;
TreeEdges = Tree_Create(sizeof(Edge), compareedge);
RecEdges = Tree_Create(sizeof(Edge), compareedge_angle); RecEdges = Tree_Create(sizeof(Edge), compareedge_angle);
RecSimplex = Tree_Create(sizeof(Simplex *), compareSimplex); RecSimplex = Tree_Create(sizeof(Simplex *), compareSimplex);
Triangles = Tree_Create(sizeof(Simplex *), compareSimplex); Triangles = Tree_Create(sizeof(Simplex *), compareSimplex);
/* Recombinaison */ /* Recombinaison */
Tree_Action(TreeAllElg, addTriangles); Tree_Action(TreeAllElg, addTriangles);
crEdges(Triangles, TreeEdges); EdgesContainer edges(Triangles, false);
Tree_Action(TreeEdges, CalculeAngles); Tree_Action(edges.AllEdges, CalculeAngles);
Tree_Action(TreeEdges, addrecedges); Tree_Action(edges.AllEdges, addrecedges);
Tree_Action(RecEdges, Recombine_Farce); Tree_Action(RecEdges, Recombine_Farce);
/* Lissage */ /* Lissage */
...@@ -133,7 +131,6 @@ int Recombine(Tree_T * TreeAllVert, Tree_T * TreeAllElg, double a) ...@@ -133,7 +131,6 @@ int Recombine(Tree_T * TreeAllVert, Tree_T * TreeAllElg, double a)
} }
/* Destruction */ /* Destruction */
Tree_Delete(TreeEdges);
Tree_Delete(RecEdges); Tree_Delete(RecEdges);
Tree_Delete(RecSimplex); Tree_Delete(RecSimplex);
Tree_Delete(Triangles); Tree_Delete(Triangles);
......
// $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 // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
// //
...@@ -38,12 +38,6 @@ static List_T *Teti; ...@@ -38,12 +38,6 @@ static List_T *Teti;
List_T *Missing, *MissingF, *MissingS; List_T *Missing, *MissingF, *MissingS;
Tree_T *EdgesTree, *FacesTree, *swaps, *touchedvertex; Tree_T *EdgesTree, *FacesTree, *swaps, *touchedvertex;
int edges_quad[4][2] = {
{0, 1},
{1, 2},
{2, 3},
{3, 0}
};
int edges_tetra[6][2] = { int edges_tetra[6][2] = {
{0, 1}, {0, 1},
{1, 2}, {1, 2},
...@@ -53,7 +47,6 @@ int edges_tetra[6][2] = { ...@@ -53,7 +47,6 @@ int edges_tetra[6][2] = {
{3, 1} {3, 1}
}; };
int edges_non[3] = { 2, 0, 1 }; int edges_non[3] = { 2, 0, 1 };
int EdgesInVolume = 1;
int memesens(Vertex * v1, Vertex * v2, Vertex * v3, int memesens(Vertex * v1, Vertex * v2, Vertex * v3,
Vertex * c1, Vertex * c2, Vertex * c3) Vertex * c1, Vertex * c2, Vertex * c3)
...@@ -243,18 +236,12 @@ void create_Edge(void *a, void *b) ...@@ -243,18 +236,12 @@ void create_Edge(void *a, void *b)
s = *ps; s = *ps;
int edges[6][2]; int edges[6][2];
if(s->V[3] && EdgesInVolume) { if(s->V[3]) {
N = 6; N = 6;
for(i = 0; i < N; i++) for(i = 0; i < N; i++)
for(j = 0; j < 2; j++) for(j = 0; j < 2; j++)
edges[i][j] = edges_tetra[i][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]) { else if(s->V[2]) {
N = 3; N = 3;
for(i = 0; i < N; i++) for(i = 0; i < N; i++)
...@@ -318,14 +305,6 @@ void create_Edges(Volume * V) ...@@ -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) void find_missing(void *a, void *b)
{ {
Edge *e; Edge *e;
......
...@@ -495,7 +495,6 @@ void Projette_Plan_Moyen (void *a, void *b); ...@@ -495,7 +495,6 @@ void Projette_Plan_Moyen (void *a, void *b);
void Projette_Inverse (void *a, void *b); void Projette_Inverse (void *a, void *b);
void Freeze_Vertex (void *a, void *b); void Freeze_Vertex (void *a, void *b);
void deFreeze_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); double Lc_XYZ (double X, double Y, double Z, Mesh * m);
void Degre1(); void Degre1();
......
// $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 // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
// //
...@@ -31,17 +31,16 @@ ...@@ -31,17 +31,16 @@
// - middle face nodes for quads, hexas, prisms and pyramids // - middle face nodes for quads, hexas, prisms and pyramids
// we really need to remove the quads from the simplex tree: it's a // 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 // real mess right now -> add a Quad tree in Surface (like the
// to do a 3D mesh with quads on surfaces) // Hax/Prism/Pyramid tree in Volume); generalize Edge in terms of
// Element, and dynamic cast to Simplex, Quandrangle, Hexahdra, etc.
// -> 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; extern Mesh *THEM;
static Surface *THES; static Surface *THES = NULL;
static Curve *THEC; static Curve *THEC = NULL;
static EdgesContainer *edges = NULL;
static List_T *VerticesToDelete = NULL;
Vertex *oncurve(Vertex * v1, Vertex * v2) Vertex *oncurve(Vertex * v1, Vertex * v2)
{ {
...@@ -121,9 +120,20 @@ Vertex *onsurface(Vertex * v1, Vertex * v2) ...@@ -121,9 +120,20 @@ Vertex *onsurface(Vertex * v1, Vertex * v2)
return pv; return pv;
} }
extern int edges_tetra[6][2]; static int edges_tetra[6][2] = {
extern int edges_quad[4][2]; {0, 1},
extern int EdgesInVolume; {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) void PutMiddlePoint(void *a, void *b)
{ {
...@@ -157,7 +167,7 @@ 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++) { for(i = 0; i < List_Nbr(ed->Simplexes); i++) {
List_Read(ed->Simplexes, i, &s); List_Read(ed->Simplexes, i, &s);
if(s->V[3] && EdgesInVolume) { // tetrahedron if(s->V[3] && !THES) { // tetrahedron
if(!s->VSUP) if(!s->VSUP)
s->VSUP = (Vertex **) Malloc(6 * sizeof(Vertex *)); s->VSUP = (Vertex **) Malloc(6 * sizeof(Vertex *));
N = 6; N = 6;
...@@ -201,9 +211,6 @@ void PutMiddlePoint(void *a, void *b) ...@@ -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) void ResetDegre2_Vertex(void *a, void *b)
{ {
Vertex *v = *(Vertex**)a; Vertex *v = *(Vertex**)a;
...@@ -242,9 +249,9 @@ void ResetDegre2_Volume(void *a, void *b) ...@@ -242,9 +249,9 @@ void ResetDegre2_Volume(void *a, void *b)
void Degre1() void Degre1()
{ {
// (re-)initialize the global tree of edges // (re-)initialize the global tree of edges
if(TreeEdges) if(edges)
Tree_Delete(TreeEdges); delete edges;
TreeEdges = Tree_Create(sizeof(Edge), compareedge); edges = new EdgesContainer();
// reset VSUP in each element // reset VSUP in each element
Tree_Action(THEM->Curves, ResetDegre2_Curve); Tree_Action(THEM->Curves, ResetDegre2_Curve);
...@@ -267,22 +274,20 @@ void Degre2_Curve(void *a, void *b) ...@@ -267,22 +274,20 @@ void Degre2_Curve(void *a, void *b)
{ {
Curve *c = *(Curve**)a; Curve *c = *(Curve**)a;
if(c->Dirty) return; if(c->Dirty) return;
edges->AddTree(c->Simplexes, false);
THEC = c; THEC = c;
THES = NULL; THES = NULL;
EdgesInVolume = 0; Tree_Action(edges->AllEdges, PutMiddlePoint);
crEdges(c->Simplexes, TreeEdges);
Tree_Action(TreeEdges, PutMiddlePoint);
} }
void Degre2_Surface(void *a, void *b) void Degre2_Surface(void *a, void *b)
{ {
Surface *s = *(Surface**)a; Surface *s = *(Surface**)a;
if(s->Dirty) return; if(s->Dirty) return;
edges->AddTree(s->Simplexes, false);
THEC = NULL; THEC = NULL;
THES = s; THES = s;
EdgesInVolume = 0; Tree_Action(edges->AllEdges, PutMiddlePoint);
crEdges(s->Simplexes, TreeEdges);
Tree_Action(TreeEdges, PutMiddlePoint);
} }
void Degre2_Volume(void *a, void *b) void Degre2_Volume(void *a, void *b)
...@@ -297,36 +302,14 @@ void Degre2_Volume(void *a, void *b) ...@@ -297,36 +302,14 @@ void Degre2_Volume(void *a, void *b)
return; return;
} }
edges->AddTree(v->Simplexes, true);
THEC = NULL; THEC = NULL;
THES = NULL; THES = NULL;
EdgesInVolume = 1; Tree_Action(edges->AllEdges, PutMiddlePoint);
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;
} }
/* new interface
EdgesContainer *edges = NULL;
void Degre2(int dim) void Degre2(int dim)
{ {
if(edges)
delete edges;
edges = new EdgesContainer();
Degre1(); Degre1();
if(dim >= 1) if(dim >= 1)
Tree_Action(THEM->Curves, Degre2_Curve); Tree_Action(THEM->Curves, Degre2_Curve);
...@@ -335,4 +318,3 @@ void Degre2(int dim) ...@@ -335,4 +318,3 @@ void Degre2(int dim)
if(dim >= 3) if(dim >= 3)
Tree_Action(THEM->Volumes, Degre2_Volume); Tree_Action(THEM->Volumes, Degre2_Volume);
} }
*/
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment