CAE

【第3回バックステップ流れ】OpenFOAMで流体解析!層流モデルと乱流モデル(k-ωSST)で計算。

こんにちは(@t_kun_kamakiri)(‘◇’)ゞ

前回までで、Salomeを使ってモデル作成メッシュ作成を行いました。

カマキリ

まだ、見ていない方は以下の記事をどうぞ

前回の記事はこちら

 

今回は、salomeで作成したメッシュをOpenFOAMを使って流体解析をしたいと思います。

【やる事】
 
こういった形状での、段差部分にできる渦生成を流体解析で再現したいと思います。
※今回は、OpenFOAMを使ってみた系なので、実現象と比較して精度的にどうかという議論などは行いません。
勉強になるかと思い、層流モデルと乱流モデルの2つのケースで解析をしてみます。

 

自分自身のまだ理解していない部分があり、かなり説明が抜けてしまっていますのでご了承ください。
それでもOpenFOAMをはじめて使う人にとっての何かのヒントになればと考えています_(._.)_

なので、この記事は以下の人向けに書いています。

こんな人を対象にしています
  • OpenFOAMを使い始めたけど、自分でモデルを作成して流体解析してみたいOpenFOAM初心者
  • お金もかけずに自宅のPCで流体解析をやってみたい方

 

ひとつひとつの設定方法や設定の意味についての解説は行うことができないので、逐一調べるようにしてみてください。

使用環境

  • Windows10
  • OpenFOAM:ver6.x(WSLでのOpenFOAMのインストール方法はこちら)

 

ちなみに僕は流体解析の実務経験もなければ、大学で流体を専門にしていたわけではなく完全独学です(笑)

正直全然わかっていないことだらけです・・・・_(._.)_

解くべき方程式

 

  • 運動方程式(2次元):ナビエストークス方程式
  • 質量保存則:非圧縮条件

今回は、定常解析をするため「simpleFOAM」を使います。

simpleFOAMってもともとどんな用途のためのソルバなのか?って思った場合は以下の表を参考にすれば良いでしょう。

OpenFOAMの「非圧縮性流体ソルバ」を以下に示しておきます。

参考サイト

非圧縮性流体
adjointShapeOptimizationFoam定常/非ニュートン流体の乱流/随伴方程式を使用することで障害物による圧損を考慮してダクト形状を最適化
boundaryFoam定常/1次元乱流/通常は流入口での境界層条件の生成に使用
icoFoam非定常/ニュートン流体の層流
nonNewtonianIcoFoam非定常/非ニュートン流体の層流
pimpleFoam非定常/時間刻み幅大/(PISOとSIMPLEを組み合わせた)PIMPLEアルゴリズム
pimpleDyMFoam非定常/移動メッシュ/(PISOとSIMPLEを組み合わせた)PIMPLEアルゴリズム
SRFPimpleFoam非定常/時間刻み幅大/単一の回転領域
pisoFoam非定常/PISOアルゴリズム
shallowWaterFoam非定常/回転を伴う非粘性の浅水方程式
simpleFoam定常
porousSimpleFoam定常/多孔質体(陰解法・陽解法)有りの乱流/MRF(Multiple Reference Frame)機能を使用可能
SRFSimpleFoam定常/単一の回転領域

この中で今回は「simpleFOAM」という、非定常・非圧縮性の流れを扱う際に使うソルバをベースにします。

非圧縮性の流体は基本的には温度場は解きません。
なぜなら、知りたい物理量は「流速\(\boldsymbol{u}\)」と「圧力\(p\)」の2つであり、解くべき方程式「運動量保存則」と「質量保存則」の2つです。

なので、方程式自体が閉じいるので温度を解く必要がないですし、密度変化が小さい非圧縮性の仮定が成り立つような状況において温度変化による密度への影響というのはとても小さいので温度を考える必要がないというのもあります。

こちらの記事もどうぞ

温度変化することによる密度変化を考慮しないといけない場合は、有名なのはブシネスク近似と呼ばれるものですが、ここでは深い話はしません。

今回は、乱流モデルを使わない場合使う場合の2パターンで計算を実行してみます。

 

正直、実機データと比較しているわけではないのでどちらが実現象に近い解析設定かはわかりませんが、OpenFOAMでの乱流モデルの設定を知るために設定方法を簡単にまとめておきました。

ケースファイルをコピーする

 

OpenFOAMを使う場合は各ソルバに用意された豊富なチュートリアルを自身の作業ディレクトリにコピーして使うのが基本です。

