OpenFOAM

【OpenFOAM(円筒内の流れ)】snappyHexMeshでメッシュ作成(2)

こんにちは(@t_kun_kamakiri

本記事ではOpenFOAMのメッシュ生成ユーティリティであるblockMesh+snappyHexMeshを使って円柱内部のメッシュ生成を行いたいと思います。
最終的には以下のようになります。

本記事の内容

snappyHexMeshを使って円筒内部のメッシュ生成を行う

以前の記事でも解説したようにsnappyHexMeshでの境界層はなかなかきれいに生成することができません。

次回に解説するcfMeshの方が境界層はきれいに生成することができます。
ただ、cfMeshよりsnappyHexMeshの方が設定項目が多く融通が利きますが慣れが必要です。未だに使うかは悩ましいところですね。

cfMeshの境界層についてはこちらをご参考ください。

円筒内部の流れは理論的にもよく理解されている基本的な流れです。

  • レイノルズ数の大きさによる層流・乱流遷移
  • 層流と乱流の助走区間の違い
  • 層流と乱流の速度分布の違い

これらの内容は流体力学の参考書にもある話です。
流体のシミュレーションをしていると何となく結果はでるけども「あってるのどうなの?」と思うこともしばしばあります。
実験とシミュレーションの結果を比較するというのもひとつの手ではありますし、流体力学の中でも条件を限定すると解析解を導くことができ、シミュレーションとの比較を行うことができます。

近似的に解析解が出せるなら、シミュレーションの結果と比較して妥当性を検証することは重要なことです。

今回はシミュレーションが正しく行えているのかを確認するために、円筒のモデルを作成して流体解析を行い、解析解とシミュレーションとの比較を行うことにします。
今回はメッシュだけを作ります。

【使用環境】
OpenFOAM-v2012(WSL2)

メッシュ生成の流れ

snappyHexMeshでのメッシュ生成には以下の手順が必要です。

  1. 形状ファイルを作成(FreeCAD)
  2. ベースメッシュの生成(blockMesh)
  3. 特徴線の抽出(surfaceFeatureExtract)
  4. 形状まわりのメッシュ生成(snappyHexMesh)

かっこ内は手法を書きましたが、オープンソースを使ったオーソドックスな方法を取っているに過ぎません。

形状ファイルはFusion360を使っても良いし、salomeを使っても良いです。
メッシュ生成までもsalomeで行っても良いです。

FreeCADで円柱モデルを作成

FreeCAD(0.20)でΦ10mm×1200mmの円柱モデルを作成します。
snappyHexMeshでの形状の認識のために形状stlファイルが必要であるためです。

また、FreeCADにはソリッドを面分割して面に名前を付ける機能があります。
ここで面に名前を付けておくことと便利です。面に名前を付けることで、境界条件の設定やsnappyHexMeshでの面まわりのメッシュの再分割などにも使えます。

面に名前をつけたstlファイルを結合してひとつのファイルにまとめるFreeCADのマクロは以下の記事をご参考ください。

出力したstlファイルは「constant/triSurface」に保存します。

FreeCADでの「mm単位」の表記は実は数値しか拾っていないので、実際流体解析で使用する単位系がm単位であればスケール変換する必要があります。

スケール変換は以下のコマンドで簡単に行うことができます。

今回使用するのはm単位系になった「model_m.stl」です。

チュートリアルをコピー

適当なチュートリアルからコピーしてきます。

ここで、環境変数「$FOAM_TUTORIALS」が「/opt/OpenFOAM/OpenFOAM-v2012/tutorials」になっています。

フォルダを移動します。

ベースメッシュの生成(blockMesh)

まずはベースメッシュから生成します。
ベースメッシュはOpenFOAMのユーティリティであるblockMeshを使います。blockMeshの設定ファイルは「system/blockMeshDict」で行います。

PraViewでstlファイルの寸法を確認しながら設定しましょう。

system/blockMeshDict

面の名前はFreeCADで付けましたので、boundaryで面の名前を指定する必要はありません。また、境界のタイプはsnappyHexMeshで行いますので境界のタイプの指定も不要です。
あくまでblockMeshはsnappyHexMeshのベースのメッシュのためだけに行うものです。

メッシュのある程度のサイズはblockMeshで決まってしまうため、メッシュサイズは少し注意を払う必要があります。

特徴線の抽出(surfaceFeatureExtract)

今回のような単純な形状の場合は特徴線の抽出の恩恵を受けることができないですが、形状が複雑な場合には特徴線を抽出しておくとsnappyHexMeshの設定で特徴線まわりでメッシュの再分割をすることができるのでメッシュ生成が楽になります。

特徴線の設定は「system/surfaceFeatureExtractDict」で行います。
しかし、コピーしてきたチュートリアルにはsurfaceFeatureExtractDictがないため、適当なチュートリアルから持ってくる必要があります。

どのチュートリアルにsurfaceFeatureExtractDictがあるのかを知っていれば良いですが、知らない場合が多いので以下のコマンドで探すことにします。

するといくつか候補が出てきます。

 

適当にコピーしてsystemに保存します。

 

system/surfaceFeatureExtractDict

設定はそれほど難しくないですね。
どの形状まわりで特徴線を抽出するのか「model_m.stl」を指定して、特徴線を判定する角度「includedAngle 150;」を指定するだけです。

では、以下のコマンドで特徴線を生成します。

コマンド実行後に「constant/triSurface」の中に「model_m.eMesh」というファイルができます。

こちらが特徴線のファイルになりますが、ParaViewで直接読み込むことができないので以下のコマンドでParaViewで読み込める形式に変換します。

ParaViewで読み込むと以下のように円柱の円形の部分だけが表示されます。

形状まわりのメッシュ生成(snappyHexMesh)

形状ファイル、ベースメッシュ、特徴線ができたらsnappyHexMeshで形状まわりのメッシュを生成します。

snappyHexMeshは「system/snappyHexMeshDict」で設定を行いますが、今回コピーしてきたチュートリアルにはなかったので、また適当なチュートリアルから持ってくる必要があります。

以下のコマンドでsnappyHexMeshDictが使われているチュートリアルを探し、

いくつか候補が出てきます。

適当なチュートリアルからsystemにコピーします。

あともう一つ、snappyHexMeshDictにメッシュ品質(meshQualityDict)に関する記述がありますが、その設定ファイルも持ってくる必要があります。

では、snappyHexMeshDictの設定に移ります。

system/snappyHexMeshDict

設定が多くてややこしいですが以下の部分だけを押さえておけば良いでしょう。

  • geometry:形状ファイルの認識(面の名前も指定)
  • castellatedMeshControls.features:特徴線まわりの再分割(再分割しないのでレベル0)
  • castellatedMeshControls.refinementSurfaces:指定した面のまわりで再分割
  • castellatedMeshControls.refinementRegions:指定した領域で再分割(今回は設定なし)
  • addLayersControls.layers:指定した面で境界層を設定

では、snappyHexMeshを実行してメッシュを作ります。

オプションで「-overwrite」を付けるとメッシュ生成の途中経過を上書きしてくれます。

snappyHexMeshは3段階でメッシュを生成するため、オプションなしで実行するとメッシュ生成の途中までフォルダ分けして作られます(「1」「2」「3」のように・・・「3」が最終状態なので「3/polyMesh」を「constant」に移動すれば良いですが、面倒なので途中経過が必要ない方は「-overwrite」を付けて実行した方が良いでしょう。

メッシュ生成には数分時間がかかります。

ParaViewで確認するとこのようになっています。
断面を切るとやはり境界層がきれいではないですね。snappyHexMeshの仕様の問題で、仕方ないですね・・・・

メッシュ品質の確認

メッシュ品質も確認しておきましょう。

「faces: 981408」なので面の数が90万くらいあるということですね。
個人のPCで定常の流体解析をすると並列計算(手元のPCは6並列)でも数時間かかる感じですね。

以下の部分は最低確認するようにしましょう。

  • Max aspect ratio:アスペクト比(縦横の比率)→境界層で大きくなりやすいので大きすぎる場合は確認
  • non-orthogonality:直交性→70°以上であれば修正
  • Max skewness:歪度→4以上だと修正

メッシュ品質の基準は以下のファイルにも記載がありますで確認してみましょう。

コマンドでファイルを探す場合は、

以下のように出力されます。

primitiveMeshCheck.Cの中身を確認しましょう。

該当箇所は「/primitiveMesh」と打って「n(下へ)」「shift + n(上へ)」で探すことができます。

viを終了するには
ESCボタンを押して「:q」か「:q!」で終了することができます。

シミュレーションを行う場合、低品質なセルや面によって生じる数値誤差を低減できる数値スキームを選択します。

おすすめ参考図書

☟こちらは、OpenFOAMの日本語書籍が無い中唯一わかりやすい参考書だと思います。

OpenFOAMによる熱移動と流れの数値解析(第2版)

OpenFOAMによる熱移動と流れの数値解析(第2版)

3,520円(09/28 16:23時点)
Amazonの情報を掲載しています

☟こちらもOpenFOMの古いバージョンでの和訳になります。さすがにこちらはバージョンに対する日本語でのケアはしていないので、OpenFOAMに慣れている方は購入しても良いかと思います。僕は「日本語でまとまっている内容」なので少し重宝しています。

乱流の数値シミュレーション 改訂版

乱流の数値シミュレーション 改訂版

梶島 岳夫
4,070円(09/28 13:23時点)
Amazonの情報を掲載しています

☟以下に、もっと初心者向けの同人誌を紹介しておきます。
初心者は「ってか、まずどうやってOpenFOAMをインストールするの?」というところからつまずきがちです。
そんな時は、以下の書籍をおすすめします。

改訂新版 OpenFOAMの歩き方 (技術の泉シリーズ(NextPublishing))

改訂新版 OpenFOAMの歩き方 (技術の泉シリーズ(NextPublishing))

川畑 真一
2,640円(09/28 14:40時点)
発売日: 2022/04/15
Amazonの情報を掲載しています

インストール方法とチュートリアルで流体解析を体験・・・ちょっと高度な解析まで解説があります。著者曰くOpenFOAMのバージョンの追跡を行いながら、書籍をアップデートするようなので安心ですね。

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です