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
Branches
Tags
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
//
......@@ -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);
......
// $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;
......
......@@ -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();
......
// $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);
}
*/
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment