# Re: [Gmsh] Questions related to Extrusions

```> On 15 Sep 2016, at 20:47, Jim Monte <jim.g...@gmail.com> wrote:
>
>
> On Thu, Sep 15, 2016 at 3:23 AM, Christophe Geuzaine <cgeuza...@ulg.ac.be>
> wrote:
>
> > On 14 Sep 2016, at 20:44, Jim Monte <jim.g...@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@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
> ```
```
The extrusion works by recursively extruding entities of lower dimension, so
when you extrude a surface, you actually extrude the curves first; each curve
extrusion creates a surface but also new curves and new points. Some of these
are duplicates, and they are merged. Hence all the "unused" points, lines, etc.

You can retrieve the IDs programmatically: you just refer to the list returned
by the command, by index in the list. Predicting the actual numbers is almost
impossible, as many entities created in the process will be removed as
duplicates.

> 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...
>
>
>
>
> _______________________________________________
> gmsh mailing list
> gmsh@onelab.info
> http://onelab.info/mailman/listinfo/gmsh

--
Prof. Christophe Geuzaine
University of Liege, Electrical Engineering and Computer Science
http://www.montefiore.ulg.ac.be/~geuzaine

Free software: http://gmsh.info | http://getdp.info | http://onelab.info

_______________________________________________
gmsh mailing list
gmsh@onelab.info
http://onelab.info/mailman/listinfo/gmsh
```