Parallel版 code_aster v13.6の作成

0.準備

初めてのbuildなら、ここの準備でインストールしたパッケージが必要になります。

1.OpenBLAS
$ tar xfvz OpenBLAS-0.2.20.tar.gz
$ cd OpenBLAS-0.2.20
$ make NO_AFFINITY=1 USE_OPENMP=1
$ make PREFIX=/opt/OpenBLAS install
$ echo /opt/OpenBLAS/lib | sudo tee -a /etc/ld.so.conf.d/openblas.conf
$ sudo ldconfig

以上です。

2.OpenBLAS版CodeAster
CodeAsterのソースコードをダウンロードして展開したら、参考のとおりにsetup.pyを変更します。
$ cd aster-full-src-13.6.0
$ sed -i "s:PREFER_COMPILER\ =\ 'GNU':PREFER_COMPILER\ =\'GNU_without_MATH'\nMATHLIB=\ '/opt/OpenBLAS/lib/libopenblas.a':g" setup.cfg

続けて

$ python setup.py install

以上です。参考のとおりに並列計算用のホストファイルを作成しておきます。

$ echo "$HOSTNAME cpu=$(cat /proc/cpuinfo | grep processor | wc -l)" > /opt/aster/etc/codeaster/mpi_hostfile
3.ScaLAPACK
$ tar xfvz scalapack_installer.tgz
$ cd scalapack_installer
$ ./setup.py --lapacklib=/opt/OpenBLAS/lib/libopenblas.a --mpicc=mpicc --mpif90=mpif90 --mpiincdir=/usr/lib/x86_64-linux-gnu/openmpi/include --ldflags_c=-fopenmp --ldflags_fc=-fopenmp --prefix=/opt/scalapack
以上です。
4.Parmetis

ソースコードをダウンロードして展開します。

$ tar xvf parmetis-4.0.3.tar.gz
$ cd parmetis-4.0.3
$ make config prefix=/opt/parmetis-4.0.3
$ make

完了したら、動作確認をします。

$ cd Graphs
$ mpirun -np 8 ptest rotor.graph rotor.graph.xyz

特にエラーが出なければ~/parmetis-4.0.3に戻って

$ make install

で終了です。

5.ScotchとPtscotch

Codeasterのソースコードに含まれているscotch-6.0.4-aster5.tar.gzを/opt下に展開します。

$ cd /opt/scotch-6.0.4/src

Makefile.incはこちら

$ make scotch esmumps ptscotch ptesmumps CCD=mpicc

完了したら、動作確認です。

$make check
$make ptcheck

問題なければ完了です。

6.MUMPS

Codeasterのソースコードに含まれているmumps-5.1.1-aster2.tar.gzを/opt下に展開します。フォルダ名はmumps-5.1.1-mpiとしています。

$ cd /opt/mumps-5.1.1-mpi

Makefile.incはこちら

$ make all

終了したらexamplesに移動して動作チェックを行います。

7.Petsc

petsc-3.7.7.tar.gzをダウンロードし、/opt下に展開します。まず、configです。

$ cd /opt/petsc-3.7.7
$ ./config/configure.py --with-mumps-dir=/opt/mumps-5.1.1-mpi --with-openmpi-dir=/usr/lib/x86_64-linux-gnu/openmpi --with-blas-lapack-lib=[/opt/OpenBLAS/lib/libopenblas.a] --download-hypre=yes --download-ml=yes --with-debugging=0 COPTFLAGS=-O1 CXXOPTFLAGS=-O1 FOPTFLAGS=-O1 --with-x=0 --with-shared-libraries=0 --with-scalapack-dir=/opt/scalapack --PETSC_ARCH=linux-metis-mumps --with-metis-dir=/opt/aster/public/metis-5.1.0 --with-parmetis-dir=/opt/parmetis-4.0.3 --with-scotch-dir=/opt/scotch-6.0.4 --with-ptscotch-dir=/opt/scotch-6.0.4 LIBS=-lgomp --configModules=PETSc.Configure --optionsModule=PETSc.compilerOptions

そしてmakeです。

$ make PETSC_DIR=/opt/petsc-3.7.7 PETSC_ARCH=linux-metis-mumps all

次に動作確認です。

$ make PETSC_DIR=/opt/petsc-3.7.7 PETSC_ARCH=linux-metis-mumps test
$ make PETSC_DIR=/opt/petsc-3.7.7 PETSC_ARCH=linux-metis-mumps streams

以上です。

8.Parallel版CodeAster

ソースコードを展開したフォルダに入っていき、aster-13.6.0を解凍します。

$ cd ~/Install_Files
$ cd aster-full-src-13.6.0/SRC
$ tar xfvz aster-13.6.0.tgz
$ cd aster-13.6.0

次に、~/waftools/mathematics.pyの一部を変更してblacsのチェックを外します。

# program testing a blacs call, output is 0 and 1
blacs_fragment = r"""
program test_blacs
    integer iam, nprocs
#    call blacs_pinfo (iam, nprocs)
#    print *,iam
#    print *,nprocs
end program test_blacs
"""

そしてUbuntu_gnu.pyUbuntu_gnu_mpi.pyをフォルダ内にコピーしてbuildの準備が完了です。

$ export ASTER_ROOT=/opt/aster
$ ./waf configure --use-config-dir=$ASTER_ROOT/13.6/share/aster --use-config=Ubuntu_gnu_mpi --prefix=$ASTER_ROOT/PAR13.6MUPT2
$ ./waf install -p

成功したら、/opt/aster/etc/codeaster/asterの中にParallel 版を追加します。

# Code_Aster versions
# versions can be absolute paths or relative to ASTER_ROOT
# examples : NEW11, /usr/lib/codeaster/NEW11

# default version (overridden by --vers option)
default_vers : stable

# available versions
# DO NOT EDIT FOLLOWING LINE !
#?vers : VVV?
vers : stable:/opt/aster/13.6/share/aster
vers : 13.6MUPT:/opt/aster/PAR13.6MUPT2/share/aster
7.設定ファイルの変更
/opt/aster/etc/codeaster/asrunをテキストエディタで開いて、mpi_get_procid_cmdの部分を書き換えます。
mpi_get_procid_cmd : echo $OMPI_COMM_WORLD_RANK
そしてmpirunの部分を次のように書き換えます。
mpirun_cmd : mpirun -np %(mpi_nbcpu)s %(program)s

お疲れ様でした。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です