OpenFOAM: 導入編　cfMeshのインストール for OpenFOAM 6

3月の初歩情報交換会＠北東北の資料用第2弾です。

OpenFOAM用メッシュ生成にはいくつかの方法がありますが、大別すると2つに分けられると思います。

1.OpenFOAM標準のblockMesh, snappyHexMeshコマンドを利用する
2.商用あるいはオープンソースmesherを利用する。最近のメッシュ生成ソフトウェアのいくつかは標準でOpenFOAM用メッシュを出力できるようですが、必要に応じてOpenFOAMに付属するコンバートコマンドを利用する

今回は後者に関して、cfMeshと呼ばれるオープンソースmesher（テトラやポリヘドラルメッシュ、境界層メッシュ生成に対応）の導入についてまとめます。

# cfMeshとは？
https://cfmesh.com/ にサイトがあります。もともとは商用GUIメッシュ生成ソフトウエア（cfMesh-pro→CF-Mesh+）ですが、そのコア部分をライブラリおよびCUIコマンドツール群cfMeshとして公開(GPLv3)しています。商用版の最新版よりも機能的に少しバージョンが古くなるようですが、ありがたく利用させていただくことにします。

機能的にはsnappyHexMesh(以下sHM)と似ていますが、STLファイルを取り込み、Cartesian, tetrahedra, hexahedra, polyhedraなどの各種メッシュを生成したり、境界層メッシュなどを生成することができ、自動mesh refinementなども可能になっています。全体的にsHMよりも使いやすい感じです（メッシュ生成対象によりけりですが）。

# cfMeshのダウンロード・インストール
https://sourceforge.net/p/cfmesh/code/ci/development/tree/ からdevelopment branchを利用します。
ダウンロードには、コマンドラインでgitを使います。gitはシステムに入っていると思いますが、
sudo apt install gitでもインストールできます。

なお、今回はOpenFOAM 6と連携して使うことを想定しています。cfMeshのライブラリはOpenFOAMに依存する部分があるので、cfMeshのビルドの際は、連携するOpenFOAMのバージョンに合わせたもの（OpenFOAM 5/6はdevelopment branch）が必要です。

また、OpenFOAM v1812などのESI版にはcfMeshが同梱されるようになっていますので、そちらをお使い下さい。

```
cd ~/OpenFOAM
mkdir user-6 (ユーザー名は適宜読み替えてください。ここではuserというユーザー名にしています)
cd user-6
git clone https://git.code.sf.net/p/cfmesh/code cfmesh-development
Cloning into 'cfmesh-development'...
remote: Enumerating objects: 9814, done.
remote: Counting objects: 100% (9814/9814), done.
remote: Compressing objects: 100% (4954/4954), done.
remote: Total 9814 (delta 6299), reused 7459 (delta 4675)
Receiving objects: 100% (9814/9814), 22.16 MiB | 3.92 MiB/s, done.
Resolving deltas: 100% (6299/6299), done.

cd cfmesh-development
git checkout development
git pull
of6 (OpenFOAMの環境設定が必要です)
./Allwmake -j 2
 :
```

ビルドに成功したら、動作確認です。
なぜか、Default-6というフォルダにインストールされてしまいましたが、pathが通っているのでこのまま使います。

```
$ which cartesianMesh
/home/user/OpenFOAM/Default-6/platforms/linux64GccDPInt32Opt/bin/cartesianMesh
$ cartesianMesh -help

Usage: cartesianMesh [OPTIONS]
options:
  -case <dir>       specify alternate case directory, default is the cwd
  -fileHandler <handler>
                    override the fileHandler
  -hostRoots <(((host1 dir1) .. (hostN dirN))>
                    slave root directories (per host) for distributed running
  -noFunctionObjects
                    do not execute functionObjects
  -parallel         run in parallel
  -roots <(dir1 .. dirN)>
                    slave root directories for distributed running
  -srcDoc           display source code in browser
  -doc              display application documentation in browser
  -help             print the usage

Using: OpenFOAM-6 (see www.OpenFOAM.org)
Build: 6-6257b17a4cf8
```

# 導入されるコマンド

個々のコマンドの機能については、付属のusers Guide 23Pageをご覧ください。
（個人的に）よく使うものは、cartesianMesh, cartesian2DMesh, checkSurfaceMesh, surfaceFeatureEdgesです。

```
$ cd $FOAM_USER_APPBIN
$ ls -1
FLMAToSurface
FMSToSurface
FMSToVTK
cartesian2DMesh
cartesianMesh
checkSurfaceMesh
copySurfaceParts
extrudeEdgesInto2DSurface
generateBoundaryLayers
importSurfaceAsSubset
improveMeshQuality
improveSymmetryPlanes
mergeSurfacePatches
meshToFPMA
pMesh
patchesToSubsets
preparePar
removeSurfaceFacets
scaleMesh
scaleSurfaceMesh
subsetToPatch
surfaceFeatureEdges
surfaceGenerateBoundingBox
surfaceToFMS
tetMesh
```

# 付属Totorial 
いくつかTutorialが付属していますので、cfMeshの使い方を説明する「活用編」で、いくつか紹介することにします。