【作業内容】

  1. 「/opt/openfoam6/tutorials/incompressible/simpleFoam/motorBike」を自身の作業ディレクトリにコピーしてください。
  2. 作業ディレクトリの名前は、「motorBike_test10m-s」(写真と名前が違いますが・・・・)としておきます。

では、次に「motorBike_test1」のファイルを編集していきます。

 

基本的な設定方法はネットに情報があります。

公式ドキュメントとしてはユーザーガイド(日本語訳)が役に立つので、わからないことがあればこちらを参考に理解をしていけば良いでしょう。

 

境界のタイプの変更

 

計算領域の境界にあたる「境界面」には、パッチのタイプというのを指定する必要があります。

境界面の設定の意味については「ユーザーガイド(日本語訳)」に書いています。

ここで使用する境界面のタイプについては以下のように黄色マーカーをしておきました。

patch 一般的なパッチ
symmetryPlane 対称面
empty 2 次元形状の前後の面
wedge 軸対称形状のための,くさび型の前後
cyclic 周期境界面
wall 壁面(乱流の壁関数に使用)
processor 並列計算時のプロセッサ間の境界

 

一般的な境界面に対しては「patch」と指定するのですが、壁関数や2次元境界面で使用したい場合は、「patch」以外の設定をする必要があります。

【作業内容】

  1. 「wall」と「FrontAndBack」の境界面の種類を変更

 

パッチタイプの設定は「polyMesh/boundary」ファイルで指定することができます。

 

 

では、次に乱流モデルの設定について見ていきます。

まずは、乱流モデルを使わない場合の設定から見ていきます。

乱流モデル(層流モデル)を使わない場合

乱流モデルを使わない場合というのは、つまりナビエストークス方程式を直接解くということですね。

余計な設定がないため、とても設定が楽です(^^)/

境界条件の設定

 

境界条件は以下のように設定をします。

OpenFOAMでは以下のように設定するという事を頭に置きつつ、ファイルの編集を行っていきます。

 

【作業内容】

  1. 「0/U」と「0/p」の境界条件を設定する。

 

まず、「0/U」の設定を以下のようにします。

そして「0/p」の設定を次のようにします。

 

最後の行の「#include “include/FrontAndBack”」は、少々わかりにくいですが、「0/U」でも「0/p」でも同じ記述を書くため、「include/FrontAndBack」というファイルにまとめています☟。

このように同じ記述や初期設定のファイルなどは、別ファイルにまとめて「#include」でファイルを読み込む方がまとまりが良くなるためにこのようにしています。
(チュートリアルの設定がはじめからこのようになっていました)

乱流モデルの設定(層流モデルとして扱う)

 

今回は、乱流モデルは扱わないため層流の設定にします。

【作業内容】

  1. 「simulationType」を「laminar」とします。
    laminarは層流という意味です。

 

「constant/turbulenceProperties

このようにすると層流モデルとして扱われますので、物理量に「U」と「p」以外に設定するものはありません。

計算の制御

 

【作業内容】

  1. endTime100;
  2. functionsに「#includeFunc “residuals”」を設定する

 

「system/controlDict

 

  • 今回は定常解析になるので、「endTime1000;」とすることは、最大で1000サイクル計算させるという意味になります。
  • 「#includeFunc “residuals”」は残差を出力するための設定です。

 

残差を確認するためのファイルを用意

 

流体解析においては残差は必ず確認した方が良いでしょうね。
全然収束していないのにサイクル数が少なすぎて解析が終了してしまうこともあります。

【作業内容】

  1. 「/opt/openfoam6/etc/caseDicts/postprocessing/numerical」から「residuals」ファイルを、自身の作業ディレクトリの「system」の中にコピーする。
    ※「system/controlDict」ファイルの「#includeFunc “residuals”」でこのファイルを読み込んでいます。
  2. 「residuals」ファイルを編集。
    Uとpの残差を出力するようにする。

 

「system/residuals

 

以上で、解析条件の設定が終わりました。

では、計算実行してみしょう(^^)/

計算実行

 

ターミナル上で、自身作業ディレクトリ上で以下のコマンドにより「simpleFoam」の解析が実行されます。

計算が実行されると以下のように、なにやら記述が出て・・・・「Time=1000(1000サイクル)」で終了します。

計算が終了したら「End」で返ってきます。

するとフォルダの中身は次のようになっています。

「0」「100」・・・・・「1000」というフォルダができています。

これが100サイクルごとの結果ファイルとなります。

