diff --git a/DataStr/Tree.cpp b/DataStr/Tree.cpp index 9a03b1738cd27065f3b2f2cac714a385f460d2ab..e237ba3dcd69b3cd7842c471ab357370895fc158 100644 --- a/DataStr/Tree.cpp +++ b/DataStr/Tree.cpp @@ -1,4 +1,4 @@ -// $Id: Tree.cpp,v 1.13 2003-03-01 22:36:37 geuzaine Exp $ +// $Id: Tree.cpp,v 1.14 2003-03-16 21:23:17 geuzaine Exp $ // // Copyright (C) 1997 - 2003 C. Geuzaine, J.-F. Remacle // @@ -78,10 +78,15 @@ int Tree_Nbr(Tree_T * tree) return (avl_count(tree->root)); } -void Tree_Insert(Tree_T * tree, void *data) +int Tree_Insert(Tree_T * tree, void *data) { - if(Tree_Search(tree, data) == 0) + if(Tree_Search(tree, data) == 0){ Tree_Add(tree, data); + return 1; + } + else{ + return 0; + } } int Tree_Replace(Tree_T * tree, void *data) @@ -100,6 +105,7 @@ int Tree_Replace(Tree_T * tree, void *data) } else { memcpy(ptr, data, tree->size); + Msg(INFO, "memcpy in tree_repl"); return (1); } } diff --git a/DataStr/Tree.h b/DataStr/Tree.h index 575f89e367bd832b94ed8922f2ba719530a77e5e..f00f184221de50462cd532414e74a6225ec4b3e1 100644 --- a/DataStr/Tree.h +++ b/DataStr/Tree.h @@ -32,7 +32,7 @@ void Tree_Delete(Tree_T *Tree); void Tree_Add(Tree_T *tree, void *data); void *Tree_AddP(Tree_T *tree, void *data); int Tree_Nbr(Tree_T *Tree); -void Tree_Insert(Tree_T *Tree, void *data); +int Tree_Insert(Tree_T *Tree, void *data); int Tree_Replace(Tree_T *Tree, void *data); int Tree_Search(Tree_T *Tree, void *data); int Tree_Query(Tree_T *Tree, void *data); diff --git a/Mesh/1D_Mesh.cpp b/Mesh/1D_Mesh.cpp index 2b0e4015a2d08830660f0cf414e392ffcf13fc82..f618704c94688241c210b815b894b63465eb2f40 100644 --- a/Mesh/1D_Mesh.cpp +++ b/Mesh/1D_Mesh.cpp @@ -1,4 +1,4 @@ -// $Id: 1D_Mesh.cpp,v 1.30 2003-03-01 22:36:40 geuzaine Exp $ +// $Id: 1D_Mesh.cpp,v 1.31 2003-03-16 21:23:17 geuzaine Exp $ // // Copyright (C) 1997 - 2003 C. Geuzaine, J.-F. Remacle // @@ -184,7 +184,6 @@ void Maillage_Curve(void *data, void *dummy) v = &c->beg; if((vexist = (Vertex **) Tree_PQuery(THEM->Vertices, v))) { (*vexist)->u = c->ubeg; - Tree_Insert(THEM->Vertices, vexist); if((*vexist)->ListCurves) List_Add((*vexist)->ListCurves, &c); List_Add(c->Vertices, vexist); @@ -194,7 +193,7 @@ void Maillage_Curve(void *data, void *dummy) (*v)->Pos.Z, (*v)->lc, c->ubeg); pV->ListCurves = List_Create(1, 1, sizeof(Curve *)); List_Add(pV->ListCurves, &c); - Tree_Insert(THEM->Vertices, &pV); + Tree_Add(THEM->Vertices, &pV); List_Add(c->Vertices, &pV); } @@ -215,7 +214,7 @@ void Maillage_Curve(void *data, void *dummy) pV->w = V.w; pV->ListCurves = List_Create(1, 1, sizeof(Curve *)); List_Add(pV->ListCurves, &c); - Tree_Insert(THEM->Vertices, &pV); + Tree_Add(THEM->Vertices, &pV); List_Add(c->Vertices, &pV); NUMP++; } @@ -229,7 +228,6 @@ void Maillage_Curve(void *data, void *dummy) v = &c->end; if((vexist = (Vertex **) Tree_PQuery(THEM->Vertices, v))) { (*vexist)->u = c->uend; - Tree_Insert(THEM->Vertices, vexist); if((*vexist)->ListCurves) List_Add((*vexist)->ListCurves, &c); List_Add(c->Vertices, vexist); @@ -239,7 +237,7 @@ void Maillage_Curve(void *data, void *dummy) (*v)->Pos.Z, (*v)->lc, c->uend); pV->ListCurves = List_Create(1, 1, sizeof(Curve *)); List_Add(pV->ListCurves, &c); - Tree_Insert(THEM->Vertices, &pV); + Tree_Add(THEM->Vertices, &pV); List_Add(c->Vertices, &pV); } } diff --git a/Mesh/2D_SMesh.cpp b/Mesh/2D_SMesh.cpp index f480f1258b07efa14068ff96330d85f9ca86c16c..1c172b3c740904a4678b27af4a04b683e206686b 100644 --- a/Mesh/2D_SMesh.cpp +++ b/Mesh/2D_SMesh.cpp @@ -1,4 +1,4 @@ -// $Id: 2D_SMesh.cpp,v 1.13 2003-03-01 22:36:41 geuzaine Exp $ +// $Id: 2D_SMesh.cpp,v 1.14 2003-03-16 21:23:17 geuzaine Exp $ // // Copyright (C) 1997 - 2003 C. Geuzaine, J.-F. Remacle // @@ -230,7 +230,7 @@ int MeshTransfiniteSurface(Surface * sur) if(nb == 4) { for(i = 0; i < N1; i++) { for(j = 0; j < N2; j++) { - Tree_Replace(sur->Vertices, &list[i + N1 * j]); + Tree_Insert(sur->Vertices, &list[i + N1 * j]); } } for(i = 0; i < N1 - 1; i++) { @@ -269,10 +269,10 @@ int MeshTransfiniteSurface(Surface * sur) } } else if(nb == 3) { - Tree_Replace(sur->Vertices, &list[0]); + Tree_Insert(sur->Vertices, &list[0]); for(i = 1; i < N1; i++) { for(j = 0; j < N2; j++) { - Tree_Replace(sur->Vertices, &list[i + N1 * j]); + Tree_Insert(sur->Vertices, &list[i + N1 * j]); } } for(j = 0; j < N2 - 1; j++) { diff --git a/Mesh/3D_Extrude.cpp b/Mesh/3D_Extrude.cpp index 763e2e4f4004a91df4a7bb4237361c0dd7bc37b3..a4fa6b81872449eb6e34cf0a00bebfe024162510 100644 --- a/Mesh/3D_Extrude.cpp +++ b/Mesh/3D_Extrude.cpp @@ -1,4 +1,4 @@ -// $Id: 3D_Extrude.cpp,v 1.62 2003-03-11 06:53:36 geuzaine Exp $ +// $Id: 3D_Extrude.cpp,v 1.63 2003-03-16 21:23:17 geuzaine Exp $ // // Copyright (C) 1997 - 2003 C. Geuzaine, J.-F. Remacle // @@ -176,14 +176,14 @@ static int compnxn(const void *a, const void *b) return 0; } -void ReplaceInVertexBound(void *a, void *b) +void InsertInVertexBound(void *a, void *b) { - Tree_Replace(Vertex_Bound, a); + Tree_Insert(Vertex_Bound, a); } -void ReplaceInPointBound(void *a, void *b) +void InsertInPointBound(void *a, void *b) { - Tree_Replace(Point_Bound, a); + Tree_Insert(Point_Bound, a); } void InitExtrude() @@ -201,8 +201,8 @@ void InitExtrude() Tree_Delete(Vertex_Bound); Vertex_Bound = Tree_Create(sizeof(Vertex *), comparePosition); - Tree_Action(THEM->Points, ReplaceInPointBound); - Tree_Action(THEM->Vertices, ReplaceInVertexBound); + Tree_Action(THEM->Points, InsertInPointBound); + Tree_Action(THEM->Vertices, InsertInVertexBound); } void ExitExtrude() @@ -628,7 +628,7 @@ void Extrude_Vertex(void *data, void *dum) newv->Num = (*vexist)->Num; } List_Add(NXL.List, &newv); - Tree_Insert(THEM->Vertices, &newv); + Tree_Add(THEM->Vertices, &newv); Tree_Insert(Vertex_Bound, &newv); } } @@ -765,7 +765,7 @@ void copy_mesh(Curve * from, Curve * to, int direction) } else { newv = Create_Vertex(v->Num, v->Pos.X, v->Pos.Y, v->Pos.Z, v->lc, to->ubeg); - Tree_Insert(THEM->Vertices, &newv); + Tree_Add(THEM->Vertices, &newv); newv->ListCurves = List_Create(1, 1, sizeof(Curve *)); List_Add(newv->ListCurves, &to); List_Add(to->Vertices, &newv); @@ -796,7 +796,7 @@ void copy_mesh(Curve * from, Curve * to, int direction) // pointing to the same memory location newv->Num = (*vexist)->Num; } - Tree_Insert(THEM->Vertices, &newv); + Tree_Add(THEM->Vertices, &newv); Tree_Insert(Vertex_Bound, &newv); } if(!newv->ListCurves) @@ -814,7 +814,7 @@ void copy_mesh(Curve * from, Curve * to, int direction) } else { newv = Create_Vertex(v->Num, v->Pos.X, v->Pos.Y, v->Pos.Z, v->lc, to->uend); - Tree_Insert(THEM->Vertices, &newv); + Tree_Add(THEM->Vertices, &newv); newv->ListCurves = List_Create(1, 1, sizeof(Curve *)); List_Add(newv->ListCurves, &to); List_Add(to->Vertices, &newv); @@ -853,7 +853,7 @@ int Extrude_Mesh(Curve * c) newv = Create_Vertex(v->Num, v->Pos.X, v->Pos.Y, v->Pos.Z, v->lc, 0.0); newv->ListCurves = List_Create(1, 1, sizeof(Curve *)); List_Add(newv->ListCurves, &c); - Tree_Insert(THEM->Vertices, &newv); + Tree_Add(THEM->Vertices, &newv); List_Add(c->Vertices, &newv); } @@ -878,7 +878,7 @@ int Extrude_Mesh(Curve * c) newv = Create_Vertex(v->Num, v->Pos.X, v->Pos.Y, v->Pos.Z, v->lc, 0.0); newv->ListCurves = List_Create(1, 1, sizeof(Curve *)); List_Add(newv->ListCurves, &c); - Tree_Insert(THEM->Vertices, &newv); + Tree_Add(THEM->Vertices, &newv); List_Add(c->Vertices, &newv); } return true; @@ -926,7 +926,7 @@ void copy_mesh(Surface * from, Surface * to) // pointing to the same memory location newv[j]->Num = (*vexist)->Num; } - Tree_Insert(THEM->Vertices, &newv[j]); + Tree_Add(THEM->Vertices, &newv[j]); Tree_Insert(Vertex_Bound, &newv[j]); } } @@ -952,7 +952,7 @@ void AddVertsInSurf(void *a, void *b) Simplex *s = *(Simplex **) a; for(int i = 0; i < 4; i++) if(s->V[i]) - Tree_Replace(THES->Vertices, &s->V[i]); + Tree_Insert(THES->Vertices, &s->V[i]); } int Extrude_Mesh(Surface * s) diff --git a/Mesh/3D_SMesh.cpp b/Mesh/3D_SMesh.cpp index f2ba2b2dc0b697e7f9b5bed9c7de454b60d8beb5..42e6bdb43c84a3d074c5b0e8c32e794501535720 100644 --- a/Mesh/3D_SMesh.cpp +++ b/Mesh/3D_SMesh.cpp @@ -1,4 +1,4 @@ -// $Id: 3D_SMesh.cpp,v 1.17 2003-03-02 16:10:28 geuzaine Exp $ +// $Id: 3D_SMesh.cpp,v 1.18 2003-03-16 21:23:18 geuzaine Exp $ // // Copyright (C) 1997 - 2003 C. Geuzaine, J.-F. Remacle // @@ -411,8 +411,8 @@ int MeshTransfiniteVolume(Volume * vol) for(i = 0; i < N1; i++) { for(j = 0; j < N2; j++) { for(k = 0; k < N3; k++) { - Tree_Replace(THEM->Vertices, &list[i + N1 * j + N1 * N2 * k]); - Tree_Replace(vol->Vertices, &list[i + N1 * j + N1 * N2 * k]); + Tree_Insert(THEM->Vertices, &list[i + N1 * j + N1 * N2 * k]); + Tree_Insert(vol->Vertices, &list[i + N1 * j + N1 * N2 * k]); } } } @@ -425,7 +425,7 @@ int MeshTransfiniteVolume(Volume * vol) G[3]->Recombine && G[4]->Recombine && G[5]->Recombine) { hexa = CREATE_HEX; hexa->iEnt = vol->Num; - Tree_Replace(vol->Hexahedra, &hexa); + Tree_Add(vol->Hexahedra, &hexa); nbhex++; } @@ -438,7 +438,7 @@ int MeshTransfiniteVolume(Volume * vol) list[(i + 1) + N1 * (j + 1) + N1 * N2 * (k)], list[(i) + N1 * (j + 1) + N1 * N2 * (k + 1)]); prism->iEnt = vol->Num; - Tree_Replace(vol->Prisms, &prism); + Tree_Add(vol->Prisms, &prism); prism = Create_Prism(list[(i + 1) + N1 * (j) + N1 * N2 * (k + 1)], list[(i) + N1 * (j) + N1 * N2 * (k + 1)], @@ -447,7 +447,7 @@ int MeshTransfiniteVolume(Volume * vol) list[(i) + N1 * (j + 1) + N1 * N2 * (k + 1)], list[(i + 1) + N1 * (j + 1) + N1 * N2 * (k)]); prism->iEnt = vol->Num; - Tree_Replace(vol->Prisms, &prism); + Tree_Add(vol->Prisms, &prism); nbpri += 2; } @@ -460,7 +460,7 @@ int MeshTransfiniteVolume(Volume * vol) list[(i) + N1 * (j + 1) + N1 * N2 * (k)], list[(i) + N1 * (j) + N1 * N2 * (k + 1)]); prism->iEnt = vol->Num; - Tree_Replace(vol->Prisms, &prism); + Tree_Add(vol->Prisms, &prism); prism = Create_Prism(list[(i + 1) + N1 * (j + 1) + N1 * N2 * (k + 1)], @@ -470,7 +470,7 @@ int MeshTransfiniteVolume(Volume * vol) list[(i) + N1 * (j) + N1 * N2 * (k + 1)], list[(i) + N1 * (j + 1) + N1 * N2 * (k)]); prism->iEnt = vol->Num; - Tree_Replace(vol->Prisms, &prism); + Tree_Add(vol->Prisms, &prism); nbpri += 2; } @@ -478,10 +478,10 @@ int MeshTransfiniteVolume(Volume * vol) G[3]->Recombine && !G[4]->Recombine && !G[5]->Recombine) { prism = CREATE_PRISM_1; prism->iEnt = vol->Num; - Tree_Replace(vol->Prisms, &prism); + Tree_Add(vol->Prisms, &prism); prism = CREATE_PRISM_2; prism->iEnt = vol->Num; - Tree_Replace(vol->Prisms, &prism); + Tree_Add(vol->Prisms, &prism); nbpri += 2; } @@ -489,22 +489,22 @@ int MeshTransfiniteVolume(Volume * vol) !G[3]->Recombine && !G[4]->Recombine && !G[5]->Recombine) { simp = CREATE_SIM_1; simp->iEnt = vol->Num; - Tree_Replace(vol->Simplexes, &simp); + Tree_Add(vol->Simplexes, &simp); simp = CREATE_SIM_2; simp->iEnt = vol->Num; - Tree_Replace(vol->Simplexes, &simp); + Tree_Add(vol->Simplexes, &simp); simp = CREATE_SIM_3; simp->iEnt = vol->Num; - Tree_Replace(vol->Simplexes, &simp); + Tree_Add(vol->Simplexes, &simp); simp = CREATE_SIM_4; simp->iEnt = vol->Num; - Tree_Replace(vol->Simplexes, &simp); + Tree_Add(vol->Simplexes, &simp); simp = CREATE_SIM_5; simp->iEnt = vol->Num; - Tree_Replace(vol->Simplexes, &simp); + Tree_Add(vol->Simplexes, &simp); simp = CREATE_SIM_6; simp->iEnt = vol->Num; - Tree_Replace(vol->Simplexes, &simp); + Tree_Add(vol->Simplexes, &simp); nbtet += 6; } @@ -531,7 +531,7 @@ int MeshTransfiniteVolume(Volume * vol) list[1 + N1 * (j) + N1 * N2 * (k + 1)], list[1 + N1 * (j + 1) + N1 * N2 * (k + 1)]); prism->iEnt = vol->Num; - Tree_Replace(vol->Prisms, &prism); + Tree_Add(vol->Prisms, &prism); nbpri++; } @@ -542,21 +542,21 @@ int MeshTransfiniteVolume(Volume * vol) list[1 + N1 * (j + 1) + N1 * N2 * (k)], list[+N1 * (j) + N1 * N2 * (k + 1)]); simp->iEnt = vol->Num; - Tree_Replace(vol->Simplexes, &simp); + Tree_Add(vol->Simplexes, &simp); simp = Create_Simplex(list[1 + N1 * (j) + N1 * N2 * (k)], list[1 + N1 * (j + 1) + N1 * N2 * (k)], list[+N1 * (j) + N1 * N2 * (k + 1)], list[1 + N1 * (j) + N1 * N2 * (k + 1)]); simp->iEnt = vol->Num; - Tree_Replace(vol->Simplexes, &simp); + Tree_Add(vol->Simplexes, &simp); simp = Create_Simplex(list[+N1 * (j) + N1 * N2 * (k + 1)], list[1 + N1 * (j + 1) + N1 * N2 * (k + 1)], list[1 + N1 * (j) + N1 * N2 * (k + 1)], list[1 + N1 * (j + 1) + N1 * N2 * (k)]); simp->iEnt = vol->Num; - Tree_Replace(vol->Simplexes, &simp); + Tree_Add(vol->Simplexes, &simp); nbtet += 2; } @@ -574,7 +574,7 @@ int MeshTransfiniteVolume(Volume * vol) G[4]->Recombine && G[5]->Recombine) { hexa = CREATE_HEX; hexa->iEnt = vol->Num; - Tree_Replace(vol->Hexahedra, &hexa); + Tree_Add(vol->Hexahedra, &hexa); nbhex++; } @@ -582,10 +582,10 @@ int MeshTransfiniteVolume(Volume * vol) !G[4]->Recombine && !G[5]->Recombine) { prism = CREATE_PRISM_1; prism->iEnt = vol->Num; - Tree_Replace(vol->Prisms, &prism); + Tree_Add(vol->Prisms, &prism); prism = CREATE_PRISM_2; prism->iEnt = vol->Num; - Tree_Replace(vol->Prisms, &prism); + Tree_Add(vol->Prisms, &prism); nbpri += 2; } @@ -593,22 +593,22 @@ int MeshTransfiniteVolume(Volume * vol) !G[4]->Recombine && !G[5]->Recombine) { simp = CREATE_SIM_1; simp->iEnt = vol->Num; - Tree_Replace(vol->Simplexes, &simp); + Tree_Add(vol->Simplexes, &simp); simp = CREATE_SIM_2; simp->iEnt = vol->Num; - Tree_Replace(vol->Simplexes, &simp); + Tree_Add(vol->Simplexes, &simp); simp = CREATE_SIM_3; simp->iEnt = vol->Num; - Tree_Replace(vol->Simplexes, &simp); + Tree_Add(vol->Simplexes, &simp); simp = CREATE_SIM_4; simp->iEnt = vol->Num; - Tree_Replace(vol->Simplexes, &simp); + Tree_Add(vol->Simplexes, &simp); simp = CREATE_SIM_5; simp->iEnt = vol->Num; - Tree_Replace(vol->Simplexes, &simp); + Tree_Add(vol->Simplexes, &simp); simp = CREATE_SIM_6; simp->iEnt = vol->Num; - Tree_Replace(vol->Simplexes, &simp); + Tree_Add(vol->Simplexes, &simp); nbtet += 6; } diff --git a/Mesh/Read_Mesh.cpp b/Mesh/Read_Mesh.cpp index 16c8469ec97abba7528e90cf44087a49f2144678..e9030f24b921c2858adec8051d23bbb50ecbf615 100644 --- a/Mesh/Read_Mesh.cpp +++ b/Mesh/Read_Mesh.cpp @@ -1,4 +1,4 @@ -// $Id: Read_Mesh.cpp,v 1.51 2003-03-10 04:26:32 geuzaine Exp $ +// $Id: Read_Mesh.cpp,v 1.52 2003-03-16 21:23:18 geuzaine Exp $ // // Copyright (C) 1997 - 2003 C. Geuzaine, J.-F. Remacle // @@ -123,7 +123,10 @@ void Read_Mesh_MSH(Mesh * M, FILE * File_GEO) fscanf(File_GEO, "%d %lf %lf %lf %lf %lf", &Num, &x, &y, &z, &lc1, &lc2); vert = Create_Vertex(Num, x, y, z, lc1, lc2); - Tree_Replace(M->Points, &vert); + if(!Tree_Insert(M->Points, &vert)){ + Msg(GERROR, "Point %d already exists\n", vert->Num); + Free_Vertex(&vert, 0); + } } } @@ -139,11 +142,13 @@ void Read_Mesh_MSH(Mesh * M, FILE * File_GEO) for(i_Node = 0; i_Node < Nbr_Nodes; i_Node++) { fscanf(File_GEO, "%d %lf %lf %lf", &Num, &x, &y, &z); vert = Create_Vertex(Num, x, y, z, 1.0, 0.0); - Tree_Replace(M->Vertices, &vert); - if(CTX.mesh.check_duplicates) { + if(!Tree_Insert(M->Vertices, &vert)){ + Msg(GERROR, "Node %d already exists\n", vert->Num); + Free_Vertex(&vert, 0); + } + else if(CTX.mesh.check_duplicates) { if((vertspp = (Vertex **) Tree_PQuery(Duplicates, &vert))) - Msg(GERROR, - "Nodes %d and %d have identical coordinates (%g, %g, %g)", + Msg(GERROR, "Nodes %d and %d have identical coordinates (%g, %g, %g)", Num, (*vertspp)->Num, x, y, z); else Tree_Add(Duplicates, &vert); @@ -244,7 +249,7 @@ void Read_Mesh_MSH(Mesh * M, FILE * File_GEO) vert->Pos.Y /= (double)Nbr_Nodes; vert->Pos.Z /= (double)Nbr_Nodes; if((vertspp = (Vertex **) Tree_PQuery(Duplicates, &vert))) - Msg(GERROR, "Elements %d and %d have identical barycenters", + Msg(WARNING, "Elements %d and %d have identical barycenters", Num, (*vertspp)->Num); else Tree_Add(Duplicates, &vert); @@ -255,72 +260,97 @@ void Read_Mesh_MSH(Mesh * M, FILE * File_GEO) simp = Create_Simplex(vertsp[0], vertsp[1], NULL, NULL); simp->Num = Num; simp->iEnt = Elementary; - Tree_Replace(c->Simplexes, &simp); - //NO!!! Tree_Replace(M->Simplexes, &simp) ; + if(!Tree_Insert(c->Simplexes, &simp)){ + Msg(GERROR, "Line element %d already exists\n", simp->Num); + Free_Simplex(&simp, 0); + } + //NO!!! Tree_Insert(M->Simplexes, &simp) ; break; case TRI1: simp = Create_Simplex(vertsp[0], vertsp[1], vertsp[2], NULL); simp->Num = Num; simp->iEnt = Elementary; - Tree_Replace(s->Simplexes, &simp); - replace = Tree_Replace(M->Simplexes, &simp); - if(!replace) + if(Tree_Insert(s->Simplexes, &simp) && Tree_Insert(M->Simplexes, &simp)){ M->Statistics[7]++; + } + else{ + Msg(GERROR, "Triangle %d already exists\n", simp->Num); + Free_Simplex(&simp, 0); + } break; case QUA1: - simp = - Create_Quadrangle(vertsp[0], vertsp[1], vertsp[2], vertsp[3]); + simp = Create_Quadrangle(vertsp[0], vertsp[1], vertsp[2], vertsp[3]); simp->Num = Num; simp->iEnt = Elementary; - Tree_Replace(s->Simplexes, &simp); - replace = Tree_Replace(M->Simplexes, &simp); - if(!replace) { + if(Tree_Insert(s->Simplexes, &simp) && Tree_Insert(M->Simplexes, &simp)){ M->Statistics[7]++; //since s->Simplexes holds quads, too :-( M->Statistics[8]++; } + else{ + Msg(GERROR, "Quadrangle %d already exists\n", simp->Num); + Free_Simplex(&simp, 0); + } break; case TET1: simp = Create_Simplex(vertsp[0], vertsp[1], vertsp[2], vertsp[3]); simp->Num = Num; simp->iEnt = Elementary; - Tree_Replace(v->Simplexes, &simp); - replace = Tree_Replace(M->Simplexes, &simp); - if(!replace) + if(Tree_Insert(v->Simplexes, &simp) && Tree_Insert(M->Simplexes, &simp)){ M->Statistics[9]++; + } + else{ + Msg(GERROR, "Tetrahedron %d already exists\n", simp->Num); + Free_Simplex(&simp, 0); + } break; case HEX1: hex = Create_Hexahedron(vertsp[0], vertsp[1], vertsp[2], vertsp[3], vertsp[4], vertsp[5], vertsp[6], vertsp[7]); hex->Num = Num; hex->iEnt = Elementary; - replace = Tree_Replace(v->Hexahedra, &hex); - if(!replace) + if(Tree_Insert(v->Hexahedra, &hex)){ M->Statistics[10]++; + } + else{ + Msg(GERROR, "Hexahedron %d already exists\n", hex->Num); + Free_Hexahedron(&hex, 0); + } break; case PRI1: pri = Create_Prism(vertsp[0], vertsp[1], vertsp[2], vertsp[3], vertsp[4], vertsp[5]); pri->Num = Num; pri->iEnt = Elementary; - replace = Tree_Replace(v->Prisms, &pri); - if(!replace) + if(Tree_Insert(v->Prisms, &pri)){ M->Statistics[11]++; + } + else{ + Msg(GERROR, "Prism %d already exists\n", pri->Num); + Free_Prism(&pri, 0); + } break; case PYR1: pyr = Create_Pyramid(vertsp[0], vertsp[1], vertsp[2], vertsp[3], vertsp[4]); pyr->Num = Num; pyr->iEnt = Elementary; - replace = Tree_Replace(v->Pyramids, &pyr); - if(!replace) + if(Tree_Insert(v->Pyramids, &pyr)){ M->Statistics[12]++; + } + else{ + Msg(GERROR, "Pyramid %d already exists\n", pri->Num); + Free_Pyramid(&pyr, 0); + } break; case PNT: // we need to make a new one: vertices in M->Vertices and // M->Points should never point to the same memory location vert = Create_Vertex(vertsp[0]->Num, vertsp[0]->Pos.X, vertsp[0]->Pos.Y, vertsp[0]->Pos.Z, vertsp[0]->lc, vertsp[0]->w); - Tree_Replace(M->Points, &vert); + if(!Tree_Insert(M->Points, &vert)){ + Msg(GERROR, "Point %d already exists\n", vert->Num); + Free_Vertex(&vert, 0); + } break; default: Msg(WARNING, "Unknown type of element in Read_Mesh"); diff --git a/TODO b/TODO index 8b912ae9e357104af927703531d3f1a2c8f5319c..bc7a6224c078899c865e92caeb4de981380a84fd 100644 --- a/TODO +++ b/TODO @@ -1,13 +1,28 @@ -$Id: TODO,v 1.14 2003-03-11 07:16:10 geuzaine Exp $ +$Id: TODO,v 1.15 2003-03-16 21:23:17 geuzaine Exp $ ******************************************************************** -Memory leaks, memory leaks (start with mesh_domain() and the parser) +Memory leaks, memory leaks + +- start with mesh_domain() and the parser + +- check all calls to Tree_Replace: we shouldn't use it with trees of +pointers, since we loose the original pointer when we actually do a +'replace' + +- check all calls to Tree_Insert, and test the return value ******************************************************************** -Include Tetgen (the same way we did it with Triangle--the license is -the same). +Rewrite the geometry module in C++: we should have + +Point.cpp +Curve.cpp +Surface.cpp +Volume.cpp + +It's much shorter than one may think. We could just keep a C interface +like in Vertex.cpp and Simplex.cpp. ******************************************************************** @@ -15,6 +30,11 @@ Rewrite the View interface in C++ ******************************************************************** +Include Tetgen (the same way we did it with Triangle--the license is +the same). + +******************************************************************** + Two-field plots <nicolas.moes@ec-nantes.fr> Imagine I would like to plot a temperature field on a deformed diff --git a/doc/CONTRIBUTORS b/doc/CONTRIBUTORS index 2de82e4820a2b3de1a833900eeebdb4c8a8db888..b05b3c5a83563f888558a47430ad9cb3480dcf67 100644 --- a/doc/CONTRIBUTORS +++ b/doc/CONTRIBUTORS @@ -1,4 +1,4 @@ -$Id: CONTRIBUTORS,v 1.25 2003-03-12 23:41:45 geuzaine Exp $ +$Id: CONTRIBUTORS,v 1.26 2003-03-16 21:23:18 geuzaine Exp $ Gmsh is copyright (c) 1997-2003 by @@ -46,4 +46,5 @@ access to exotic machines for testing Gmsh: Francois Henrotte <fhenrott@@esat.kuleuven.ac.be> Benoit Meys <bmeys@@techspace-aero.be> Nicolas Moes <moes@@tam9.mech.nwu.edu> + Osamu Nakamura <naka@@hasaki.sumitomometals.co.jp> Chad Schmutzer <schmutze@@acm.caltech.edu> \ No newline at end of file