From 2696e0b80670764648b756548cfacb98b5eb0e87 Mon Sep 17 00:00:00 2001 From: Christophe Geuzaine <cgeuzaine@ulg.ac.be> Date: Fri, 2 Jul 2004 04:56:30 +0000 Subject: [PATCH] Removed the old test on ZonLayer: we actually WANT to use the automatic volume if we set the layer number to 0. This is really pretty nice: we can now get either automatic or manual numebring in all the extrusion commands. --- Mesh/3D_Extrude.cpp | 105 +++++++++++++++++++++----------------------- tutorial/t2.geo | 2 +- tutorial/t3.geo | 12 +++-- 3 files changed, 58 insertions(+), 61 deletions(-) diff --git a/Mesh/3D_Extrude.cpp b/Mesh/3D_Extrude.cpp index f0372fea40..df064be55b 100644 --- a/Mesh/3D_Extrude.cpp +++ b/Mesh/3D_Extrude.cpp @@ -1,4 +1,4 @@ -// $Id: 3D_Extrude.cpp,v 1.83 2004-07-02 02:40:43 geuzaine Exp $ +// $Id: 3D_Extrude.cpp,v 1.84 2004-07-02 04:56:30 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -378,6 +378,7 @@ void Create_HexPri(int iEnt, Vertex * v[8]) v[0], v[1], v[2], v[3], v[4], v[5], v[6], v[7]); return; } + printf("aaa %d %d\n", iEnt, THEV->Num); newp->iEnt = (iEnt && ep->useZonLayer()) ? iEnt : THEV->Num; Tree_Add(THEV->Prisms, &newp); } @@ -468,64 +469,59 @@ void Extrude_Simplex_Phase3(void *data, void *dum) k = 0; for(i = 0; i < ep->mesh.NbLayer; i++) { for(j = 0; j < ep->mesh.NbElmLayer[i]; j++) { - List_Read(L0, k, &v[0]); List_Read(L1, k, &v[1]); List_Read(L2, k, &v[2]); List_Read(L0, k + 1, &v[3]); List_Read(L1, k + 1, &v[4]); List_Read(L2, k + 1, &v[5]); - k++; - if(ep->mesh.ZonLayer[i]) { - - if(ep->mesh.Recombine) { - Create_PriPyrTet(ep->mesh.ZonLayer[i], v); - } - else { - if(are_exist(v[3], v[1], Tree_Ares) && - are_exist(v[4], v[2], Tree_Ares) && - are_exist(v[3], v[2], Tree_Ares)) { - Create_Sim(ep->mesh.ZonLayer[i], v[0], v[1], v[2], v[3]); - Create_Sim(ep->mesh.ZonLayer[i], v[3], v[4], v[5], v[2]); - Create_Sim(ep->mesh.ZonLayer[i], v[1], v[3], v[4], v[2]); - } - else if(are_exist(v[3], v[1], Tree_Ares) && - are_exist(v[1], v[5], Tree_Ares) && - are_exist(v[3], v[2], Tree_Ares)) { - Create_Sim(ep->mesh.ZonLayer[i], v[0], v[1], v[2], v[3]); - Create_Sim(ep->mesh.ZonLayer[i], v[3], v[4], v[5], v[1]); - Create_Sim(ep->mesh.ZonLayer[i], v[3], v[1], v[5], v[2]); - } - else if(are_exist(v[3], v[1], Tree_Ares) && - are_exist(v[1], v[5], Tree_Ares) && - are_exist(v[5], v[0], Tree_Ares)) { - Create_Sim(ep->mesh.ZonLayer[i], v[0], v[1], v[2], v[5]); - Create_Sim(ep->mesh.ZonLayer[i], v[3], v[4], v[5], v[1]); - Create_Sim(ep->mesh.ZonLayer[i], v[1], v[3], v[5], v[0]); - } - else if(are_exist(v[4], v[0], Tree_Ares) && - are_exist(v[4], v[2], Tree_Ares) && - are_exist(v[3], v[2], Tree_Ares)) { - Create_Sim(ep->mesh.ZonLayer[i], v[0], v[1], v[2], v[4]); - Create_Sim(ep->mesh.ZonLayer[i], v[3], v[4], v[5], v[2]); - Create_Sim(ep->mesh.ZonLayer[i], v[0], v[3], v[4], v[2]); - } - else if(are_exist(v[4], v[0], Tree_Ares) && - are_exist(v[4], v[2], Tree_Ares) && - are_exist(v[5], v[0], Tree_Ares)) { - Create_Sim(ep->mesh.ZonLayer[i], v[0], v[1], v[2], v[4]); - Create_Sim(ep->mesh.ZonLayer[i], v[3], v[4], v[5], v[0]); - Create_Sim(ep->mesh.ZonLayer[i], v[0], v[2], v[4], v[5]); - } - else if(are_exist(v[4], v[0], Tree_Ares) && - are_exist(v[1], v[5], Tree_Ares) && - are_exist(v[5], v[0], Tree_Ares)) { - Create_Sim(ep->mesh.ZonLayer[i], v[0], v[1], v[2], v[5]); - Create_Sim(ep->mesh.ZonLayer[i], v[3], v[4], v[5], v[0]); - Create_Sim(ep->mesh.ZonLayer[i], v[0], v[1], v[4], v[5]); - } - } + if(ep->mesh.Recombine) { + Create_PriPyrTet(ep->mesh.ZonLayer[i], v); + } + else { + if(are_exist(v[3], v[1], Tree_Ares) && + are_exist(v[4], v[2], Tree_Ares) && + are_exist(v[3], v[2], Tree_Ares)) { + Create_Sim(ep->mesh.ZonLayer[i], v[0], v[1], v[2], v[3]); + Create_Sim(ep->mesh.ZonLayer[i], v[3], v[4], v[5], v[2]); + Create_Sim(ep->mesh.ZonLayer[i], v[1], v[3], v[4], v[2]); + } + else if(are_exist(v[3], v[1], Tree_Ares) && + are_exist(v[1], v[5], Tree_Ares) && + are_exist(v[3], v[2], Tree_Ares)) { + Create_Sim(ep->mesh.ZonLayer[i], v[0], v[1], v[2], v[3]); + Create_Sim(ep->mesh.ZonLayer[i], v[3], v[4], v[5], v[1]); + Create_Sim(ep->mesh.ZonLayer[i], v[3], v[1], v[5], v[2]); + } + else if(are_exist(v[3], v[1], Tree_Ares) && + are_exist(v[1], v[5], Tree_Ares) && + are_exist(v[5], v[0], Tree_Ares)) { + Create_Sim(ep->mesh.ZonLayer[i], v[0], v[1], v[2], v[5]); + Create_Sim(ep->mesh.ZonLayer[i], v[3], v[4], v[5], v[1]); + Create_Sim(ep->mesh.ZonLayer[i], v[1], v[3], v[5], v[0]); + } + else if(are_exist(v[4], v[0], Tree_Ares) && + are_exist(v[4], v[2], Tree_Ares) && + are_exist(v[3], v[2], Tree_Ares)) { + Create_Sim(ep->mesh.ZonLayer[i], v[0], v[1], v[2], v[4]); + Create_Sim(ep->mesh.ZonLayer[i], v[3], v[4], v[5], v[2]); + Create_Sim(ep->mesh.ZonLayer[i], v[0], v[3], v[4], v[2]); + } + else if(are_exist(v[4], v[0], Tree_Ares) && + are_exist(v[4], v[2], Tree_Ares) && + are_exist(v[5], v[0], Tree_Ares)) { + Create_Sim(ep->mesh.ZonLayer[i], v[0], v[1], v[2], v[4]); + Create_Sim(ep->mesh.ZonLayer[i], v[3], v[4], v[5], v[0]); + Create_Sim(ep->mesh.ZonLayer[i], v[0], v[2], v[4], v[5]); + } + else if(are_exist(v[4], v[0], Tree_Ares) && + are_exist(v[1], v[5], Tree_Ares) && + are_exist(v[5], v[0], Tree_Ares)) { + Create_Sim(ep->mesh.ZonLayer[i], v[0], v[1], v[2], v[5]); + Create_Sim(ep->mesh.ZonLayer[i], v[3], v[4], v[5], v[0]); + Create_Sim(ep->mesh.ZonLayer[i], v[0], v[1], v[4], v[5]); + } } } } @@ -557,15 +553,12 @@ void Extrude_Quadrangle_Phase3(void *data, void *dum) List_Read(L1, k, &v[1]); List_Read(L2, k, &v[2]); List_Read(L3, k, &v[3]); - List_Read(L0, k + 1, &v[4]); List_Read(L1, k + 1, &v[5]); List_Read(L2, k + 1, &v[6]); List_Read(L3, k + 1, &v[7]); - k++; - if(ep->mesh.ZonLayer[i]) - Create_HexPri(ep->mesh.ZonLayer[i], v); + Create_HexPri(ep->mesh.ZonLayer[i], v); } } } diff --git a/tutorial/t2.geo b/tutorial/t2.geo index 3ec4488e81..a3dbd3b90d 100644 --- a/tutorial/t2.geo +++ b/tutorial/t2.geo @@ -29,7 +29,7 @@ Translate {-0.05, 0, 0} { Point{3}; } tmp[] = Translate {0, 0.1, 0} { Duplicata{ Point{3}; } } ; -// In this case, we assign the result of the Translate command to a +// In this case, we assigned the result of the Translate command to a // list, so that we can retrieve the number of the newly created point // and use it to create new lines and a new surface: diff --git a/tutorial/t3.geo b/tutorial/t3.geo index eb27f45ac2..6dc9881339 100644 --- a/tutorial/t3.geo +++ b/tutorial/t3.geo @@ -36,14 +36,18 @@ Extrude Surface { 122, {0,1,0} , {-0.1,0,0.1} , -Pi/2 } { // Note that a translation ({-2*h,0,0}) and a rotation ({1,0,0}, // {0,0.15,0.25}, Pi/2) can also be combined: -Extrude Surface {news-1, {-2*h,0,0}, {1,0,0} , {0,0.15,0.25} , Pi/2}{ - Layers {10,9004,1}; Recombine; -}; +aa[] = Extrude Surface {news-1, {-2*h,0,0}, {1,0,0} , {0,0.15,0.25} , Pi/2}{ + Layers {10,0,1}; Recombine; +}; ; + +// In this last extrusion command, we set the volume number to 0, +// which means that the elements will simply belong the automatically +// created volume (whose number we get from the aa[] list). // We finally define a new physical volume to save all the tetrahedra // with a common region number (101): -Physical Volume(101) = {9000:9004}; +Physical Volume(101) = {9000:9004, aa[1]}; // Let us now change some options... Since all interactive options are // accessible in Gmsh's scripting language, we can for example define -- GitLab