From aa669af7a4be62feee90b888d0f3496d874b94ad Mon Sep 17 00:00:00 2001 From: Christophe Geuzaine <cgeuzaine@ulg.ac.be> Date: Sun, 18 Jan 2009 13:08:35 +0000 Subject: [PATCH] *** empty log message *** --- benchmarks/extrude/m91acou4a.geo | 244 +++++++++++++++++++++++++++++++ doc/texinfo/gmsh.texi | 2 +- doc/texinfo/opt_plugin.texi | 32 ++-- 3 files changed, 266 insertions(+), 12 deletions(-) create mode 100644 benchmarks/extrude/m91acou4a.geo diff --git a/benchmarks/extrude/m91acou4a.geo b/benchmarks/extrude/m91acou4a.geo new file mode 100644 index 0000000000..2a8ef33ada --- /dev/null +++ b/benchmarks/extrude/m91acou4a.geo @@ -0,0 +1,244 @@ +// Gmsh project created on Tue Aug 5 18:29:53 2008 +r1 = 0.025; // device radius + +h = 0.01; // duct height +dh1 = 3*h/10; // Describe how the duct is split. +dh2 = 2*h/10; +dh3 = 2*h/10; +dh4 = 3*h/10; +mh1 = 3; ph1 = 1; // top quarter duct, vertical mesh count and progression +mh2 = 2; ph2 = 1; // 2nd quarter duct vertical mesh count and progression +mh3 = 2; ph3 = 1; // 3rd quarter duct vertical mesh count and progression +mh4 = 3; ph4 = 1; // 4th / bottom quarter duct vertical mesh count and progression + +mr = 8; // mesh density used throughout most of the mesh. +// 'notlinked' sets the mesh starting from upper surface, moving around the outer +// perimeter. The mesh count is one less than, 'notlinked'. +notlinked = 4; + +f = 40000; // interest freq +c = 344; // celerity +lc = (1/4)*c/f; //characteristic length for all nodes as function of freq. Mesh density +s = 1; // characteristic length scalar for internal regions. + +// Middle surface; extrude from here, up and down.=========================NODES +Point (1) = { 0 , 0 , 0 , lc/s}; // centre + +// Perimeter. +For i In {0:7:1} + Point(i + 11) = {r1*Cos(2 * Pi * i / 8), 0, r1*Sin(2 * Pi * i / 8), lc/s}; +EndFor + +// Corners for inner square +t = 0.9; // bodge to scale inner square to improve element quality. +Point(21) = {t*r1/2, 0, t*0, lc/s}; +Point(22) = {t*r1/2, 0, t*r1/2, lc/s}; +Point(23) = {t*0, 0, t*r1/2, lc/s}; +Point(24) = {-t*r1/2, 0, t*r1/2, lc/s}; +Point(25) = {-t*r1/2, 0, t*0, lc/s}; +Point(26) = {-t*r1/2, 0, -t*r1/2, lc/s}; +Point(27) = {t*0, 0, -t*r1/2, lc/s}; +Point(28) = {t*r1/2, 0, -t*r1/2, lc/s}; + +// Interface region. ======================================================NODES +// Centre +// Point(1001) = {r1, 0, 0, lc/s}; + +// Outer perimeter +// Perimeter nodes. From top, up. +For i In {0:4:1} + Point(1011 + i) = {r1 + h/2*Cos(-Pi/2 + 2 * Pi * i / 8), + h/2 * Sin(-Pi/2 + 2 * Pi * i / 8), 0, lc/s}; +EndFor + +// Inner square parts. Link to extrusions above. +t = 0.9; // bodge to scale inner square to improve element quality. +Point(1021) = {r1 + 0, -h/2 + dh4, 0, lc/s}; +Point(1022) = {r1 + t * h/4, -h/2 + dh4, 0, lc/s}; +Point(1023) = {r1 + t * h/4, 0, 0, lc/s}; +Point(1024) = {r1 + t * h/4, h/2 - dh1, 0, lc/s}; +Point(1025) = {r1 + 0, h/2 - dh1, 0, lc/s}; + +// Circle creation. =====================================================Circles +l = 1; // line numbers start from..... +For i In {0:6:1} + Circle(l) = { 11 + i , 1, 11 + i + 1}; l = l +1; +EndFor +// close the loop, from node 18 to 11, centre node 1. +Circle(l) = {18, 1, 11}; l = l + 1; + +// Interface +l = 11; // line numbers start from. +For i In {0:3:1} + Circle(l) = { 1011 + i , 11, 1011 + i + 1}; l = l +1; +EndFor + +// Square creation. Duct. ==============================================Squares +l = 21; +For i In {0:6:1} + Line(l) = {21 + i, 22 + i}; l = l + 1; +EndFor +Line(l) = {28, 21}; l = l + 1; + +// Interface +l = 41; +For i In {0:3:1} + Line(l) = {1021 + i, 1022 + i}; l = l + 1; +EndFor + +// Lines radiating from square to perimeter. Duct==========================Lines +l=51; +For i In {0:7:1} + Line(l) = {21 + i, 11 + i}; l = l + 1; +EndFor + +// Lines radiating out from centre point. +Line(61) = {1, 21}; +Line(63) = {1, 23}; +Line(65) = {1, 25}; +Line(67) = {1, 27}; + +// Interface + +l=71; +For i In {0:4:1} + Line(l) = {1021 + i, 1011 + i}; l = l + 1; +EndFor + +// Lines radiating out from centre point. +Line(81) = {11, 1021}; +Line(83) = {11, 1023}; +Line(85) = {11, 1025}; + +// Define closed loops and planes for the shapes just created. These were +// selected in GMSH, rather than in the script as the negative values control +// the direction of the path. ============================================Planes +// Duct. +Line Loop(86) = {28,-61,67,27}; +Plane Surface(87) = {86}; +Line Loop(88) = {67,-26,-25,-65}; +Plane Surface(89) = {88}; +Line Loop(90) = {63,23,24,-65}; +Plane Surface(91) = {90}; +Line Loop(92) = {21,22,-63,61}; +Plane Surface(93) = {92}; +Line Loop(94) = {51,-8,-58,28}; +Plane Surface(95) = {94}; +Line Loop(96) = {58,-7,-57,27}; +Plane Surface(97) = {96}; +Line Loop(98) = {57,-6,-56,26}; +Plane Surface(99) = {98}; +Line Loop(100) = {56,-5,-55,25}; +Plane Surface(101) = {100}; +Line Loop(102) = {55,-4,-54,24}; +Plane Surface(103) = {102}; +Line Loop(104) = {54,-3,-53,23}; +Plane Surface(105) = {104}; +Line Loop(106) = {53,-2,-52,22}; +Plane Surface(107) = {106}; +Line Loop(108) = {52,-1,-51,21}; +Plane Surface(109) = {108}; +// Interface +Line Loop(110) = {71,11,-72,-41}; +Plane Surface(111) = {110}; +Line Loop(112) = {12,-73,-42,72}; +Plane Surface(113) = {112}; +Line Loop(114) = {73,13,-74,-43}; +Plane Surface(115) = {114}; +Line Loop(116) = {74,14,-75,-44}; +Plane Surface(117) = {116}; +Line Loop(118) = {81,41,42,-83}; +Plane Surface(119) = {118}; +Line Loop(120) = {85,-44,-43,-83}; +Plane Surface(121) = {120}; +// +// The following code is required to make the mesh ordered ===================== +// +// Set the lines above, as 'transfinite'. Duct (setting most of the mesh): +Transfinite Line{1,2,3,4,5,6,7,8} = mr + 1 Using Progression 1.0; // duct perim +Transfinite Line{21,22,23,24,25,26,27,28} = mr + 1 Using Progression 1.0; // square +Transfinite Line{51,52,53,54,55,56,57,58} = mr + 1 Using Progression 1.0; // radiate +Transfinite Line{61,63,65,67} = mr + 1 Using Progression 1.0; // radiate + +// Interface. Different pattern from duct. +// Moving down, from upper edge next to upper boundary layer in duct. unlinked. + +Transfinite Line{14,44,83,41, 11} = notlinked Using Progression 1.0; +// moving around curve. +Transfinite Line{71, 72, 73, 74, 75} = mh1+1 Using Progression 1.0; +// moving out, from upper central duct. +Transfinite Line{85, 43, 13} = mh2+1 Using Progression 1.0; +// moving out from lower central duct. +Transfinite Line{81, 42, 12} = mh3+1 Using Progression 1.0; + +// Create new, 'transfinite' surfaces. Matching surface numbers above and +// referencing same node numbers. Had to inspect +// these from gmsh. Note, curly brackets, not parentheses. +// {surface} = {nodes} +Transfinite Surface{87:121:2}; + +// Without the following recombine, the elements are tri primative. +// Duct. +Recombine Surface{87:121:2}; + +// End of extra code to get ordered mesh *************************************** +// +// Extrusion. To this point, the mesh is a 2D disc in the duct plane (to be +// extruded vertically to form the duct thickness), with a +// perpendicular disc at it's edge, to be extruded around to form the interface +// region. + +// Extrude {vector} { Surface{n}; Layers{mz} ; Recombine; } +// with surface number(s) n extruded, mesh density mz1. +// Assign result to var[], to allow further work with the new surface, in var[0] +// Entries 0 to 5 are returned for these extruded faces, so steps of 6 to +// get the faces for different volumes appended to the list. +// +// Extrude to form duct thickness: ------------------------- +// upper middle. +num[] = Extrude { 0, dh2, 0} { + Surface { + 87, 89, 91, 93, 95, 97, 99, 101, 103, 105, 107, 109 + }; + Layers{mh2}; Recombine; + }; +// top (boundary layer region) +num[] = Extrude { 0, dh1, 0} { + Surface{num[0], num[6*1], num[6*2], num[6*3], num[6*4], num[6*5], + num[6*6], num[6*7], num[6*8], num[6*9], num[6*10], num[6*11]}; + Layers{mh1}; + Recombine; + }; +//lower middle +num[] = Extrude { 0, -dh3, 0} { + Surface { + 87, 89, 91, 93, 95, 97, 99, 101, 103, 105, 107, 109 + }; + Layers{mh3}; Recombine; + }; +// bottom boundary layer. +num[] = Extrude {0, -dh4,0} { + Surface{ + num[0], num[6*1], num[6*2], num[6*3], num[6*4], num[6*5], + num[6*6], num[6*7], num[6*8], num[6*9], num[6*10], num[6*11] + }; + Layers{mh4}; Recombine; + }; +// The duct is now thick. --------------------------------- + +// Interface. First extrusion segment. +num[] = Extrude {{ 0, 1, 0}, {0, 0, 0}, Pi/4} { + Surface { + 111, 113, 115, 117, 119, 121 + }; + Layers{mr}; Recombine; + }; + +// Repeat, around the rest of the interface. +For i In {0:6:1} + num[] = Extrude {{ 0, 1, 0}, {0, 0, 0}, Pi/4} { + Surface{num[0], num[6*1], num[6*2], num[6*3], num[6*4], num[6*5]}; + Layers{mr}; + Recombine; + }; +EndFor diff --git a/doc/texinfo/gmsh.texi b/doc/texinfo/gmsh.texi index a89e32a447..d5d7e3df47 100644 --- a/doc/texinfo/gmsh.texi +++ b/doc/texinfo/gmsh.texi @@ -2967,7 +2967,7 @@ $Elements $EndElements $PhysicalNames @var{number-of-names} -@var{phyical-number} "@var{physical-name}" +@var{physical-number} "@var{physical-name}" @dots{} $EndPhysicalNames $NodeData diff --git a/doc/texinfo/opt_plugin.texi b/doc/texinfo/opt_plugin.texi index 4a38dc15ba..13b7db5f67 100644 --- a/doc/texinfo/opt_plugin.texi +++ b/doc/texinfo/opt_plugin.texi @@ -427,17 +427,29 @@ Default value: @code{-1} @end table @item Plugin(GSHHS) -Plugin(GSHHS) read differenct kind of contour lines data and write a .geo file. -Valid values for "Format" are : +Plugin(GSHHS) read different kind of contour lines data and write a .geo file on the surface of a sphere (the Earth). +The principal application is to load GSHHS data + (see http://www.soest.hawaii.edu/wessel/gshhs/gshhs.html). +Valid values for "Format" are ): -"gshhs" : open GSHHS file -"loops2" : import 2D contour lines in simple text format : - NB_POINTS_IN_FIRST_LOOP + NB_POINTS_IN_FIRST_LOOP FIRST_LOOP_IS_CLOSED COORD1 COORD2 COORD1 COORD2 ... ... - NB_POINTS_IN_SECOND_LOOP + NB_POINTS_IN_SECOND_LOOP SECOND_LOOP_IS_CLOSED ... - + (LOOP_IS_CLOSED specify if this coast line describe a closed curve (0=no, 1=yes). +In the case of "loops2" format, you can specify the the coordinate system used in the input file with the"Coordinate" option, valid values are + -"lonlat" for longitude-latidute radian, + -"lonlat_degrees" for longitude-latitude degrees, + -"UTM" for universal transverse mercartor ("UTMZone" option should be specified) + -"cartesian" for full 3D coordinates +"radius" specify the earth radius. +If the "iField" option is set, consecutive points closer than the value of the field iField (in meters) will not be added. +If "MinStraitsFactor" >0 and if a field iField is provided, coastlines closer than MinStraitsFactor*field(IField) are merged and inner corners which form an angle < pi/3 are removed. +The output is always in stereographic coordinates, if the "WritePolarSphere" option is not 0, a sphere is added to the geo file. +WARNING : this plugin is still experimental and need polishing and error-handling. In particular, it will probably crash if an inexistant field id is given or if the input/output cannot be open. String options: @table @code @item InFileName @@ -459,14 +471,12 @@ Default value: @code{0} Default value: @code{6.37814e+06} @item UTMPolarRadius Default value: @code{6.35675e+06} -@item UTMScale -Default value: @code{1} -@item UTMShiftX -Default value: @code{0} -@item UTMShiftY -Default value: @code{0} +@item radius +Default value: @code{6.37101e+06} @item WritePolarSphere Default value: @code{1} +@item MinStraitsFactor +Default value: @code{1} @end table @item Plugin(Gradient) -- GitLab