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の使い方を説明する「活用編」で、いくつか紹介することにします。