Skip to content
Snippets Groups Projects
Select Git revision
  • 4cd72fb39f906d5e91111a483adf016816efe5ee
  • master default protected
  • overlaps_tags_and_distributed_export
  • overlaps_tags_and_distributed_export_rebased
  • relaying
  • alphashapes
  • patches-4.14
  • steplayer
  • bl
  • pluginMeshQuality
  • fixBugsAmaury
  • hierarchical-basis
  • new_export_boris
  • oras_vs_osm
  • reassign_partitions
  • distributed_fwi
  • rename-classes
  • fix/fortran-api-example-t4
  • robust_partitions
  • reducing_files
  • fix_overlaps
  • gmsh_4_14_0
  • gmsh_4_13_1
  • gmsh_4_13_0
  • gmsh_4_12_2
  • gmsh_4_12_1
  • gmsh_4_12_0
  • gmsh_4_11_1
  • gmsh_4_11_0
  • gmsh_4_10_5
  • gmsh_4_10_4
  • gmsh_4_10_3
  • gmsh_4_10_2
  • gmsh_4_10_1
  • gmsh_4_10_0
  • gmsh_4_9_5
  • gmsh_4_9_4
  • gmsh_4_9_3
  • gmsh_4_9_2
  • gmsh_4_9_1
  • gmsh_4_9_0
41 results

t2.geo

Blame
  • t2.geo 5.49 KiB
    // -----------------------------------------------------------------------------
    //
    //  Gmsh GEO tutorial 2
    //
    //  Transformations, extruded geometries, volumes
    //
    // -----------------------------------------------------------------------------
    
    // We first include the previous tutorial file, in order to use it as a basis
    // for this one. Including a file is equivalent to copy-pasting its contents:
    
    Include "t1.geo";
    
    // We can then add new points and curves in the same way as we did in `t1.geo':
    
    Point(5) = {0, .4, 0, lc};
    Line(5) = {4, 5};
    
    // Gmsh also provides tools to transform (translate, rotate, etc.)
    // elementary entities or copies of elementary entities. For example, point
    // 5 can be moved by 0.02 to the left with:
    
    Translate {-0.02, 0, 0} { Point{5}; }
    
    // And it can be further rotated by -Pi/4 around (0, 0.3, 0) (with the rotation
    // along the z axis) with:
    
    Rotate {{0,0,1}, {0,0.3,0}, -Pi/4} { Point{5}; }
    
    // Note that there are no units in Gmsh: coordinates are just numbers - it's up
    // to the user to associate a meaning to them.
    
    // Point 3 can be duplicated and translated by 0.05 along the y axis:
    
    Translate {0, 0.05, 0} { Duplicata{ Point{3}; } }
    
    // This command created a new point with an automatically assigned tag. This tag
    // can be obtained using the graphical user interface by hovering the mouse over
    // the point: in this case, the new point has tag `6'.
    
    Line(7) = {3, 6};
    Line(8) = {6, 5};
    Curve Loop(10) = {5,-8,-7,3};
    Plane Surface(11) = {10};
    
    // To automate the workflow, instead of using the graphical user interface to
    // obtain the tags of newly created entities, one can use the return value of
    // the transformation commands directly. For example, the `Translate' command
    // returns a list containing the tags of the translated entities. Let's
    // translate copies of the two surfaces 1 and 11 to the right with the following
    // command:
    
    my_new_surfs[] = Translate {0.12, 0, 0} { Duplicata{ Surface{1, 11}; } };
    
    // my_new_surfs[] (note the square brackets, and the `;' at the end of the
    // command) denotes a list, which contains the tags of the two new surfaces
    // (check `Tools->Message console' to see the message):
    
    Printf("New surfaces '%g' and '%g'", my_new_surfs[0], my_new_surfs[1]);
    
    // In Gmsh lists use square brackets for their definition (mylist[] = {1, 2,
    // 3};) as well as to access their elements (myotherlist[] = {mylist[0],
    // mylist[2]}; mythirdlist[] = myotherlist[];), with list indexing starting at
    // 0. To get the size of a list, use the hash (pound): len = #mylist[].
    //
    // Note that parentheses can also be used instead of square brackets, so that we
    // could also write `myfourthlist() = {mylist(0), mylist(1)};'.
    
    // Volumes are the fourth type of elementary entities in Gmsh. In the same way
    // one defines curve loops to build surfaces, one has to define surface loops
    // (i.e. `shells') to build volumes. The following volume does not have holes
    // and thus consists of a single surface loop:
    
    Point(100) = {0., 0.3, 0.12, lc};  Point(101) = {0.1, 0.3, 0.12, lc};
    Point(102) = {0.1, 0.35, 0.12, lc};
    
    xyz[] = Point{5}; // Get coordinates of point 5
    Point(103) = {xyz[0], xyz[1], 0.12, lc};
    
    Line(110) = {4, 100};   Line(111) = {3, 101};
    Line(112) = {6, 102};   Line(113) = {5, 103};
    Line(114) = {103, 100}; Line(115) = {100, 101};
    Line(116) = {101, 102}; Line(117) = {102, 103};
    
    Curve Loop(118) = {115, -111, 3, 110};  Plane Surface(119) = {118};
    Curve Loop(120) = {111, 116, -112, -7}; Plane Surface(121) = {120};
    Curve Loop(122) = {112, 117, -113, -8}; Plane Surface(123) = {122};
    Curve Loop(124) = {114, -110, 5, 113};  Plane Surface(125) = {124};
    Curve Loop(126) = {115, 116, 117, 114}; Plane Surface(127) = {126};
    
    Surface Loop(128) = {127, 119, 121, 123, 125, 11};
    Volume(129) = {128};
    
    // When a volume can be extruded from a surface, it is usually easier to use the
    // `Extrude' command directly instead of creating all the points, curves and
    // surfaces by hand. For example, the following command extrudes the surface 11
    // along the z axis and automatically creates a new volume (as well as all the
    // needed points, curves and surfaces):
    
    Extrude {0, 0, 0.12} { Surface{my_new_surfs[1]}; }
    
    // The following command permits to manually assign a mesh size to some of the
    // new points:
    
    MeshSize {103, 105, 109, 102, 28, 24, 6, 5} = lc * 3;
    
    // We finally group volumes 129 and 130 in a single physical group with tag `1'
    // and name "The volume":
    
    Physical Volume("The volume", 1) = {129,130};
    
    // Note that, if the transformation tools are handy to create complex
    // geometries, it is also sometimes useful to generate the `flat' geometry, with
    // an explicit representation of all the elementary entities.
    //
    // With the built-in geometry kernel, this can be achieved with `File->Export' by
    // selecting the `Gmsh Unrolled GEO' format, or by adding
    //
    //   Save "file.geo_unrolled";
    //
    // in the script. It can also be achieved with `gmsh t2.geo -0' on the command
    // line.
    //
    // With the OpenCASCADE geometry kernel, unrolling the geometry can be achieved
    // with `File->Export' by selecting the `OpenCASCADE BRep' format, or by adding
    //
    //   Save "file.brep";
    //
    // in the script. (OpenCASCADE geometries can also be exported to STEP.)
    
    // It is important to note that Gmsh never translates geometry data into a
    // common representation: all the operations on a geometrical entity are
    // performed natively with the associated geometry kernel. Consequently, one
    // cannot export a geometry constructed with the built-in kernel as an
    // OpenCASCADE BRep file; or export an OpenCASCADE model as an Unrolled GEO
    // file.