journal file を使った CUI での Fluent の実行について
前置き
マニュアルとしては、ANSYS Fluent Text Command List というものがある。あるが、辞書のようにコマンドが羅列されているだけで、実際の書き方がわからない。ひどいことに、Fluent の他のマニュアルを見てもごくごく簡単な例(単なる solve/iterate 100 みたいな)しかない。これはひどい。当然、ググりまくってちょっとずつ調べてみたりするしかない状況。しかしオンラインの情報もあまりない。自分用にメモすると同時に誰かの参考になればと思い、ここに記す。
基本的な事項
- Fluent を開いたときに、右下の方に Console 画面というのがある。このウィンドウをマウスクリックしてキーボードで [Enter] すると、コマンド受付状態になる。実は Fluent のたぶんすべての操作はここから CUI で可能。というかむしろ、 GUI ではできない操作もある*1。この CUI 操作を羅列したスクリプトが journal file と呼ばれる。
- たとえば、スパコンのようにジョブ管理ツールでジョブ投入するときは当然 GUI は使えないので、この journal file の利用が必須となる。
- スクリプトなので、実態はただのテキストファイル。ファイル名はたぶんなんでもいい。
- たとえば journal file を journal.jou というファイル名にした場合、呼び出し方は、コマンドラインから $ fluent 3ddp -g -i journal.jou のようにする。
- Windows の場合、"C:\Users[ユーザ名]\AppData\Local\Temp\WorkbenchJournals" に実は普通に GUI 操作していたときの履歴が journal file として格納されている。じゃあこれを見れば参考になる!…と思うじゃん?実際には「GUI操作」が記録されていることが多すぎて、「ボタンクリック」とかそんなのがたくさんあって、非常にわかりづらい。おそらく参考になる部分はあるのだが、スパコンではGUIモードで起動してないので、コピペでは使えない。結局、マニュアルを見たりコンソールで調べたほうが早い。
Fluent のコンソールモードの使い方
- なぜか Unix/Linux とは違って独特。やめてほしい…。
- なにも入力せず [Enter] すると、今いる階層で可能なコマンドの一覧が表示される。これが ls 相当。
- cd はない。コマンド一覧のうち、末尾にスラッシュ (/) が付いているものはディレクトリのようなものであり、さらに下の階層があるので、それを打ち込むと cd できる(スラッシュは不要)。末尾にスラッシュがないものは、コマンドそのものなので、打ち込むと実行されてしまうので注意。
- 上の階層に戻る cd .. 相当のものは、 q とだけ打ち込めばよい。
- マウスカーソルによる GUI 操作はいつでもできるので、コマンドモードは抜けなくてよい。exit と打ち込むと、Fluent が閉じてしまう。この仕様、かなりうざい。
- tab 補完が効かなくてつらいが、コマンドは途中まで打ち込めば勝手に解釈してくれる。たとえば初期階層で solve でなく sol [Enter] で solve/ の階層に行ける。
- 候補が複数あるときは、tab補完のように「どれ?」と親切にきいてはくれない。勝手にどれかが選ばれる。たとえば初期画面で d [Enter] すると、define/ ではなく display/ に移動する。謎だ。
- ? [Enter] すると help-mode になって、入力したコマンドが実行される代わりにヘルプが表示される。あまりわかりやすくはないが、ないよりはマシか…。help-mode を抜けるのも、やはり q [Enter] でよい。
journal file の文法
- コンソールでやったことの、ルートからコマンドまでをまとめて1行に書く。行頭のスラッシュはおそらくあってもなくてもよいと思われる。
- 行のコメントアウトは行頭にセミコロンを置く。
- 定常計算 (steady) は、 solve/iterate [iteration回数] でよい。
- 非定常計算 (transient) は、 solve/dual-time-iterate [time steps] [iteration回数] とする(参考: https://www.cfd-online.com/Forums/fluent/70908-iterate-command-line.html)。
- 信じがたいことだが、自分の調べた限りでは、この基本的で重要な情報が、マニュアルのどこにも載っていない。コマンド一覧には「dual-time-iterate は非定常計算に使います」とだけある。ハッキリ言ってこのマニュアル作ったやつは無能。
- おそらく、solve/iterate [iteration回数] の次の行に solve/update-physical-time としてもよさそう。その場合、おそらく事前に solve/set/number-of-time-steps [time steps] コマンドで time step数の設定を先にしておく必要がありそう(未検証)。
具体的な手順
これが正しいという確証はないのだが、こんな感じでなんとか実行できている、という手順を示す。
ローカルでの準備
まずはローカルPCで Fluent の計算準備をする。Workbench からやっている場合は、Setup を開いて、色々な設定をして、流れ場の初期化 (initialization) もして、実行直前まで行く。この状態で case file を保存しておけば、あとはほとんど実行するだけ、のはず。
ところで、可視化などのために Run Calculation > Data File Quantities… で Additional Quantities の Select All Shown は選択しておきたいところなのだが、「Data File Quantities… がグレーアウトしてクリックできない」という症状があると思う。これは、Intialization を先に一度しないとクリックできないようになっている、ようだ。
それから、普段、Fluent のケースファイルの実態がどこにあるかなんて気にしていないから見つからない、という事があるかもしれないので、念のためそれを説明する。ケースファイルは、[作業フォルダへのパス][プロジェクト名]_files\dp0\FLU-XXX あたりにあることが多い。より確実には、Workbench で Fluent の Setup を右クリック > Properties を開いて(右の方にペインが展開される)、Directory Name を確認するのがよい。Properties ペインは開きっぱなしにしておけば、右クリックでなく左クリックでよいので楽。
スパコン上での準備
case file名が test.cas, 時刻0でのデータファイル名が test-00000.dat だったとする。スパコン上の作業フォルダには、以下のものを入れておく。
- ジョブ投入のためのシェルスクリプトなど
- journal ファイル
- test.cas.gz
- test-00000.dat.gz
なお、前までは .gz はダメだと思って手動で $ gzip -d していたが、さすがの Fluent も .gz のままで読み込めるようで、圧縮したままでよい。
シェルスクリプトで journal ファイルを呼び出し、そこからケースファイルとデータファイルを呼び出す。スパコン上で initialize するのなら、データファイルはいらないのかもしれないが、その場合上に示したように Data File Quantities も journal からセットしないとダメかも。
journal file の具体例
;; Read case file file/read-case test.cas.gz ; ;; Read data file file/read-data test-00000.dat.gz ; ;; Set dt (s) 不要かも。未検証 solve/set/time-step 0.001 ; ;; Compute [time steps] [iteration steps] solve/dual-time-iterate 2000 20 ; ;; End exit y
*1:バージョンアップとともに減ってきてるかも。