# Mesh module¶

## Description¶

This part of the library has the role to store and manage the meshes, i.e. a collection of elements (real elements) connected to each other by some of their faces. For that, it develops concepts of elements, elements of reference, structure of meshes, collection of nodes, geometric transformations, subpart of the boundary or subzone of the mesh.

There is no really effective meshing capabilities available for the moment in
*GetFEM*. The meshes of complex objects must be imported from existing meshers such
as Gmsh or GiD. Some importing functions of meshes have been written and
can be easily extended for other formats.

The object which represents a mesh declared in the file `getfem_mesh.h`

and
which is used as a basis for handling of the meshes in *GetFEM* manages also the
possibility for the structures depending on a mesh (see MESHFEM and MESHIM
modules) to react to the evolution of the mesh (addition or removal of elements,
etc.).

## Files¶

File(s) | Description |
---|---|

`bgeot_convex_structure.h` and `bgeot_convex_structure.cc` |
Describes the structure of an element disregarding the coordinates of its vertices. |

`bgeot_mesh_structure.h` and `bgeot_mesh_structure.cc` |
Describes the structure of a mesh disregarding the coordinates of the nodes. |

`bgeot_node_tab.h` and `bgeot_node_tab.cc` |
A node container allowing the fast search of a node and store nodes identifying the too much close nodes. |

`bgeot_convex.h` |
Describes an element with its vertices. |

`bgeot_convex_ref.h` and `bgeot_convex_ref.cc` and `bgeot_convex_structure.cc` |
Describe reference elements. |

`bgeot_mesh.h` |
Describes a mesh with the collection of node (but without the description of geometric transformations). |

`getfem_mesh_region.h` and `getfem_mesh_region.cc` |
Object representing a mesh region (boundary or part of a mesh). |

`bgeot_geometric_trans.h` and `bgeot_geometric_trans.cc` |
Describes geometric transformations. |

`bgeot_geotrans_inv.h` and `bgeot_geotrans_inv.cc` |
A tool to invert geometric transformations. |

`getfem_mesh.h` and `getfem_mesh.cc` |
Fully describes a mesh (with the geometric transformations, subparts of the mesh, support for parallelization). Includes the Bank algorithm to refine a mesh. |

`getfem_deformable_mesh.h` |
defines an object capable to deform a mesh with respect to a displacement field and capable to restore it |

`getfem_mesher.h` and `getfem_mesher.cc` |
An experimental mesher, in arbitrary dimension. To be used with care and quite slow (because of node optimization). It meshes geometries defined by some level sets. |

`getfem_import.h` and `getfem_import.cc` |
Import mesh files in various formats |

`getfem_regular_meshes.h` and `getfem_regular_meshes.cc` |
Produces structured meshes |

`getfem_mesh_slicers.h` and `getfem_mesh_slicers.cc` |
A slice is built from a mesh, by applying some slicing operations (cut the mesh with a plane, intersect with a sphere, take the boundary faces, etc..). They are used for post-treatment (exportation of results to VTK or OpenDX, etc.). |

`getfem_mesh_slice.h` and `getfem_mesh_slice.cc` |
Store mesh slices. |

## State¶

Stable and not evolving so much.

## Perspectives¶

For the moment, the module is split into two parts which lie into two different
namespaces. Of course, It would be more coherent to gather the module in only one
namespace (`getfem`

).

Note

The file `bgeot_mesh.h`

could be renamed `getfem_basic_mesh.h`

.

A bibliographical review on how to efficiently store a mesh and implement the main operations (add a node, an element, deal with faces, find the neighbour elements, the isolated faces …) would be interesting to make the mesh structure evolve.

A senstive algorithm is the one (in bgeot_node_tab.cc) which identify the too much close nodes. More investigations (and documentation) are probably necessary.