5-1-3. 解析ソルバーの変更方法
前項では、DEXCS標準チュートリアルにおける解析対象モデルを球に変更したが、ソルバーは定常計算であった。Re数を変えた計算を実施すればおわかりと思うが、Re数によっては、ある程度収束はするものの初期残渣が振動して定常解とはならないような状況が生まれる。
現実の流れ場においても、球体の後流では剥離に起因して渦が交番的に生じたりして、定常解とは成り得ない。そこで本項では、変更した解析形状モデルを用いて、非定常計算することを試みる。
OpenFOAMの場合、非定常計算するには、ソルバーを変更する必要がある。具体的には、systemフォルダ下のcontrolDict中で、
application simpleFoam;
の行があり、このsimpleFoamを変更してやれば良く、ここでは、pimpleFoamという非圧縮で乱流計算のできるソルバーを使う事にする。
問題はそれに伴って、constantフォルダ下の物性値ファイルや、systemフォルダ下の計算制御ファイルも変更したソルバー用に適合する必要のある点である。これらのパラメタを熟知した人にとっては、さほど困難な作業ではないかもしれないが、独学の初心者がこの壁を乗り越えるのは到底無理である。
しかし、2-4.OpenFOAMの実践的活用法で述べたように、OpenFOAMには非常にたくさんの標準チュートリアルケースが存在し、これらを雛形にしてメッシュを入れ替えてやれば、とりあえず計算してみるというアプローチが出来る。
とはいえ、OpenFOAMの設定ファイルを直接編集する方法では、とりあえず計算が動くまでに何回もの面倒な作業が必要になる。新DEXCSランチャーでは、OpenFOAMの初級・中級者向けに、こういう使い方を想定したパラメタ適合において、簡単にGUIで使用できる出来る仕組みを用意した。
まずは、形状モデルであるが、これは前項で作成したFreeCADモデルをそのまま使う事にする。作成したFreeCADモデルをダブルクリックして開いたら、DEXCSツールバーの最上段のアイコン「新規にcaseを作成、又はsolverやmeshを入れ替え」をクリックしよう。
「新しいcaseの作成」というGUIメニュー画面が現れる(図5-1-3-2)。因みに、この画面も、treeFoamのサブセットをそのまま使用させて頂いている。
3つのタグがあって、初めて起動では「newCaseの作成」になっているはずである。source(コピー元)もtutorialsが選択されている事を確認して、①「case取得…」のボタンを押してみよう(図5-1-3-3)。
新たに「newCaseの作成」という画面が現れて、OpenFOAMの標準チュートリアルケースを選択できる。「2-3.OpenFoamの実践的活用法」で述べたように、標準チュートリアルケースは全部で約350ケースもあるので、これを区分(ジャンル)、solver毎に分類して、見易くなっている。
ここでは、②「非圧縮性流れ」③「pimpleFoam」④「RAS/pitzDaily」と選択して、⑤「OK」ボタンを押す。本項の冒頭にて、ソルバーをpimpleFoamに変更するとしたので、②③までは良しとして、④の選択は初心者には難しいかもしれない。ここは公開情報なり、「5-3.標準チュートリアルケースの調べ方」なりで事前に予め雛形としたいケース名が判っているという前提での説明である。
なお、①「case選択…」において、「tutorials」を対象にするのでなく、「その他case」を対象にして、ケースファイルを直接選択することも可能である。
チュートリアルケースの選択が完了すると、「新しいcaseの作成」メニュー画面に戻るので、次に作成場所と名前を決める。
「作成場所」がデフォルト(解析case内)では、紛らわしいので、ここでは②Desktopを選択している。また、case名も、デフォルトはチュートリアルケースの名前をそのまま使うので、これも判りやすい名前(ここではspherePimple)に④変更する。以下、⑤「コピー開始」ボタンを押せば作成完了のダイヤログが現れ、⑥「OK」ボタンを押す。再度メニュー画面に戻るので、⑦「閉じる」ボタンを押して完了である。デスクトップ上に、spherePimpleというフォルダ(ケースファイル)が出来ているはずである。
ケースファイルが出来ているのを確認したら、次はメッシュ作成である。FreeCADの起動画面に戻って、アイコン「cfMesh用設定ファイルを作成します」をクリックしよう。
ここで、ケースファイルの在所に着目されたい。本FreeCADモデルは前項で作成したものをそのまま使っているので、ケースファイルの在所も前項で使ったものになっているのは当然である。しかし、本項では新しくケースファイルを作成したのであるから、新しいケースファイルでメッシュ作成する必要がある。そこで「case」ボタンを押せば、フォルダの選択画面が現れるので、②前項で実施したケースフォルダ(sphereInWindTunnel)を選択、③「開く」ボタンを押せば、変更確認ダイヤログが現れるので「OK」ボタンを押して変更完了である。
以下、前項でやったのと同様にメッシュ作成に進んでも良いのであるが、ここでは別の方法でやってみる。一旦、「FreeCADモデルによるcfMeshパラメタ設定」画面を終了しておこう。
再度、FreeCAD画面に戻るので、今度はDEXCSツールバーの上から2番目のアイコン「解析ケースファイルの確認」をクリックしよう。以下のダイヤログが現れて、先ほど実施した内容を確認できるはずだ。
「OK」ボタンを押してダイヤログを閉じて、今度は再度DEXCSツールバーの最上段のアイコン「新規にcaseを作成、又はsolverやmeshを入れ替え」をクリックしよう。
再度「新しいcaseの作成」メニュー画面が現れるが、ここでは①「meshの入れ替え」タグをクリックしてmeshだけを入れ替える方法について説明する。立ち上げた状態ではコピー元とコピー先が同じcase名になっているので、コピー元が前項で作成したケースファイル(sphereInWindTunnel)コピー先が本項のケースファイル名(spherePimple)になるよう、②「case変更」ボタンを押して、ケースファイルを③選択、④「決定」ボタンを押す(図5-1-3-8)。
コピー元と、コピー先のcase名が正しく指定されているのを確認できたら、次はpolyMesh(メッシュデータが収納されているフォルダ)場所を指定する。コピー元にはメッシュが存在するので、constant/polyMeshが選択欄に表示されるので①これを選択、コピー先にはまだメッシュが存在しないので、フォルダ名だけがリストアップされる。メッシュはconstantフォルダ下に収納するのが決まりなので、②constantを選択。③「コピー開始」ボタンを押す。実行可否の確認ダイヤログで④「OK」ボタンを押す。ついで実行完了ダイヤログが現れ⑤「OK」ボタンを押す。「新しいcaseの作成」メニュー画面に戻るので、⑥「閉じる」ボタンを押して完了である(図5-1-3-9)。
以下、
- 境界条件の適合
- 流体特性パラメタ
- 計算制御パラメタ
- 計算実行
- 計算後処理
と実施していくことになるが、基本的なやり方は前項でやったのと同じである。ただ境界条件の適合が少々複雑な作業になるので、ここだけは詳しく、その他は要点のみの説明とさせて頂く。
境界条件の適合
まずは、まずは、DEXCSツールバーの①アイコン「gridEditorの起動」をクリックしてみよう。
先のチュートリアルで実施した時(5-1-2-2)では、警告メッセージが現れたが、ここではすんなり起動できたはずである。
また、先のチュートリアルでは、空欄部分があったが、全てのカラムで境界条件が定義されている。
因みに、本チュートリアルでメッシュ作成をやり直す事も出来たと記したが、ここでの「入れ替え」でなく、「やり直す方法」で実施していたとすると、警告が出て、空白部分が出来たはずである。
但し、「全てのカラムで境界条件が定義されている」と記したが、このままで良いかは疑問であろう。とくに、解析対象(sphere)に注目されたい。全てのField変数に対して、
type zeroGradient;
となっている。これは、メッシュ入れ替えの際の実行可否ダイヤログ(図5-1-6-9、④)において、自動的に付加されたものである。
したがって、やはりこれらを適合させる必要がある。適合の方法は先のチュートリアルと同じで、参照ケースのgridEditorを開いてコピーすれば良いのであるが、先のチュートリアルほど簡単ではないというのが本チュートリアルである。
まずは参照ケースを開いてみよう。開き方は先のチュートリアル(図5-1-2-10)でやったのとほとんど同じである。
異なる点は、参照ケースとして、③先のチュートリアル(モデル更新)ケースを選択しているが、これは必然の流れであろう。
何はともあれ、ここで開いた2つのgridEditor画面を見比べてみれば、先のチュートリルとの違いがわかるであろう。Field変数が異なるので、
- 行単位でのコピーは出来ないという点
- 先のチュートリアルでは存在しなかったField変数(この場合はnuTilda)をどうするか?
という2点である。
前者については、セルあるいは、複数セル毎に選択して、マウス右クリック⇒「cellコピー」、コピー先のセルを選択してマウス右クリック⇒「cell貼付け」と、少々手間が増えるのは致し方ない。
なお、使用しないField変数がある場合、不要なField変数(本例ではomega)列の任意のセルを選択してマウス右クリック⇒「選択したFieldを非表示」にて表示しないこともできるので、そうすればもう少し作業はやりやすくなるだろう。
後者については、まずは形態的に決められる部分がある。つまり、
- 「inlet」と「outlet」については、標準チュートリアルで使っていた境界条件なので、多分このままで良いであろう
- 「wall」については、他の変数で全て(type slip;) としているので、ここもそのまま(type slip;)で良いであろう
といった具合で考えれば、残ったものは「sphere」だけである。
本例ではnuTildaであるが、それ以外にも見慣れない変数が出てきた場合には勉強してもらうしかない面もあるが、Field変数の物理的意味を理解する事が肝要である。nuTilda というのは、乱流に起因する動粘性係数の事で、乱流エネルギー(k)と乱流散逸率(epsillon)を使って算出される値である事を考えれば、特別な境界条件でなく、(type zeroGradient;)のままで良いだろうと考えて、やってみれば良い。
なお、これも形態的な調べ方であるが、解析対象「sphere」が「静止壁」であることを考えれば、「nuTilda」の「静止壁」における境界条件はどうなっているのか?という調べ方がある。これは標準チュートリアルケースを調べれば見つかる場合が多い。特に本例の場合は容易で、雛形としたpitzDaily/0/nuTilda 中に、
upperWall
{
type zeroGradient;
}
を見つけ出す事ができる。
以上の推察により適合したgridEditor画面を以下に示しておく。
なお、本例の場合、「inlet」と「outlet」については、何も変更する必要が無かった。これは雛形のチュートリアルケース(pittzDaily)において、本ケースと同じパッチ名を有していた為であり、そういう面も考慮して雛形を選定したということである。
計算制御パラメタの適合
計算制御パラメタについても、これまでと同様、DEXCSツールバーのアイコン①「Dict(system)の編集」をクリックしてsystemフォルダ下のファイルを一括編集しよう(図5-1-3-16.)。
一括編集と記したが、systemフォルダ下にあるのは4つのファイルだけで、このうちblockMeshDictは不要であり、適合が必要なものはcontrolDictだけであり、必要な変更箇所を下図に示す。
先のチュートリアルまでは、定常計算で、time(時間)はステップ数、あるいは繰り返し数と読み替えれば良いとしてきたが、本チュートリアルは非定常計算なので、実時間と考えて良い。endTime(計算終了時間)がデフォルトでは0.3(s)となっているが、これだと流入速度が10(m/s)なので、3(m)しか進まない。風洞の長さは8(m)であったので、このままではあまりに短すぎる。そこでここでは5(s)とした。writeIntervalは、途中計算結果の出力間隔で、5(s)に対して、0.01(s)のままだと、500もの計算結果を残すことになり、ファイル容量、後処理の面で不安があり、0.1(s)とした。
また、このままでは、検証データとなる空力係数が計算できないので、最下行に、以下を追加するとともに、実際にsytemフォルダ下にforceCoeffsのファイルを収納する。
functions
{
#include "forceCoeffs"
}
forceCoeffsのファイルは、先のチュートリアルで使ったものをそのまま使えるので、ファイルマネージャを使ってコピーすれば良い。
以下に、Re=1000, 層流計算として実行した際の、流体特性の設定例、計算中の初期残渣推移状況、空力係数(抗力, Cd)の推移状況、流れ場可視化例、について図示しておく。
初期残渣、抗力係数が時間経過とともに振動し定常解とはならない。その理由は、流れ場が見ると、球体の後流で交番的な剥離が生じているからと理解できるはずである。
もちろん計算できたからといって、そこで解析が完了でないのは云うまでも無い事だ。たとえば、本例では、抗力係数の値が、文献等で知られる値(約0.5)に比べて、少し(10%強)大き目の値になってしまっている。その理由を考え、モデルやパラメタを変えて計算し直してみる事を、是非ともおすすめしたい。