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が Unknown を Unkown とスペルミスしてるのを発見してしまったが……今回はスルーしておこう。
データの確認
$ 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()
