Code_Aster のコンパイル

2012年7月1日

はじめに

Code_Aster は、フランス EDF が公開しているオープンソースの構造解析ソルバーである。

使用環境

Code_Aster 10.6.0-3、Linux Mint 12 x86_64

Code_Aster のコンパイル

ソースパッケージの入手

ソースパッケージ (ここでは aster-full-src-10.6.0-3.noarch.tar.gz) を Code_Aster のページ からダウンロードする。

パッケージを展開。

$ tar xvzf aster-full-src-10.6.0-3.noarch.tar.gz -C ~/

事前準備

Code_Aster のコンパイル・利用に下記のものが必要なので用意する。

  • C/C++ コンパイラ (gcc, g++)
  • Fortran コンパイラ (gfortran)
  • BLAS (blas あるいは atlas)
  • LAPACK (lapack)
  • Python
  • Python Numpy モジュール (python-numpyl)
  • Python Qt 4 モジュール (python-qt4-dev)
  • Motif 互換ライブラリ (libmotif-dev)
  • Tcl/Tk (tcl, tk)

以下のものをインストール済み。

  • SCOTCH (libscotch-dev)

SCOTCH はソースコードが含まれるので、必ずしもインストールは必要ない。

コンパイル

Code_Aster のディレクトリに移動。

$ cd ~/aster-full-src-10.6.0

setup.cfg を環境に合わせて修正する。SCOTCH はシステムのものを使うように、次のように指定。

_install_scotch = False

HOME_SCOTCH = '/usr'

コンパイルを開始。

$ mkdir ~/opt/Code_Aster
$ python setup.py install --prefix=$HOME/opt/Code_Aster

"--prefix" でインストール先を指定している (setup.cfg で指定してもよい)。

途中で質問されるので "y" と入力する。

コンパイル後の設定

下記を ~/.bashrc に追加。

export ASTER_ROOT=~/opt/Code_Aster
export PATH=$ASTER_ROOT/bin:$ASTER_ROOT/outils:$PATH

~/.bashrc の読み込み。

$ . ~/.bashrc

テスト

サンプルケースを実行。

$ cd ~/aster/STA10.6
$ as_run forma01a.export

"DIAGNOSTIC JOB : OK" というメッセージが出れば OK。

ASTK, EFICAS の起動も確認。

$ astk
$ eficas

並列版のコンパイル

Code_Aster は標準では並列計算に対応していない。並列計算版を別途コンパイルする必要がある。

事前準備

上の非並列版 Code_Aster をコンパイル済みと想定する。

以下のパッケージをインストールしておく。

  • Open MPI (libopenmpi-dev)
  • ScaLAPACK (libscalapack-mpi-dev)
  • ParMETIS (libparmetis-dev)

MUMPS の再コンパイル

Code_Aster のソースパッケージから MUMPS のソースパッケージを展開。

$ cd ~/aster-full-src-10.6.0/SRC
$ tar xvzf mumps-4.9.2.tar.gz -C ~/
$ mv ~/mumps-4.9.2 ~/opt/Code_Aster/public/mumps-4.9.2_mpi
$ cd ~/opt/Code_Aster/public/mumps-4.9.2_mpi

Makefile.inc をもとの mumps-4.9.2 からコピー。

$ cp ../mumps-4.9.2/Makefile.inc .

Makefile.inc を並列用に修正。SCOTCH, ParMETIS, Open MPI 用に以下を設定。

ISCOTCH    = -I$(SCOTCHDIR)/include/scotch
LSCOTCH    = -L$(SCOTCHDIR)/lib -lptesmumps -lptscotch -lptscotcherr
LMETISDIR = /usr/lib
LMETIS    = -L$(LMETISDIR) -lparmetis -lmetis
ORDERINGSF = -Dscotch -Dmetis -Dpord -Dptscotch -Dparmetis
CC      = mpicc
FC      = mpif77
FL      = mpif90
(追加)
SCALAP = -lscalapack-openmpi -lblacs-openmpi
INCPAR = -I/usr/lib/openmpi/include
LIBPAR = $(SCALAP) -L/usr/lib/openmpi/lib -lmpi
INC = $(INCPAR)
LIB = $(LIBPAR)
LIBSEQNEEDED =

コンパイル。

$ make alllib

並列版 Code_Aster のコンパイル

並列版のディレクトリ PAR10.6 を作成。

$ cd ~/opt/Code_Aster
$ cp -r STA10.6 PAR10.6
$ cd PAR10.6

profile.sh の "mumps-4.9.2" を "mumps-4.9.2_mpi" に書き換える。

config.txt を修正。

BIBL           | mumps   | ?     | -L$ASTER_ROOT/public/mumps-4.9.2_mpi/lib -ldmumps -lzmumps -lsmumps -lcmumps -lmumps_common -lpord
(追加)
BIBL           | metis   | ?     | -lparmetis -lmetis
BIBL           | scalap  | ?     | -lscalapack-openmpi -lblacs-openmpi
BIBL           | scotch  | 4.0   | -lptesmumps -lptscotch -lptscotcherr
DEFS           | defined | ?     | LINUX64 H5_USE_16_API _HAVE_MUMPS _USE_OPENMP _USE_MPI _U    SE_MPI_MUMPS _USE_MPI_FETI
LINK           | link    | ?     | mpif90
CC             | cc      | ?     | mpicc
INCL           | include | ?     | -I$ASTER_ROOT/PAR10.6/bibc/include -I/usr/include/python2    .7 -I/usr/lib/pymodules/python2.7/numpy/core/include -I$ASTER_ROOT/public/hdf5-1.8.4/include     -I$ASTER_ROOT/public/med-3.0.4/include -I/usr/include/scotch-int32
F77            | f77     | ?     | mpif77
F90            | f90     | ?     | mpif90
INCLF90        | include | ?     |  -I$ASTER_ROOT/PAR10.6/bibf90/include_mumps-4.9.2_mpi
REPMAT         | exec    | 02-05 | $ASTER_ROOT/PAR10.6/materiau
REPDEX         | exec    | 02-05 | $ASTER_ROOT/PAR10.6/datg

計算ノードリストを作成。

~/opt/Code_Aster/etc/codeaster/mpi_hostfile

node01 slots=4

"slots=" でノードの CPU コア数を指定する。

~/aster/etc/codeaster/asrun で計算環境の設定を行う。"mpi_get_procid_cmd" を Open MPI 用に書き換える。

mpi_get_procid_cmd : echo $OMPI_MCA_orte_ess_vpid

コンパイル。

$ as_run --vers=PAR10.6 --make clean
$ as_run --vers=PAR10.6 --make clean bibf90/mumps
$ as_run --vers=PAR10.6 --make

テスト

~/aster/PAR10.6 の forma01a.export, astout.export の "STA10.6" を "PAR10.6" に書き換える。forma01a.export で以下を設定。

P ncpus 1
P mpi_nbcpu 2
P mpi_nbnoeud 1

"ncpus" は OpenMP による 1 ノード内の並列数。"mpi_nbcpu"、"mpi_nbnoeud" は MPI の設定で、"mpi_nbcpu" で並列数、"mpi_nbnoeud" でノード数を指定する。

実行。

$ as_run forma01a.export

ここではとりあえず動くことが確認できれば OK。

古い情報