0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

N体シミュレーションコード「FastPM」インストールと動作確認

Last updated at Posted at 2023-10-31

はじめに

この度、研究でN体シミュレーションを行うことになり、FastPMを使うことになりました。FastPMには、N体シミュレーションを行うコードで、Pythonのラッパーも用意されています。ですが、計算クラスター上ではC言語の方が都合がいいため、C言語でコンパイルしました。今回は、FastPMのインストール方法と、実際にN体シミュレーションを行う方法をまとめます。

環境

  • gcc version 9.3.0 (crosstool-NG 1.24.0.131_87df0e6_dirty)
  • CentOS Linux 7 (Core)
  • GSL 2.7.1
  • FFTW 3.3.4
  • PFFT 1.0.8
  • FastPM 1.0.54fdc781e6

まずは必要なライブラリ「gsl」と「pfft」をインストールします。GCCは既にインストールされているものとします。

gslのインストール

gslは、GNU Scientific Libraryの略で、科学技術計算に必要な関数をまとめたライブラリです。インストールにあたっては、こちらの記事を参考にしました。

gslの公式サイトから、最新版のソースコード(今回はgsl-2.7.1)をダウンロードします。その後、展開してディレクトリに移動します。

wget https://mirror.ibcp.fr/pub/gnu/gsl/gsl-latest.tar.gz 
tar zxvf gsl-latest.tar.gz
cd gsl-2.7.1

次に、インストール先のディレクトリを指定して、コンパイルします。今回は、計算クラスター上の個人作業ディレクトリ/lustre/work/akira.tokiwa/local/gsl-2.7.1にインストールすることにします。

INSTALL_DIR=/lustre/work/akira.tokiwa/local
./configure --prefix=$INSTALL_DIR/gsl-2.7.1
make
make install

これでgslのインストールは完了です。

pfftのインストール

pfftは、Parallel FFTの略で、並列FFTを行うためのライブラリです。インストールにあたっては、公式サイトを参考にしました。

まずは、pfftの前提となるfftwのソースコードをダウンロードとコンパイルをします。今回は、fftw-3.3.4を使用します。MPI環境の有無によって、コンパイル方法が異なります。今回は、諸々のMPIオプションを付けてコンパイルします。
configure: error: don't know how to enable OpenMP とのことだったので--enable-openmpは外しました。

wget http://www.fftw.org/fftw-3.3.4.tar.gz
tar zxvf fftw-3.3.4.tar.gz
cd fftw-3.3.4
./configure --prefix=$INSTALL_DIR/fftw-3.3.4 \
  --enable-mpi --enable-threads --disable-shared \
  CC="mpicc" F77="mpif90" MPICC="mpicc" \
  CFLAGS="-O3" FFLAGS="-O3" \
  MPILIBS=" "
make -j 4
make install

次に、pfftのソースコードをダウンロードして、コンパイルします。今回は、pfft-1.0.8を使用します。

wget http://www.tu-chemnitz.de/~potts/workgroup/pippig/software/pfft-1.0.8-alpha3-fftw3.tar.gz
tar zxvf pfft-1.0.8-alpha3-fftw3.tar.gz
cd pfft-1.0.8-alpha3-fftw3
./configure --prefix=$INSTALL_DIR/pfft-1.0.8-alpha3-fftw3 --disable-shared \
  CPPFLAGS="-I$INSTALL_DIR/fftw-3.3.4/include" \
  LDFLAGS="-L$INSTALL_DIR/fftw-3.3.4/lib64" \
  FC=mpif90 CC=mpicc MPICC=mpicc MPIFC=mpif90
make -j 4
make install

これでpfftのインストールは完了です。

FastPMのインストール

先程インストールしたgslとpfftのパスを通しておきます。

setup_env.sh
#!/bin/bash
INSTALL_DIR=/lustre/work/akira.tokiwa/local

# Define the GSL paths based on the provided directory
GSL_DIR="$INSTALL_DIR/gsl-2.7.1"
GSL_LIB="$GSL_DIR/lib"
GSL_BIN="$GSL_DIR/bin"

# Define the fftw3 paths based on the provided directory
FFTW3_DIR="$INSTALL_DIR/fftw-3.3.4"
FFTW3_LIB="$FFTW3_DIR/lib"
FFTW3_BIN="$FFTW3_DIR/bin"

# Modify PATH and LD_LIBRARY_PATH
export PATH="$GSL_BIN:$FFTW3_BIN:$PATH"
export LD_LIBRARY_PATH="$GSL_LIB:$FFTW3_LIB:$LD_LIBRARY_PATH"

FastPMのソースコードをクローンし、READMEに従ってMakefile.localをコピーし編集します。makeを実行すると、srcディレクトリ下にfastpmという実行ファイルが生成されます。

git clone https://github.com/fastpm/fastpm.git
cd fastpm
cp Makefile.local.example Makefile.local
make

これでFastPMのインストールは完了です。

FastPMの動作確認

testsディレクトリ下にあるrun-test-nbodykit.shと同様のジョブスクリプトを作成します。

run-test-fastpm.job
#!/bin/bash
#PBS -N fastPM_test
#PBS -o /lustre/work/akira.tokiwa/fastpm/log/test.out
#PBS -e /lustre/work/akira.tokiwa/fastpm/log/test.err
#PBS -l select=1:ncpus=4
#PBS -l walltime=99:00:00
#PBS -q mini

cd /lustre/work/akira.tokiwa/fastpm/

mpiexec -n 4 ./src/fastpm ./tests/nbodykit.lua

ジョブを投入し実行が問題なく終了すれば、nbodykitディレクトリが作成され、その中のfastpmディレクトリにnbodykit形式で異なる赤方偏移zでのダークマター粒子スナップショットが保存されているはずです。これがN体シミュレーションの結果となります。

まとめ

以上で、FastPMのインストールと動作確認は完了です。今回は、計算クラスター上でのインストールを行いましたが、ローカル環境でも同様にインストールできると思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?