1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
|
# msh2xdmf
The code contains a converter from MSH mesh format to XDMF mesh format for the dolfin users.
## How to test the installation ?
In order to test the compatibility of the script with the user installation of `meshio` and `dolfin`, the following command must be run at the root of the repository:
```
% python3 -m pytest
```
## How to convert and import a mesh in one step ?
For this example, let us consider a 2D mesh named `mesh.msh` where 3 physical groups are defined in the `mesh.geo` file:
```cpp
// Domain
Physical Surface("domain") = {1};
// Boundaries
Physical Line("left") = {4};
Physical Line("right") = {2};
```
In order to convert and import the mesh and its boundaries in dolfin, one can use the utility function `import_mesh` which returns the dolfin `Mesh` object, the `MeshFunction` object associated to the files and a dictionary containing the association_table.
```python3
from msh2xdmf import import_mesh
mesh, boundaries_mf, association_table = import_mesh(
prefix='mesh', # it the file name of the msh file without the extension
dim=2,
)
```
In order to get the value associated to get the `MeshFunction` value associated to the `left`, one must use: `association_table["left"]`.
Running this function will display the association table between the GMSH label and the MeshFunction values:
```
+-----------------------------------------+
| GMSH label | MeshFunction value |
+--------------------+--------------------+
| left | 2 |
| right | 3 |
| domain | 1 |
+-----------------------------------------+
```
This table contains the GMSH labels and the value associated to each physical groups. Additionally, five new files are generated: `mesh_domain.xdmf` and `mesh_domain.h5` which contain the domain, `mesh_boundaries.xdmf` and `mesh_boundaries.h5` which contain the values associated to the boundaries and `mesh_association_table.ini` which contains the association table. In order to check the label/value association, the `.xdmf` files can also be openend with Paraview (or an alternative). It will show the value associated to each domains/boundaries.
## How to convert a mesh from msh to xdmf?
For this example, let us consider a 2D mesh named `mesh.msh` where 3 physical groups are defined in the `mesh.geo` file:
```cpp
// Domain
Physical Surface("domain") = {1};
// Boundaries
Physical Line("left") = {4};
Physical Line("right") = {2};
```
In order to convert this mesh, the following command must be used:
```shell
% python3 msh2xdmf.py -d 2 mesh.msh
```
This command should outputs the following table (the table should be empty for msh2 format):
```
+-----------------------------------------+
| GMSH label | MeshFunction value |
+--------------------+--------------------+
| left | 2 |
| right | 3 |
| domain | 1 |
+-----------------------------------------+
```
This table contains the GMSH labels and the value associated to each physical groups. Additionally, five new files are generated: `mesh_domain.xdmf` and `mesh_domain.h5` which contain the domain, `mesh_boundaries.xdmf` and `mesh_boundaries.h5` which contain the values associated to the boundaries and `mesh_association_table.ini` which contains the association table. In order to check the label/value association, the `.xdmf` files can also be openend with Paraview (or an alternative). It will show the value associated to each domains/boundaries.
## How to import an xdmf mesh ?
In order to only import the mesh and its boundaries in dolfin, one must also use the utility function `import_mesh` which returns the dolfin `Mesh` object, the `MeshFunction` object associated to the files and a dictionary containing the association_table. This function requires the files create by the conversion function.
```python3
from msh2xdmf import import_mesh
mesh, boundaries_mf, association_table = import_mesh(
prefix="mesh", # it the file name of the msh file without the extension
dim=2,
)
```
In order to get the value associated to get the `MeshFunction` value associated to the `left`, one must use: `association_table["left"]`.
## How to convert a multidomain mesh ?
For this example, let us consider a mesh named `multidomain.msh` where 7 physical groups are defined in the `multidomain.geo` file:
```cpp
// Domain
Physical Surface("top_domain") = {1};
Physical Surface("bot_domain") = {2};
// Boundaries
Physical Line("middle") = {1};
Physical Line("right") = {2, 5};
Physical Line("top") = {3};
Physical Line("bot") = {6};
Physical Line("left") = {4, 7};
```
In order import the mesh and the value associated to the subdomains and the boundaries in dolfin, one can use the utility function `import_mesh` which returns the dolfin `Mesh` object and the `MeshFunction` object associated to the files.
```python3
from msh2xdmf import import_mesh
mesh, boundaries_mf, subdomains_mf, association_table = import_mesh(
prefix='multidomain',
dim=2,
subdomains=True,
)
```
It should outputs the following table (the table should be empty for msh2 format):
```
+-----------------------------------------+
| GMSH label | MeshFunction value |
+--------------------+--------------------+
| middle | 3 |
| right | 4 |
| top | 5 |
| bot | 6 |
| left | 7 |
| top_domain | 1 |
| bot_domain | 2 |
+-----------------------------------------+
```
This table contains the GMSH labels and the value associated to each physical groups. Additionally, four new files are generated: `multidomain_domain.xdmf` and `multidomain_domain.h5` which contain the domain and the values associated to each subdomains, `multidomain_boundaries.xdmf` and `multidomain_boundaries.h5` which contain the values associated to the boundaries and `mesh_association_table.ini` which contain the association table. In order to check the label/value association, both files can be opened with Paraview (or an alternative) to check the values associated to each boundaries and subdomains.
In this example, `boundaries_mf` is the MeshFunction object associated to the boundaries and `subdomains_mf` is the MeshFunction associated to the subdomains.
In order to get the value associated to get the `MeshFunction` value associated to the `left`, one must use: `association_table["left"]`. The same dictionary can also be used for the subdomains.
|