結果の可視化

 

結果の可視化にはparaviewを使います。
ターミナルで「paraFoam」と打って、paraviewを起動します!

☟ターミナルで打つとこんな感じ・・・

 

残差を確認

 

残差の確認には、「postProcessing/residuals/0/residuals.dat」にあるdatファイルをgnuplotで出力してあげればよいです。

「datファイル」は普通の空欄区切りのデータなので、gnuplotでグラフ化すれば良いのですが、以下のようなコマンドを打つことですべてのデータをグラフ化してくれます。
※ちなみに、オプション「-l」は縦軸をlogスケールにするという意味です。

以下のように残差の時刻歴が出てきます。やけに振動していますね(笑)

あんまり、残差も小さくない値で収束しながら振動しています・・・・いいんでしょうかこれ(笑)

 

乱流モデル(k-ωSST)

 

では、次に乱流モデルを使って流体解析を行います。

乱流モデルは、流れに応じて様々なモデルが提案されていますが、今回使ってみる乱流モデルは「k-ωSST」です。

k-ωSSTの特徴

「自由流れでの乱流モデル化に強いk-εモデル」「圧力の逆勾配や乖離を伴う境界層流れのモデル化に強いk-ωモデル」とのハイブリッドな乱流モデルです。

要するに、k-εモデルとk-ωモデルの良いところだけを上手く使うモデルってことです。

☟乱流モデルに関しては、以下の標準的な参考書で勉強しておくと良いでしょう。

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

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

梶島 岳夫
4,070円(09/21 00:17時点)
発売日: 2017/01/27
Amazonの情報を掲載しています

境界条件

 

先ほどの層流モデルでの境界条件は「U」と「p」だけでしたが、今回は乱流モデルとしてk-ωSSTを使ってみますので、

  • k:乱流エネルギー
    \(k=\frac{3}{2}\big(|\boldsymbol{U_in}|I\big)^2\)
    \(I\):乱流強度
    ※自由乱流の場合はI=0.05(5%の強さの乱れ)が用いられます。
  • omega:比散逸率
    \(\omega=\frac{\sqrt{k}}{C^{1/4}_{\nu}L}\)
    \(C^{1/4}_{\nu}=0.09\)
    \(L\):混合長
  • nut:乱流粘性係数
    \(\nu_{T}=\frac{k}{\omega}\)

の設定が追加で必要になります。

全体の設定をまとめておくと以下のようになります。

乱流モデルの設定に関しては、公式のページや日本語でまとまっているサイトを参考にするとよいでしょう。

 

「0/k」の設定を次のようにします。

「0/omega」の設定を次のようにします。

「0/nut」の設定を次のようにします。

 

流入境界条件に付いて簡単な解説を加えておきます。

  • k:乱流エネルギー
    \(k=\frac{3}{2}\big(|\boldsymbol{U_in}|I\big)^2\)
    \(I\):乱流強度
    ※自由乱流の場合はI=0.05(5%の強さの乱れ)が用いられます。
  • omega:比散逸率
    \(\omega=\frac{\sqrt{k}}{C^{1/4}_{\nu}L}\)
    \(C^{1/4}_{\nu}=0.09\)
    \(L\):混合長
  • nut:乱流粘性係数
    \(\nu_{T}=\frac{k}{\omega}\)

なので、

☟「0/k」:乱流強度\(I=0.05\)

☟「0/omega」:混合長\(L=0.005\)

☟「0/nut」:\(\nu_t=k/\omega\)の計算から求まる

 

※ちなみに「wall」という名前の境界面は壁関数を使っています。

 

乱流モデルの設定

 

今回は、乱流モデルは扱わないため層流の設定にします。

【作業内容】

  1. 「simulationType」を「laminar」とします。
    laminarは層流という意味です。

 

「constant/turbulenceProperties

このようにするとk-ωSSTの乱流モデルモデルとして扱われますので、物理量の設定として「0」というフォルダの中には、

  • k:乱流エネルギー
  • omega:比散逸率
  • nut:乱流粘性係数

が必要になるというわけです。

 

以上で、解析条件の設定が終わりました。

では、計算実行してみしょう(^^)/

計算実行

 

ターミナル上で、自身作業ディレクトリ上で以下のコマンドにより「simpleFoam」の解析が実行されます。

計算が実行されると以下のように、なにやら記述が出て・・・・「Time=1000(1000サイクル)」で終了します。

計算が終了したら「End」で返ってきます。

