メッシュ作成ソフトウェア Gmsh を Google Colaboratory で使う

有限要素法におけるメッシュ作成ソフトウェアである。
**Gmsh**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142847/30cebb8b-e99a-ea2e-0c9b-5b1cd0abcac5.png)
 を **Google Colaboratory** で使う方法をメモとして残します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142847/0624d475-f262-df91-08cf-6bc6a656985e.png)

## はじめに
今回は、Gmsh の チュートリアル
https://gitlab.onelab.info/gmsh/gmsh/-/blob/master/tutorial/python/t1.py
を **Google Colaboratory**（以下 colab） で実行できることをゴールとします。

ソースはここに置いておきます。
https://colab.research.google.com/drive/1E_jqvzYpJ84iBfVAPFV5v55szWo0xpVv?usp=sharing


## 環境設定

**Google Colaboratory** に gmsh をインストールします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142847/123240be-5c4e-e90c-2907-504d0fe52007.png)

### 1. gmsh 本体のインストール

gmsh 本体 は `apt-get` でインストールします。

```
!apt-get install gmsh
```


### 2. python モジュール [gmsh](https://pypi.org/project/gmsh/) のインストール

python モジュール [gmsh](https://pypi.org/project/gmsh/) は `pip` でインストールします。

```
!pip install --upgrade gmsh
```

### 3. import gmsh に失敗する

*2021.08.22* 現在 import gmsh に失敗する
原因は、 以下の示す colab のモジュールの参照 path に gmsh のインストールフォルダ`/usr/local/lib/python3.7/site-packages/` が含まれていないからです。

```python
import sys
import pprint
pprint.pprint(sys.path)
```
>['',
 '/content',
 '/env/python',
 '/usr/lib/python37.zip',
 '/usr/lib/python3.7',
 '/usr/lib/python3.7/lib-dynload',
 '/usr/local/lib/python3.7/dist-packages',
 '/usr/lib/python3/dist-packages',
 '/usr/local/lib/python3.7/dist-packages/IPython/extensions',
 '/root/.ipython']

対策としてcolab の参照に一時的に追加します。

```python
import sys
sys.path.append('/usr/local/lib/python3.7/site-packages/gmsh-4.8.4-Linux64-sdk/lib/')
```

## チュートリアルを実行します。

### gmsh でモデルを作成する

```python
import gmsh
```

```python
gmsh.initialize()
```

```python
gmsh.model.add("t1")
```

```python
lc = 1e-2
gmsh.model.geo.addPoint(0, 0, 0, lc, 1)
gmsh.model.geo.addPoint(.1, 0, 0, lc, 2)
gmsh.model.geo.addPoint(.1, .3, 0, lc, 3)
p4 = gmsh.model.geo.addPoint(0, .3, 0, lc)
```

```python
gmsh.model.geo.addLine(1, 2, 1)
gmsh.model.geo.addLine(3, 2, 2)
gmsh.model.geo.addLine(3, p4, 3)
gmsh.model.geo.addLine(4, 1, p4)
```

```python
gmsh.model.geo.addCurveLoop([4, 1, -2, 3], 1)
```

```python
gmsh.model.geo.addPlaneSurface([1], 1)
```

```python
gmsh.model.geo.synchronize()
```

```python
gmsh.model.addPhysicalGroup(1, [1, 2, 4], 5)
ps = gmsh.model.addPhysicalGroup(2, [1])
gmsh.model.setPhysicalName(2, ps, "My surface")
```

```python
gmsh.model.mesh.generate(2)
```

```python
gmsh.write("t1.msh")
```

```python
gmsh.finalize()
```

### モデルを表示してみる

`meshio` と `matplotlib` を使って結果を表示してみます。

```
!pip install meshio
import meshio
```

```python
meshio.read("t1.msh")
```

```python
import matplotlib.pyplot as plt
```

```python
reader = meshio.read("t1.msh")
x = reader.points

fig = plt.figure()
plt.rcParams["font.size"] = 18
plt.rcParams["figure.figsize"] = (10.0, 6.0)
plt.figure(figsize=(16, 16))
plt.triplot(x[:, 0], x[:, 1], color="gray")
plt.gca().set_aspect("equal")
plt.savefig("mesh.svg")
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142847/7582611d-fc16-9fad-2800-e456343201b8.png)


# まとめ

結局この記事は、

>ハマったポイント
インストールフォルダがエラーの原因になるらしい
ので
`sys.path.append('/usr/local/lib/python3.7/site-packages/gmsh-4.8.4-Linux64-sdk/lib/')`
を実行する

が言いたかっただけ