# First Mesh

## My first square

### Let’s go

1. Copy/paste the following code in a new file, named e.g. `square.geo`:

`````` h = 1;                     // Characteristic length of a mesh element
Point(1) = {0, 0, 0, h};   // Point construction
Point(2) = {10, 0, 0, h};
Point(3) = {10, 10, 0, h};
Point(4) = {0, 10, 0, h};
Line(1) = {1,2};            //Lines
Line(2) = {2,3};
Line(3) = {3,4};
Line(4) = {4,1};
Curve Loop(1) = {1,2,3,4};   // A Boundary
Plane Surface(1) = {1};     // A Surface
Physical Surface(1) = {1};  // Setting a label to the Surface
``````
2. In GMSH, go to `files->open` (`CTRL+o`) and open the file, or type `gmsh square.geo` in a terminal (warning: this open a new instance of GMSH (which is very light by the way!)).

3. A square should have appear in GMSH’s windows. The camera can be adjusted using the mouse: rotating (`left click`), translating (`right click`) or zooming (`wheel`). At bottom left of GMSH’s windows, camera can be reseted using `X,Y,Z` and `1:1` (scale) buttons.

4. The square can now be meshed by typing `2` on the keyboard (or maybe `shift` + `2`) or using the menu: `Mesh->2D`

### Log

GMSH is provided with a log console that can be displayed by clicking on the bottom banner of the window. For the square example, you should have something like

``````Info    : Reading 'square.geo'...
Info    : Finalized high order topology of periodic connections
Info    : Meshing 1D...
Info    : Meshing curve 1 (Line)
Info    : Meshing curve 2 (Line)
Info    : Meshing curve 3 (Line)
Info    : Meshing curve 4 (Line)
Info    : Done meshing 1D (0.000981 s)
Info    : Meshing 2D...
Info    : Meshing surface 1 (Plane, Delaunay)
Info    : Done meshing 2D (0.017519 s)
Info    : 142 vertices 286 elements
``````

This shows that GMSH starts by meshing the four lines (`Meshing 1D...`) then the surface. In this example, 142 vertices have been created for a total of 286 elements (lines and triangles).

Mesh can be saved using `CTRL + Shift + s` or using graphical interface (`file->save mesh`). By default, the extension of the mesh is `.msh` and of the same root as the `.geo` file (i.e. `square.geo` leads to `square.msh`).

## Code analyse

### Parameter `h`

On the first line of our code is defined a variable, `h`, which is the characteristic length of the elements. This size is precised at each `Point` elementary entity.

Let us play with it (check the tips bellow first):

1. Modify the parameter `h`, remesh and observe the result
2. Anisotropic mesh: change only the mesh size of `Point(2)`, for example with `h/10`. Remesh and observe the result
When the file has been modified, there is no need to relaunch GMSH: simply press `0` (zero) (or maybe `shift` + `0`). This forces GMSH to reset and re-read the current file.

### `Point` entity

In GMSH, a volume (3D) is defined by its surfaces, a surface (2D) by its (closed) curves and a curve (1D) by its endpoints. Each of these, `Volume`, `Surface`, `Curve` and `Point` are named elementary entities in GMSH. The first one that is studied here are the 0D entity: `Point`. They are defined as follows

``````Point(index) = {x, y, z, h};
``````

where the parameters are:

• `index`: unique identifier (`int` > 0) of the `Point`. This number has to be set by the user, either manually or using `newp` which returns the next available index for `Point` (`newp` = NEW Point).
• `x`, `y`, `z`: cartesian coordinate of the `Point`
• `h`: mesh element size around the `Point`

Apply the following change to `square.geo`:

1. Move some `Point` to obtain a rectangle (instead of a square)
2. Move some `Point` to get a quadrangle not rectangular at all

### `Line` and `Curve Loop` entities

#### `Line`

It is an oriented segment linking two `Point`:

``````  Line(index) = {PointA, PointB};
``````

Avec comme paramètres :

• `index`: unique identifier (`int` > 0) of the `Line`. As for `Point`,this number has to be set by the user, either manually or using `newl` (next available index for `Line`).
• `PointA`: index of the starting `Point`
• `PointB`: index of the ending `Point`
A `Line` is oriented!

#### `Curve Loop`

Closed loop of `Curve` (`Line` being a `Curve`) that represent a boundary (for a `Surface` generally):

``````Curve Loop(index) = {Curve1, Curve2, ..., CurveN};
``````

Where:

• `index`: Unique identifier (`int` > 0) of the `Curve Loop` (`newll` can be used)
• `CurveX`: index of the Xth `Curve` (or `Line`). If this quantity is negative (e.g. -10) then the `Curve` is oriented backwardly.

Let’s do a “L-shape” geometry in a new file `L.geo` as proposed in the below figure (Set a mesh refinement to `h`=1). You can copy/paste the previous `square.geo` file to help yourself.

### `Surface` entity

A `Surface` is defined by its boundaries: their `Curve Loop` (possibly more than one):

``````Plane Surface(index) = {CurveLoop1, CurveLoop2, ..., CurveLoopN};
``````
• `index`: Unique identifier (`int` > 0) of the `Surface` (`news` can be used)
• `CurveLoopX`: index of the Xth `Curve Loop`. As for the `Line`, this quantity can be negative (e.g. -10) to backwardly orient a `Curve Loop`.

Modify the “L-shape” geometry to add a hole inside as on the below figure. You will have to add `Point` and `Line` obvsiouly, but also a new `Curved Loop`. The `Surface` must then be defined by the 2 loops!

### `Elementary Entities` vs. `Physical Entities`

The last line of the file`square.geo` is:

``````Physical Surface(1)={1};
``````

This is particular to GMSH and do not affect the geometry rather than the output mesh file. The command is the same for `Volume`, `Surface`, `Curve` and `Point`:

``````Physical Volume/Surface/Line/Point(index) = {entity1, entity2, ..., entityN};
``````

Basically, GMSH can set a unique identifier (`index`) to a set of entities (to regroup them). This new identifier has nothing to do with the previous one you have defined. The output file do not contain the `elementary` index but only the `physical` ones. Moreover, only the entities that have a `physical` tag are saved to the disk! This is explained in detail later.