この記事は流体解析のオープンソースソフトウェアであるNek5000をとりあえずインストールして使ってみるための備忘録として書かれています.Linux or UNIX環境にインストールします.
Nek5000とは
Nek5000はアメリカのアルゴンヌ国立研究所で開発されているオープンソースの流体解析ソフトウェアである.解析できる流れ場は熱・物質移動を含む非圧縮性流れであり,スペクトル要素法(Spectral Element Method, SEM)を用いて離散化された基礎方程式を解く.スペクトル要素法であるので,用いることができる計算格子は四角形(二次元),六面体(三次元)のマルチブロック構造格子に限定される.ソースコードはカーネル部分がFortranで書かれており,一部Cも使われている.高精度かつMPIによる超並列計算が可能であるため(ゴードンベル賞を受賞している),主に欧米での研究用途で使われている.
ダウンロード
Nek5000の公式ページの"DOWNLOAD"をクリックすると,最新版のv17.0.0-beta2(2017年10月現在)をダウンロードできる.適当なところに移動orコピーして解凍する.
$ tar zxvf nek5000_v17.0.0-beta2.tar.gz
Gitが使える場合はNek5000のGithubからクローンできる.
$ git clone https://github.com/Nek5000/Nek5000.git -b master
$ git clone https://github.com/Nek5000/NekExamples.git -b master
$ git clone https://github.com/Nek5000/NekDoc.git -b master
$ mv NekExamples ./Nek5000/examples
$ mv NekDoc ./Nek5000/doc
ダウンロードしたものとGithubからクローンしたものは中身が異なるので注意が必要である.特にダウンロードしたものにはdoc
が含まれていない(ディレクトリがあるが中身は空).
インストール
ディレクトリ構成
インストールディレクトリNek5000
の構成は以下のとおりである.インストール先をHOME
ディレクトリと仮定する.
$ cd ~/Nek5000
$ tree -L 1
.
├── 3rd_party
├── bin
├── core
├── doc
├── examples
├── LICENSE
├── README.md
├── RELEASE.md
├── run
├── short_tests
└── tools
8 directories, 3 files
システム要件
ソースコードがFortran,Cで書かれているので,対応するコンパイラが必要である.デフォルトのビルドスクリプトではgcc,gfortranが指定されている.もちろん,その他のコンパイラ(インテルコンパイラなど)でもビルド可能である.並列計算を行う場合には,MPIの環境が必要である.
計算メッシュ作成に関しては簡単なメッシャーが用意されているが,使い慣れたメッシャーを利用して作成したメッシュを変換しても良い.後処理の可視化に関しては,VisItとParaViewのフォーマットで可視化用データを書き出すことができ,VisItに関しては可視化用データ出力を介さずに直接VisItを起動して可視化ができるコマンドpostx
が用意されている.VisItまたはParaViewは別途インストールしておく必要がある.
ビルド
外部ライブラリをほとんど必要としないので,
- 環境変数を設定する(といっても,PATHを通すだけ)
- 共通の
tools
をコンパイルする.
を最初に行うだけである.すなわち,端末で,
$ export PATH=$HOME/Nek5000/bin:$PATH
$ cd ~/Nek5000/tools
$ maketools all
とする.実際の解析を行う際には,例題があるので希望のもの(自分の解析対象に近いもの)をコピーしてコンパイルし,生成されたオブジェクトモジュールを実行するだけである.境界条件,初期条件は例題ケースに含まれている(ケース名).f
を編集してユーザ定義のものに簡単に変更できる.
First tutorial run (eddyケース)
比較的軽い計算例題がshort_tests
ディレクトリにいくつか用意されている.ユーザガイドにはeddyケースが最初のチュートリアルとして掲載されているので,実行してみる.
$ cd ~/Nek5000/run
$ cp -r ~/Nek5000/short_tests/eddy ./
$ cd eddy
$ makenek eddy_uv
makenek
は実行モジュールをmakeするためのスクリプトファイルで,スクリプトを実行する際には引数としてケース名をしている.今回のeddyケースでは,eddy_uv.rea
やeddy_uv.usr
といった設定ファイルが含まれており,拡張子を取ったeddy_uv
が指定するケース名である.無事にコンパイルが終了すると,Nek5000
という実行モジュールができる.
解析を流す前に,ディレクトリにはじめから用意されているREADME
を読むとどのような解析例題なのかがわかる.
$ less README
README
の最後に,以下のように参考文献が示されているので,論文を入手でき興味がある場合はよく読むとなぜこのような例題計算をするのかがわかる.
[1] Owen Walsh, "Eddy Solutions of the Navier-Stokes Equations," in The Navier-Stokes Equations II - Theory and Numerical Methods, Proceedings, Oberwolfach 1991, J. G. Heywood, K. Masuda, R. Rautmann, S. A. Solonnikov, Eds., Springer-Verlag, pp. 306--309 (1992).
参考文献を読まなくても,CFDをやったことがある人ならば,README
を読むとコードのVerificationによく使うTaylor-Green Vortexの問題であることがわかる.
だいたいどのような計算をしているのかがわかったので,解析を実行してみる.
$ genmap
ケース名を聞かれるので,eddy_uv
を入力し,プロンプトが返ってこなくなるのでリターンキーを押す.genmap
は簡単な要素分割(メッシュ生成)を行うコマンドである.そして計算を実行する.
$ nek eddy_uv
nek
は計算を実行するためのスクリプトで,逐次計算をforegroundで行う.計算実行のためのスクリプトはそのほかに,
-
nekb
: 逐次計算, background -
nekmpi
: 並列計算, foreground -
nekbmpi
: 並列計算, background -
neknek
: 重なり有ったメッシュ要素を持つ2ケース(調査していないので詳細は不明)
などがある.計算が完了したら,VisItやParaViewで可視化ができる.ユーザガイドにあるように,VisItを利用する場合は,
$ postx
または
$ visnek eddy_uv
$ visit -o eddy_uv.nek5000
とする.前者はVisItが直接起動してカスタマイズされたインターフェース(可視化用メニュー)が表示されるのに対し,後者ではVisItで読み込み可能なファイル形式が作成されたのちにVisItで起動・読み込みを行う.VisItは記事を書いている私が不慣れなので,使い方については多く説明ができない.可視化が終了したらVisItを終了する.
Second tutorial run (turbChannelケース)
Nek5000は大規模な乱流解析を並列計算で行うのがメインなので,次に乱流DNS・LESでポピュラーなチャネル流れ(平行平板間流れ)の解析を行ってみる.examples
ディレクトリに,turbChannel
があるのでそれを実行してみる.
$ cd ~/Nek5000/run
$ cp -r ../examples/turbChannel ./
$ cd turbChannel
$ makenek turbChannel
$ genmap # ケース名を聞かれたらturbChannelを入力する
$ nekbmpi turbChannel 4
$ tail -f logfile
nekbmpi
の一つめの引数はケース名,二つめの引数はランク(並列数)である.eddyケースと違い,三次元の乱流解析なのでそれなりに計算時間がかかる.nekbmpi
で並列計算をbackgroundで実行しているが,クラスタ計算機やスパコンなのバッチジョブキューイングシステムではこのb
がついたコマンドがうまく動作しないので,PBSなどのジョブスクリプトを書いてジョブ投入する際はb
がついてないnekmpi
を利用する.計算が終了したら,適宜VisItで可視化を行う.
まとめ
今回,Nek5000をダウンロードしてインストールし,とりあえず簡単なチュートリアル計算を行ってみた.インストールは難しくなく,Fortranで書かれた流体解析コードを使ったことがある方ならば比較的簡単に解析が実行できると思われる.複雑な幾何形状を持つ流れ場は難しいが,ERCOFTACのような乱流解析データベースに載っているようなチュートリアルケースはすでに用意されているので(要素分割とパラメータ設定は自分で検討しないといけないが),大規模解析を行える流体解析ソフトウェア(コード)としてはかなり良さそうである.
C