はじめに
以前のポストで、Athena++をインストールして最初のチュートリアル「1D Hydorodynamics and MHD」を実行した内容をまとめた。本ポストはその続きで、ビジュアル化などを行うチュートリアルを実行したので、その内容をまとめた。
情報源
- Tutorial Athena++公式ページのチュートリアル。今回は「2. 2D MHD」と「3. Modifying the Input File」を実行した。
- Athena++チュートリアル 富田先生が管理されている日本語のページ。
- Installing and Starting VisIt ビジュアル化ソフト・VisItのインストールページ。自分がインストールしたバージョンは3.3.3。
- VisIt このページの「Download Now」の「latest release」とのリンク先から「Series 3.3(latest)」をダウンロードした。
- Orszag-Tang渦問題 チュートリアル「2D MHD」に関して、物理面が記載されているページ。千葉大では、CANS+という磁気流体シュミレーションコードを公開している。
実行内容
ビジュアル化ソフトvisItをインストール
今後使用するvisItというビジュアル化ソフトをインストールする。
Ubuntへのインストール
Ubuntuへのインストールは、情報源4.の通り、Series 3.3の表のUbuntu20のtgzをダウンロードする。
以降の操作は、情報源3.の「1.2. Installing on Linux」に従った。
Macへのインストール
Macへのインストールは、Series 3.3の表のMac 12.6のdmgをダウンロードし、dmgを開いてApplicationsにコピーすれば、インストールできる。
2D Orszag Tang Vortex
コード生成とmake
先ずは、前回のポストで作成したdockerコンテナを起動する。以下は、dockerコンテナでの操作。コンテナ内の作業用のディレクトリについても、前回のポストと同じ。
# python configure.py --prob orszag_tang -b --flux hlld
Your Athena++ distribution has now been configured with the following options:
Problem generator: orszag_tang
Coordinate system: cartesian
Equation of state: adiabatic
Riemann solver: hlld
Magnetic fields: ON
Number of scalars: 0
Number of chemical species: 0
Special relativity: OFF
General relativity: OFF
Radiative Transfer: OFF
Implicit Radiation: OFF
Cosmic Ray Transport: OFF
Frame transformations: OFF
Self-Gravity: OFF
Super-Time-Stepping: OFF
Chemistry: OFF
KIDA rates: OFF
ChemRadiation: OFF
chem_ode_solver: OFF
Debug flags: OFF
Code coverage flags: OFF
Linker flags:
Floating-point precision: double
Number of ghost cells: 2
MPI parallelism: OFF
OpenMP parallelism: OFF
FFT: OFF
HDF5 output: OFF
Compiler: g++
Compilation command: g++ -O3 -std=c++11
# make clean
# make
作業用ディレクトリ
コンテナ内の作業用のディレクトリについても、前回のポストと同じである。
# pwd
/workdir/kenji/t2
# cp ../../athena/inputs/mhd/athinput.orszag-tang .
# ls -l
total 4
-rw-r--r-- 1 root root 1745 Feb 8 07:31 athinput.orszag-tang
実行
# ../../athena/bin/athena -i athinput.orszag-tang
Setup complete, entering main loop...
cycle=0 time=0.0000000000000000e+00 dt=3.6118630426454975e-04
cycle=1 time=3.6118630426454975e-04 dt=3.6109645019044242e-04
・・・(略)・・・
cycle=3562 time=9.9978638766687489e-01 dt=2.1361233312511274e-04
cycle=3563 time=1.0000000000000000e+00 dt=2.6597077446314599e-04
Terminating on time limit
time=1.0000000000000000e+00 cycle=3563
tlim=1.0000000000000000e+00 nlim=-1
zone-cycles = 890750000
cpu time used = 5.8290348500000005e+02
zone-cycles/cpu_second = 1.5281260498897170e+06
ビジュアル化
Macからビジュアル化する場合は、上記で説明した作業用ディレクトリをMacからNFSマウントすることで、生成されたvtkファイルを参照できるようにした。
ビジュアル化の手順は、情報源1.の「Visualize and analyze the results.」の記載に沿って実行した。
Inputファイル(パラメータファイル)の変更
解像度を変更
情報源1.および情報源2.の3番目のチュートリアルでは、先ずグリッドの解像度を200から400に変更する例となっているが、自分がインストールしたAthena++に含まれている実際のパラメータファイルでは、500となっていた。自分は、解像度を下げて200にして実行した。
また、チュートリアルでは、“meshブロック"のnx1、nx2のみを変更すると、次のようなエラーが発生した。
# ../../athena/bin/athena -i athinput.orszag-tang_low
### FATAL ERROR in Mesh constructor
the Mesh must be evenly divisible by the MeshBlock
“meshblock"ブロックのnx1、nx2も変更する必要があることが分かった。
出力項目を追加
Athen++では、基本的な変数(primitive variables、密度/速度/圧力/磁場等)だけでなく、不変量な変数(conservative variables、質量密度/運動量等)を出力できる。
そのためには、‘‘output"ブロックに以下を追加する。
<output3>
file_type = vtk # VTK data dump
variable = cons # variables to be output
id = cons # file ID
dt = 0.01 # time increment between outputs
この時、合わせて"output2"ブロックのidも次のように変更すると、出力ファイルのOrszangTnag.block0.out2.?????.vtkがOrszangTnag.block0.prim.?????.vtkに変更される。
<output2>
id = prim # file ID
上記の変更により、OrszagTang.block0.prim.?????.vtkとOrszagTang.block0.cons.?????.vtkが出力される。
解像度と実行速度の関係
デフォルトのグリッド解像度は500だった。上記に述べたように、グリッド解像度を200にした。グリッド解像度を200でビジュアル化した画像は次のとおり。
最初の500の解像度に比べて、荒いのが分かる。
更に500の半分の250との実行時間(cpu time used)を比較すると次の表の通り。
グリッド数 | cpu time use(秒) | cycle | 対500実測値比 | 対500理論値 |
---|---|---|---|---|
500 | 583 | 3563 | - | - |
250 | 70 | 1728 | 8.3 | 8.4←2x2x2.1 |
200 | 36 | 1368 | 16.2 | 16.3←2.5x2.5x2.6 |
上記の表で、「cpu time use」と「cycle」は出力のされた結果である。「対500実測値比」は、「cpu time use」の250、200を1とした場合の500の比率である。理論値は、グリッド数比とcycleに示された時間刻み数の比率を掛け合わせた数値である。
実測値と理論値とは良く一致していると思われる。