OpenFOAMの一番のハードルは、CUI操作です。商用ソフトでGUI操作に慣れた我々にとってCUI操作は至難の業です。
ここでは、CUI操作のハードルを極力下げるために、ファイルの全体像を理解します。
※ここでは、Linuxなのでファイルをまとめるものをディレクトリと呼びます。Windowsでいうフォルダのことなので、混乱せずに読んでください。
ファイルの全体像
各ケースファイルの中身は全て下記のような構成となっています。ケースファイルとは、例えばダムブレークやスロッシングタンク等の1つのシミュレーションファイルのまとまりのことです。
もしまだ何も解析した例がない場合は、tutorial
ディレクトリ内に非常に多くの例題があります。それを参考に今回の内容を理解してみてください。
ケースファイル直下
ケースファイルの直下には、system
、constant
、timedirectories
があります。
system
は解析に関するパラメータ等が置かれているディレクトリです。ソルバーの機能の変更や時間パラメータ、出力などを設定できます。一度読み込まれると、解析が終了するまで同じ設定を使用します。
constant
は物性値とメッシュ構造が保存されるフォルダです。物性値とメッシュは時々刻々と変化させることもできますので、このディレクトリは各時間ステップで呼び出されることになります。
time directories
は、出力データです。各セルにおける速度や圧力等のデータが格納されます。
systemディレクトリ
systemディレクトリは、解析に関するパラメータ等が置かれます。具体的には、controlDict
、fvSchemes
、fvSolution
、blockMeshDict
の4つのファイルで構成されています。
controlDict
は、主に時間に関する処理を行うファイルです。時間刻み幅や終了時間、ファイルの出力間隔を設定することができます。そして、もう一つ大きな機能があり、それはライブラリを追加できる機能です。controlDict
は毎回呼び出されるので、例えば出力方法を特殊な方法を使用したいだとか、熱に関する特殊な処理を追加したいなどといった場合は、このファイルの末尾にライブラリのインクルードに関する記述を追加することで対応できます。
fvSchemes
はスキームに関する設定ができるファイルです。スキームとは、ナビエ・ストークス方程式を離散化する際にどのような方法で離散化するかを決めた方法になります。ナビエ・ストークス方程式は偏微分方程式なので、そのままでは解けません。連続な点を離散的な点に変換してやる必要があるのですが、方法によって精度や安定性が変わってしまいます。例としては、風上差分や中心差分、TVDスキーム等が使えるようになっています。
離散化に関しては、説明するとかなり話が長くなるので、過去の動画で確認ください。格子法においては、特に移流項をどう離散化するかが重要になります。
fvSolution
は解法を指定できます。格子法ではたくさんの点が相互作用し合うので、行列計算が必須です。ここでは、圧力と速度に対してそれぞれどのような行列の解き方を使用するのかを決めます。共役勾配法やガウスザイデル法など、様々な解法があるので、この中から収束速度と安定性を考えて決定します。
また、残差も指定します。残差とは、次のステップに移動するときの誤差のしきい値のことです。簡単に言うと、どのくらいいい加減に計算するかです。流体解析では、必ず誤差が出ます。このバランス感は難しいですが、初期設定を参考にすると適切な値を選ぶことができるでしょう。
blockMeshDict
はメッシュ作成に関するファイルです。OpenFOAM内でメッシュを作成する際に必要になります。
constantディレクトリ
constantディレクトリは、物性値とメッシュに関するファイルが入っています。具体的にはxProperties
、polyMesh
の2つです。polyMesh
はディレクトリになっています。
xProperties
は速度Uや圧力Pなどの名前の形で格納されています。ここで物性値を設定します。
polyMesh
はディレクトリになっており、この中にメッシュに関するファイルが入っています。メッシュ情報として、各メッシュの点の位置、オーナーセル、ネイバーセル、セルの面、境界の情報が入ります。オーナーセルとネイバーセルはセットになっていて、セル同士の接触を調べるときに使用します。片方をオーナーと呼び、残りをネイバーと呼びます。
time directories
出力ファイルが格納されるディレクトリです。ポスト処理に使うのが主ですが、0番目に関しては、初期条件の意味合いもあります。0番ディレクトリに格納されている速度Uや圧力Pに初期条件を設定します。他にも、混相流の場合は、どこに液相を設定するかを決めることができます。
おわりに
今回はOpenFOAMのファイル構造について説明しました。youtubeのほうでも解説しているので、そちらもどうぞ。
参考:OpenFOAM公式