On Thu, Sep 15, 2016 at 3:23 AM, Christophe Geuzaine <[email protected]> wrote:
> > > On 14 Sep 2016, at 20:44, Jim Monte <[email protected]> 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 > of your script. > > > • 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 > > [email protected] > > 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 made by the extrusion? 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 [email protected] http://onelab.info/mailman/listinfo/gmsh