するとフォルダの中身は次のようになっています。

「0」「100」・・・・・「1000」というフォルダができています。

これが100サイクルごとの結果ファイルとなります。

結果の可視化

 

結果の可視化にはparaviewを使います。
ターミナルで「paraFoam」と打って、paraviewを起動します!

☟ターミナルで打つとこんな感じ・・・

 

残差を確認

 

残差の確認には、「postProcessing/residuals/0/residuals.dat」にあるdatファイルをgnuplotで出力してあげればよいです。

「datファイル」は普通の空欄区切りのデータなので、gnuplotでグラフ化すれば良いのですが、以下のようなコマンドを打つことですべてのデータをグラフ化してくれます。
※ちなみに、オプション「-l」は縦軸をlogスケールにするという意味です。

以下のように残差の時刻歴が出てきます。

乱流モデルを使わなかった場合と比較すると残差が小さな値で収束していますね。

流体解析の実務経験がないため、残差としての考え方があまりわかっていません_(._.)_勉強します。。。

☟解析結果のファイルはこちらからどうぞ!
motorBike_test10m-s_k-omegaSST

あまり良いモデルとはいいがたいので、改良してみてほしいです(笑)

まとめ

 

ひとまず、エラーなくお金もかけずに流体解析を自宅のPCのみで実現できました(^^)/

前回からのシリーズものになっているので、是非☟こちらの記事もご参考ください。

前回の記事はこちら

 

おすすめ参考図書

 

☟こちらは、OpenFOAMの日本語書籍が無い中唯一わかりやすい参考書だと思います。
しかし、少し古いバージョンでの解説になっているため、最新バージョンとは設定の方法が変わっていたりして混乱する可能性があります。
それについては書籍のホープページにより随時アップデートをしているようなので、安心して購入しても良いと思います。

OpenFOAMによる熱移動と流れの数値解析

OpenFOAMによる熱移動と流れの数値解析

3,520円(09/20 17:41時点)
発売日: 2016/06/17
Amazonの情報を掲載しています

 

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

OpenFOAMプログラミング

OpenFOAMプログラミング

Mari´c,Tomislav, H¨opken,Jens, Mooney,Kyle
8,250円(09/20 15:59時点)
発売日: 2017/12/19
Amazonの情報を掲載しています

 

☟本書で出てきた乱流モデルに関しては、こちらの参考書を推薦図書として挙げておきます。
乱流モデルについて理論面からの解説もわかりやすく、はじめて読む人も十分理解できる標準的な参考書だと思います。

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

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

梶島 岳夫
4,070円(09/21 00:17時点)
発売日: 2017/01/27
Amazonの情報を掲載しています

 

☟以下に、もっと初心者向けの同人誌を紹介しておきます。

初心者は「ってか、まずどうやってOpenFOAMをインストールするの?」というところからつまずきがちです。

そんな時は、以下の書籍をおすすめします。

OpenFOAMお勧め書籍

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

 

もっと易しい内容でOpenFOAMを体験したい方向け

 

OpenFOAMにはこれといったGUIが用意されているわけではないので、基本的にテキストベースで編集する必要があります。
しかし、無料で使えるOpenFOAM用のGUIを作ってくれている人もいるので、それを使わない手はないと思います。

そこで、以下の記事に初心者でも使いやすいXsimという無料のツールを作っている方がいるので使わせてもらい、記事にまとめてみました。

 

カマキリ

では、自宅PCで流体解析ライフをお楽しみください_(._.)_

【プロフィール】

カマキリ
(^^)

大学の専攻は物性理論で、Fortranを使って数値計算をしていました。
CAEを用いた流体解析は興味がありOpenFOAMを使って勉強しています。

プロフィール記事はこちら

 

大学学部レベルの物理の解説をします 大学初学者で物理にお困りの方にわかりやすく解説します。

このブログでは主に大学以上の物理を勉強して記事にわかりやすくまとめていきます。

  • ・解析力学
  • ・流体力学
  • ・熱力学
  • ・量子統計
  • ・CAE解析(流体解析)
  • note
    noteで内容は主に「プログラミング言語」の勉強の進捗を日々書いています。また、「現在勉強中の内容」「日々思ったこと」も日記代わりに書き記しています。
  • youtube
    youtubeではオープンソースの流体解析、構造解析、1DCAEの操作方法などを動画にしています。
    (音声はありません_(._.)_)
  • Qiita
    Qiitaではプログラミング言語の基本的な内容をまとめています。
関連記事もどうぞ