コンテンツにスキップ

2025年度, AREPO

25/04/14

AREPOの導入と実行メモ

AREPOのビルドと実行までの流れを記録しておく。環境はサーバー上、必要なライブラリは以下の通り。

  • MPI(サーバー標準)
  • GSL(インストール済み)
  • FFTW(インストール済み)
  • HDF5(インストール済み)
  • GMP(未インストールなのでこれだけ対応)
  • hwloc(これは必要?検討中)

GMPのインストール

1. ダウンロード

$ wget https://gmplib.org/download/gmp/gmp-6.3.0.tar.xz

ダウンロードログ(抜粋):

--2025-04-14 12:12:24--  https://gmplib.org/download/gmp/gmp-6.3.0.tar.xz
...
`gmp-6.3.0.tar.xz' へ保存完了 [2094196/2094196]

2. 展開・ビルド・インストール

$ tar -xf gmp-6.3.0.tar.xz
$ cd gmp-6.3.0/

中身確認:

$ ls
AUTHORS  COPYING  INSTALL ...(省略)

ビルドしてインストール:

$ ./configure --prefix=/home/nishihama/local
$ make
$ make install
$ make check

make check は公式で推奨されているので実行。

AREPOのビルド

systypes.make の編集

以下のように makefiles/systypes.make を編集し、末尾に virgo の設定を追記:

ifeq ($(SYSTYPE), "virgo")
  CC       = mpicc
  OPTIMIZE = -std=c11 -O3 -msse3 -g -Wall -m64 -Wno-format-security
  ifeq (NUM_THREADS, $(findstring NUM_THREADS, $(CONFIGVARS)))
    OPTIMIZE += -fopenmp
  else
    OPTIMIZE += -Wno-unknown-pragmas -Wno-unused-function
  endif
  LIB=DIR  = $(HOME)/local
  GSL_INCL = -I$(LIB_DIR)/include
  GSL_LIBS = -L$(LIB_DIR)/lib
  FFTW_INCL= -I$(LIB_DIR)/include
  FFTW_LIBS= -L$(LIB_DIR)/lib
  MPICHLIB =
  HDF5INCL = -DH5_USE_16_API=1 -I$(LIB_DIR)/include
  HDF5LIB  = -lhdf5 -L$(LIB_DIR)/lib
endif

Makefile.systype の作成と設定

$ cp Template-Makefile.systype Makefile.systype

Makefile.systype の末尾に virgo を追加する:

#SYSTYPE="yeti"
#SYSTYPE="LaPalma"
+ SYSTYPE="virgo"

コメントアウトを外すことで先程の virgo の環境設定が読み込まれる。

サンプルセットアップとビルド

シミュレーションを回すためのディレクトリを作成する。

シミュレーション用ディレクトリを作成

$ mkdir ~/test/
$ cp examples/shocktube/shocktube_1d/* ~/test/.

shocktube_1d(リーマン問題)のシンプルな初期条件を使う。

ビルドコマンド

$ make CONFIG=/home/nishihama/test/Config.sh EXEC=/home/nishihama/test/Arepo

ビルドログ(抜粋):

Build configuration:
SYSTYPE: "virgo"
CONFIG: /home/nishihama/test/Config.sh
EXEC: /home/nishihama/test/Arepo

...(中略)...

-o /home/nishihama/test/Arepo

互換性警告が出たが、ビルドは完了。

確認:

$ cd ~/test; ls
Arepo  Config.sh  Riemann.py  check.py  check_parameters.py  create.py  param.txt

しっかりと実行ファイルArepoができている。

初期条件の作成と実行

初期条件 ics.hdf5 の作成

$ python create.py ./

実行後、ics.hdf5 が生成されているはず。

実行(非並列)

並列化する場合は、下のように実行する:

$ mpirun -np 8 ./Arepo param.txt

並列実行しようとすると以下のエラーが出る:

TERMINATE: Code termination on task=0, function initialize_and_create_first_tetra(), file src/voronoi_1d.c, line 56:
1D code works only for 1 CPU

つまり この初期条件は1D用なので並列不可。1CPUで実行すること。

なので単純に下のように実行する:

$ ./Arepo param.txt

小ネタ

Springelが UnknownUnkown とスペルミスしてるのを発見してしまったが……今回はスルーしておこう。

データの確認

$ ls
Arepo      Riemann.py   check.py             create.py  output     param.txt-usedvalues
Config.sh  __pycache__  check_parameters.py  ics.hdf5   param.txt  uses-machines.txt

outputディレクトリができ、その中に結果が出力される。

以下のPythonコードで結果を見てみる。

import numpy as np
import h5py
import matplotlib.pyplot as plt

plt.figure(dpi=400)
for i in range(6):
    with h5py.File(f'./snap_{i:03}.hdf5', 'r') as f:
        cood = f['PartType0']["Coordinates"][:,0]
        den = f['PartType0']["Density"][:]
    plt.plot(cood, den, '-o', label=f'snap_{i:03}')
plt.xlabel('Coordinates')
plt.ylabel('Density')
plt.legend()
plt.show()

image-20250415000701046