Athena++のチュートリアルを実行する

はじめに

以前のポストで、Athena++をインストールして最初のチュートリアル「1D Hydorodynamics and MHD」を実行した内容をまとめた。本ポストはその続きで、ビジュアル化などを行うチュートリアルを実行したので、その内容をまとめた。

情報源

  1. Tutorial Athena++公式ページのチュートリアル。今回は「2. 2D MHD」と「3. Modifying the Input File」を実行した。
  2. Athena++チュートリアル 富田先生が管理されている日本語のページ。
  3. Installing and Starting VisIt ビジュアル化ソフト・VisItのインストールページ。自分がインストールしたバージョンは3.3.3。
  4. VisIt このページの「Download Now」の「latest release」とのリンク先から「Series 3.3(latest)」をダウンロードした。
  5. 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.」の記載に沿って実行した。

Orszag -Tang500

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でビジュアル化した画像は次のとおり。

Orszag-Tang_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に示された時間刻み数の比率を掛け合わせた数値である。

実測値と理論値とは良く一致していると思われる。