# [Gmsh] Questions related to Extrusions

Jim Monte jim.gmsh at gmail.com
Thu Sep 15 20:47:22 CEST 2016

```On Thu, Sep 15, 2016 at 3:23 AM, Christophe Geuzaine <cgeuzaine at ulg.ac.be>
wrote:

>
> > On 14 Sep 2016, at 20:44, Jim Monte <jim.gmsh at gmail.com> wrote:
> >
> > Hi,
> >
> > I would like to know how to find the order of the "side" elements (lines
> or surfaces) that are generated during an extrusion. Thanks for any
> information.
>
> When you extrude a line, the surface is created from a line loop defined
> by the original line, the line extruded from the end point, the (reversed)
> "top" line and (reversed) lines extruded from the starting point.
>
> When you extrude a surface, the surface loop is created with the original
> surface, the "top" surface, then all the surfaces extruded from the sides
> of the original surface (in the order they appear in the surface
> definitions).
>
> Note that these resulting entities can be changed if they are found to
> duplicate existing entities, through the explicit or implicit call to
> "Coherence;".
>
> >
> > Also, while doing some related testing, I saw some results that I could
> not explain from the script below.
> >
> > /*** start ***/
> > Printf("next line ID = %g; next surface ID = %g", newl, news);
> > Point(1) = {0, 0, 0};
> > Point(2) = {0, 1, 0};
> > Line(1) = {1, 2};
> > Printf("next line ID = %g; next surface ID = %g", newl, news);
> >
> > out[] = Extrude {0, 0, 1} {Line{1}; };
> >
> > n = #out[];
> > Printf("Extrude has returned %g elements", n);
> > n -= 1;
> > For i In {0 : n}
> >     Printf("Extrusion value[%g] = %g.", i, out[i]);
> > EndFor
> >
> > Printf("next line ID = %g; next surface ID = %g", newl, news);
> > /*** end ***/
> >
> > The output is
> >
> > 1  next line ID = 1; next surface ID = 1
> > 2  next line ID = 2; next surface ID = 2
> > 3  Extrude has returned 4 elements
> > 4  Extrusion value[0] = 2.
> > 5  Extrusion value[1] = 5.
> > 6  Extrusion value[2] = 4.
> > 7  Extrusion value[3] = -3.
> > 8  next line ID = 6; next surface ID = 6
> >
> > Here are the things that did not seem right:
> >       • The value returned by news in line 2 is too high. No surface was
> created yet, so it should remain as 1.
> >       • The next free surface has a value of 1, so line 5 should give
> the extruded surface a value of 1 instead of 5.
>
> This is for backward compatibility with old Gmsh versions: if you prefer a
> more natural numbering, you can set "Geometry.OldNewReg=0;" at te beginning
>
> >       • I thought the IDs should all be positive, so line 7 seems wrong.
>
> Curves actually exist with both orientations in Gmsh; use "FAbs()" to get
> the ID.
>
> Christophe
>
>
> > I would appreciate some explanations of what Gmsh is doing in these
> instances.
> >
> > Jim Monte
> >
> > _______________________________________________
> > gmsh mailing list
> > gmsh at onelab.info
> > http://onelab.info/mailman/listinfo/gmsh
>
> Thanks for the details on extrusion. But I am still not seeing how to
determine which index will receive the ID for a particular surface. Perhaps
I am trying to do something the hard way. My original interest in this
question is that I want to know where specific surfaces will be put in the
returned array so I can associate a physical surface with specific plane
surfaces that get formed as part of the extrusion. Is there another
approach to do this programatically (without looking at the GUI for
information).

I did more testing with a "brick" shape, made by two extrusions,
line->square->brick. The Geometry.OldNewReg option did help to make the IDs
closer to the expected values, but it is still confusing what is being done
by the program. At a high level, the brick has 8 points, 12 lines, and 6
plane surfaces. But there are

49-1-8 = 40 unused points,
21-1-12 = 8 unused lines (9, 12, 13, 15, 16, 18, 19, 20), and
8-1-6 = 1 unused surface (2)
generated as part of the extrusion. Is there some way to query what will be

Jim Monte

/*** start ***/
Geometry.OldNewReg = 0;
Printf("next point ID = %g; next line ID = %g; next surface ID = %g",
newp, newl, news);
Printf("Defining Point(1), Point(2), and Line(1)");
Point(1) = {0, 0, 0};
Point(2) = {0, 1, 0};
Line(1) = {1, 2};
Printf("next point ID = %g; next line ID = %g; next surface ID = %g",
newp, newl, news);

Printf("Extruding line in z direction");
out[] = Extrude {0, 0, 1} {Line{1}; };
For i In {1 : 4}
xyz[] = Point{i};
Printf("Point %g coordinates = (%g,%g,%g)",i, xyz[0], xyz[1], xyz[2]);
EndFor

n = #out[];
Printf("Extrude (line) has returned %g elements", n);
n -= 1;
For i In {0 : n}
Printf("Extrusion value[%g] = %g.", i, out[i]);
EndFor

Printf("next point ID = %g; next line ID = %g; next surface ID = %g",
newp, newl, news);

Printf("Extruding surface in x direction");
out2[] = Extrude {2, 0, 0} {Surface{out[1]}; };

n = #out2[];
Printf("Extrude (surface) has returned %g elements", n);
n -= 1;
For i In {0 : n}
Printf("Extrusion value[%g] = %g.", i, out2[i]);
EndFor

Printf("next point ID = %g; next line ID = %g; next surface ID = %g",
newp, newl, news);

For i In {1:49}
xyz[] = Point{i};
Printf("Point %g coordinates = (%g,%g,%g)",i, xyz[0], xyz[1], xyz[2]);
EndFor

/*** end ***/

next point ID = 1; next line ID = 1; next surface ID = 1
Defining Point(1), Point(2), and Line(1)
next point ID = 3; next line ID = 2; next surface ID = 1
Extruding line in z direction
Point 1 coordinates = (0,0,0)
Point 2 coordinates = (0,1,0)
Point 3 coordinates = (0,0,1)
Point 4 coordinates = (0,1,1)
Extrude (line) has returned 4 elements
Extrusion value[0] = 2.
Extrusion value[1] = 1.
Extrusion value[2] = 4.
Extrusion value[3] = -3.
next point ID = 9; next line ID = 5; next surface ID = 2
Extruding surface in x direction
Extrude (surface) has returned 6 elements
Extrusion value[0] = 7.
Extrusion value[1] = 1.
Extrusion value[2] = 3.
Extrusion value[3] = 4.
Extrusion value[4] = 5.
Extrusion value[5] = 6.
next point ID = 49; next line ID = 21; next surface ID = 8
Point 1 coordinates = (0,0,0)
Point 2 coordinates = (0,1,0)
Point 3 coordinates = (0,0,1)
Point 4 coordinates = (0,1,1)
Error   : 'D:\data\SBIRs__and__projects\A15-087\Gmsh-Elmer
tutorial\Tutorial_1\extrusion_test.geo', line 43 : Unknown point '5'
Point 5 coordinates = (0,0,0)
Error   : 'D:\data\SBIRs__and__projects\A15-087\Gmsh-Elmer
tutorial\Tutorial_1\extrusion_test.geo', line 43 : Unknown point '6'
Point 6 coordinates = (0,0,0)
Error   : 'D:\data\SBIRs__and__projects\A15-087\Gmsh-Elmer
tutorial\Tutorial_1\extrusion_test.geo', line 43 : Unknown point '7'
Point 7 coordinates = (0,0,0)
Error   : 'D:\data\SBIRs__and__projects\A15-087\Gmsh-Elmer
tutorial\Tutorial_1\extrusion_test.geo', line 43 : Unknown point '8'
Point 8 coordinates = (0,0,0)
Point 9 coordinates = (2,0,0)
Point 10 coordinates = (2,1,0)
Error   : 'D:\data\SBIRs__and__projects\A15-087\Gmsh-Elmer
tutorial\Tutorial_1\extrusion_test.geo', line 43 : Unknown point '11'
Point 11 coordinates = (0,0,0)
Error   : 'D:\data\SBIRs__and__projects\A15-087\Gmsh-Elmer
tutorial\Tutorial_1\extrusion_test.geo', line 43 : Unknown point '12'
Point 12 coordinates = (0,0,0)
Error   : 'D:\data\SBIRs__and__projects\A15-087\Gmsh-Elmer
tutorial\Tutorial_1\extrusion_test.geo', line 43 : Unknown point '13'
Point 13 coordinates = (0,0,0)
Point 14 coordinates = (2,1,1)
Error   : 'D:\data\SBIRs__and__projects\A15-087\Gmsh-Elmer
tutorial\Tutorial_1\extrusion_test.geo', line 43 : Unknown point '15'
Point 15 coordinates = (0,0,0)
Error   : 'D:\data\SBIRs__and__projects\A15-087\Gmsh-Elmer
tutorial\Tutorial_1\extrusion_test.geo', line 43 : Unknown point '16'
Point 16 coordinates = (0,0,0)
Error   : 'D:\data\SBIRs__and__projects\A15-087\Gmsh-Elmer
tutorial\Tutorial_1\extrusion_test.geo', line 43 : Unknown point '17'
Point 17 coordinates = (0,0,0)
Point 18 coordinates = (2,0,1)
Error   : 'D:\data\SBIRs__and__projects\A15-087\Gmsh-Elmer
tutorial\Tutorial_1\extrusion_test.geo', line 43 : Unknown point '19'
Point 19 coordinates = (0,0,0)
Error   : 'D:\data\SBIRs__and__projects\A15-087\Gmsh-Elmer
tutorial\Tutorial_1\extrusion_test.geo', line 43 : Unknown point '20'
Point 20 coordinates = (0,0,0)
Error   : 'D:\data\SBIRs__and__projects\A15-087\Gmsh-Elmer
tutorial\Tutorial_1\extrusion_test.geo', line 43 : Unknown point '21'
Point 21 coordinates = (0,0,0)
Error   : 'D:\data\SBIRs__and__projects\A15-087\Gmsh-Elmer
tutorial\Tutorial_1\extrusion_test.geo', line 43 : Unknown point '22'
Point 22 coordinates = (0,0,0)
Error   : 'D:\data\SBIRs__and__projects\A15-087\Gmsh-Elmer
tutorial\Tutorial_1\extrusion_test.geo', line 43 : Unknown point '23'
Point 23 coordinates = (0,0,0)
Error   : 'D:\data\SBIRs__and__projects\A15-087\Gmsh-Elmer
tutorial\Tutorial_1\extrusion_test.geo', line 43 : Unknown point '24'
Point 24 coordinates = (0,0,0)
Error   : 'D:\data\SBIRs__and__projects\A15-087\Gmsh-Elmer
tutorial\Tutorial_1\extrusion_test.geo', line 43 : Unknown point '25'
Point 25 coordinates = (0,0,0)
Error   : 'D:\data\SBIRs__and__projects\A15-087\Gmsh-Elmer
tutorial\Tutorial_1\extrusion_test.geo', line 43 : Unknown point '26'
Point 26 coordinates = (0,0,0)
Error   : 'D:\data\SBIRs__and__projects\A15-087\Gmsh-Elmer
tutorial\Tutorial_1\extrusion_test.geo', line 43 : Unknown point '27'
Point 27 coordinates = (0,0,0)
Error   : 'D:\data\SBIRs__and__projects\A15-087\Gmsh-Elmer
tutorial\Tutorial_1\extrusion_test.geo', line 43 : Unknown point '28'
Point 28 coordinates = (0,0,0)
Error   : 'D:\data\SBIRs__and__projects\A15-087\Gmsh-Elmer
tutorial\Tutorial_1\extrusion_test.geo', line 43 : Unknown point '29'
Error   : Too many errors: aborting parser...
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://onelab.info/pipermail/gmsh/attachments/20160915/80cb0c59/attachment.html>
```