Code_Aster のコンパイル2011年7月30日 | |
はじめにCode_Aster は、フランス EDF が公開しているオープンソースの構造解析ソルバーである。 使用環境Code_Aster 10.3.0-3、openSUSE 11.3 x86_64 Code_Aster のコンパイルソースパッケージの入手ソースパッケージ (ここでは aster-full-src-10.3.0-3.noarch.tar.gz) を Code_Aster のページ からダウンロードする。 パッケージを展開。 $ tar xvzf aster-full-src-10.3.0-3.noarch.tar.gz -C ~/ 事前準備Code_Aster のコンパイル・利用に下記のものが必要なので用意する。
コンパイルCode_Aster のディレクトリに移動。 $ cd ~/aster-full-src-10.3.0 setup.cfg を環境に合わせて修正し、コンパイルを開始。 $ mkdir ~/aster $ python setup.py install --prefix=$HOME/aster ここでは setup.cfg は書き換えず、"--prefix" でインストール先を指定している。ここでは "~/aster" にインストールしている。 途中で質問されるので "y" と入力する。 コンパイル後の設定下記を ~/.bashrc に追加。 export ASTER_ROOT=~/aster export PATH=~/aster/bin:~/aster/outils:$PATH ~/.bashrc の読み込み。 $ . ~/.bashrc テストサンプルケースを実行。 $ cd ~/aster/STA10.3 $ as_run forma01a.export "DIAGNOSTIC JOB : OK" というメッセージが出れば OK。 ASTK, EFICAS の起動も確認。 $ astk $ eficas 並列版のコンパイルCode_Aster は標準では並列計算に対応していない。並列計算版を別途コンパイルする必要がある。 事前準備並列版 Code_Aster のコンパイルのために以下のものを用意する。
Open MPI のコンパイルOpen MPI のページ からパッケージを入手し、コンパイル。 $ tar xvjf openmpi-1.4.3.tar.bz2 -C ~/ $ cd openmpi-1.4.3 $ mkdir ~/aster/public/openmpi-1.4.3 $ ./configure --prefix=$HOME/aster/public/openmpi-1.4.3 $ make $ make install 以下を ~/.bashrc に追加する。 export PATH=~/aster/public/openmpi-1.4.3/bin:$PATH LD_LIBRARY_PATH=~/aster/public/openmpi-1.4.3/lib:$LD_LIBRARY_PATH OPAL_PREFIX=~/aster/public/openmpi-1.4.3 ~/.bashrc の読み込み。 $ . ~/.bashrc テスト。 $ cd ~/openmpi-1.4.3/examples $ make $ mpirun -np 2 hello_c ScaLAPACK のコンパイルここ から ScaLAPACK のパッケージをダウンロード、コンパイル。 $ tar xvzf scalapack_installer.tgz -C ~/ $ cd ~/scalapack_installer_0.96 $ mkdir ~/aster/public/scalapack $ ./setup.py --prefix=$HOME/aster/public/scalapack --f90=gfortran --downblas --downblacs --downlapackオプション "--downblas" などは、BLAS などを Web からダウンロードしてコンパイルすることを指示している。 コンパイルが済んだら以下を実行。 $ cd ~/aster/public/scalapack/lib $ ln -s blacs.a libblacs.a $ ln -s blacsC.a libblacsC.a $ ln -s blacsF77.a libblacsF77.a ParMETIS のコンパイルParMETIS のページ から ParMETIS のパッケージを入手し、展開。 $ tar xvzf ParMetis-3.2.0.tar.gz -C ~/ $ cd ~/ParMetis-3.2.0 Makefile.in をエディタで開き、"XTRALIBS = " に "-lmpi" を追加。 コンパイル。 $ make コンパイルが済んだら、ライブラリをコピー。 $ mkdir ~/aster/public/ParMetis-3.2.0/lib $ cp *.a ~/aster/public/ParMetis-3.2.0/lib MUMPS の再コンパイルCode_Aster のソースパッケージから MUMPS のソースパッケージを展開。 $ cd ~/aster-full-src-10.3.0/SRC $ tar xvzf mumps-4.9.2.tar.gz -C ~/ $ mv ~/mumps-4.9.2 ~/aster/public/mumps-4.9.2_mpi $ cd ~/aster/public/mumps-4.9.2_mpi Makefile.inc をもとの mumps-4.9.2 からコピー。 $ cp ../mumps-4.9.2/Makefile.inc . Makefile.inc を並列用に修正。 $ diff ../mumps-4.9.2/Makefile.inc Makefile.inc 39c39,40 < LMETISDIR = /home/adelie/aster/public/metis-4.0/lib --- > #LMETISDIR = /home/adelie/aster/public/metis-4.0/lib > LMETISDIR = /home/adelie/aster/public/ParMetis-3.2.0/lib 48,49c49,50 < LMETIS = -L$(LMETISDIR) -lmetis < #LMETIS = -L$(LMETISDIR) -lparmetis -lmetis --- > #LMETIS = -L$(LMETISDIR) -lmetis > LMETIS = -L$(LMETISDIR) -lparmetis -lmetis 54c55,56 < ORDERINGSF = -Dpord -Dmetis --- > #ORDERINGSF = -Dscotch -Dpord -Dmetis > ORDERINGSF = -Dpord -Dmetis -Dparmetis -Dmetis 67,69c69,74 < CC = /usr/bin/gcc < FC = /usr/bin/gfortran < FL = /usr/bin/gfortran --- > #CC = /usr/bin/gcc > #FC = /usr/bin/gfortran > #FL = /usr/bin/gfortran > CC = mpicc > FC = mpif77 > FL = mpif90 72a78,82 > # > SCALAP = -L$(HOME)/aster/public/scalapack/lib -lscalapack -lblacs -lblacsF77 -lblacsC -lblacs -lblacsF77 -lblacsC > INCPAR = -I$(HOME)/aster/public/openmpi-1.4.3/include > LIBPAR = $(SCALAP) -L$(HOME)/aster/public/openmpi-1.4.3/lib -lmpi > # 87,89c97,102 < INC = $(INCSEQ) < LIB = $(LIBSEQ) < LIBSEQNEEDED = libseqneeded --- > #INC = $(INCSEQ) > #LIB = $(LIBSEQ) > #LIBSEQNEEDED = libseqneeded > INC = $(INCPAR) > LIB = $(LIBPAR) > LIBSEQNEEDED = コンパイル。 $ make alllib 並列版 Code_Aster のコンパイル並列版のディレクトリ PAR10.3 を作成。 $ cd ~/aster $ cp -r STA10.3 PAR10.3 $ cd PAR10.3 PAR10.3/profile.sh の "mumps-4.9.2" を "mumps-4.9.2_mpi" に書き換える。 PAR10.3/config.txt を修正。 $ diff ../STA10.3/config.txt config.txt 46c46,49 < BIBL | mumps | ? | /home/adelie/aster/public/mumps-4.9.2/lib/libdmumps.a /home/adelie/aster/public/mumps-4.9.2/lib/libzmumps.a /home/adelie/aster/public/mumps-4.9.2/lib/libsmumps.a /home/adelie/aster/public/mumps-4.9.2/lib/libcmumps.a /home/adelie/aster/public/mumps-4.9.2/lib/libmumps_common.a /home/adelie/aster/public/mumps-4.9.2/lib/libpord.a /home/adelie/aster/public/mumps-4.9.2/lib/libmpiseq.a -L/home/adelie/aster/public/metis-4.0/lib -lmetis --- > #BIBL | mumps | ? | /home/adelie/aster/public/mumps-4.9.2/lib/libdmumps.a /home/adelie/aster/public/mumps-4.9.2/lib/libzmumps.a /home/adelie/aster/public/mumps-4.9.2/lib/libsmumps.a /home/adelie/aster/public/mumps-4.9.2/lib/libcmumps.a /home/adelie/aster/public/mumps-4.9.2/lib/libmumps_common.a /home/adelie/aster/public/mumps-4.9.2/lib/libpord.a /home/adelie/aster/public/mumps-4.9.2/lib/libmpiseq.a -L/home/adelie/aster/public/metis-4.0/lib -lmetis > BIBL | mumps | ? | -L/home/adelie/aster/public/mumps-4.9.2_mpi/lib -ldmumps -lzmumps -lsmumps -lcmumps -lmumps_common -lpord > BIBL | metis | ? | -L/home/adelie/aster/public/ParMetis-3.2.0/lib -lparmetis -lmetis > BIBL | scalap | ? | -L/home/adelie/aster/public/scalapack/lib -lscalapack -lblacs -lblacsF77 -lblacsC -lblacs -lblacsF77 -lblacsC 49c52,53 < BIBL | mpi | 2 | --- > #BIBL | mpi | 2 | > BIBL | mpi | 2 | -L/home/adelie/aster/public/openmpi-1.4.3/lib -lmpi 53c57,58 < DEFS | defined | ? | LINUX64 _HAVE_MUMPS --- > #DEFS | defined | ? | LINUX64 _HAVE_MUMPS > DEFS | defined | ? | LINUX64 _HAVE_MUMPS _USE_OPENMP _USE_MPI _USE_MPI_MUMPS _USE_MPI_FETI 59c64,65 < LINK | link | ? | /usr/bin/gfortran --- > #LINK | link | ? | /usr/bin/gfortran > LINK | link | ? | mpif90 62c68,69 < CC | cc | ? | /usr/bin/gcc --- > #CC | cc | ? | /usr/bin/gcc > CC | cc | ? | mpicc 65c72,73 < INCL | include | ? | -I/home/adelie/aster/STA10.3/bibc/include -I/usr/include/python2.6 -I/usr/lib64/python2.6/site-packages/numpy/core/include -I/home/adelie/aster/public/hdf5-1.6.9/include -I/home/adelie/aster/public/scotch_4.0/include --- > #INCL | include | ? | -I/home/adelie/aster/STA10.3/bibc/include -I/usr/include/python2.6 -I/usr/lib64/python2.6/site-packages/numpy/core/include -I/home/adelie/aster/public/hdf5-1.6.9/include -I/home/adelie/aster/public/scotch_4.0/include > INCL | include | ? | -I/home/adelie/aster/PAR10.3/bibc/include -I/usr/include/python2.6 -I/usr/lib64/python2.6/site-packages/numpy/core/include -I/home/adelie/aster/public/hdf5-1.6.9/include -I/home/adelie/aster/public/scotch_4.0/include 67c75,76 < F77 | f77 | ? | /usr/bin/gfortran --- > #F77 | f77 | ? | /usr/bin/gfortran > F77 | f77 | ? | mpif77 72c81,82 < F90 | f90 | ? | /usr/bin/gfortran --- > #F90 | f90 | ? | /usr/bin/gfortran > F90 | f90 | ? | mpif90 75c85,86 < INCLF90 | include | ? | -I/home/adelie/aster/STA10.3/bibf90/include_mumps-4.9.2 --- > #INCLF90 | include | ? | -I/home/adelie/aster/STA10.3/bibf90/include_mumps-4.9.2 > INCLF90 | include | ? | -I/home/adelie/aster/PAR10.3/bibf90/include_mumps-4.9.2_mpi 113,114c124,127 < REPMAT | exec | 02-05 | /home/adelie/aster/STA10.3/materiau < REPDEX | exec | 02-05 | /home/adelie/aster/STA10.3/datg --- > #REPMAT | exec | 02-05 | /home/adelie/aster/STA10.3/materiau > #REPDEX | exec | 02-05 | /home/adelie/aster/STA10.3/datg > REPMAT | exec | 02-05 | /home/adelie/aster/PAR10.3/materiau > REPDEX | exec | 02-05 | /home/adelie/aster/PAR10.3/datg コンパイル。 $ as_run --vers=PAR10.3 --make clean $ as_run --vers=PAR10.3 --make clean bibf90/mumps $ as_run --vers=PAR10.3 --make コンパイル後の設定計算ノードリストを作成。 ~/aster/etc/codeaster/aster-mpihosts 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 ノード数と最大 CPU コア数 (全ノードの CPU コア数の和) を指定。 mpi_nbnoeudmax : 1 mpi_nbcpumax : 4 また、~/aster/etc/codeaster/aster の最後に "vers : PAR10.3" を追加する。こうしておくと、ASTK で並列版を選択できる。 コンパイル後の設定 2~/aster/share/codeaster/asrun/data/mpirun_template の "TMPDIR" を "TMPDIRL" などと別名に変える。こうしないと設定ファイルの解釈時にプログラムが固まった。どうやら Open MPI の問題らしい。たとえば、openmpi-1.4.3/examples の中で以下のようなシェルスクリプト "hello_c_test" を作る。 #!/bin/sh PROCID=`echo $OMPI_MCA_orte_ess_vpid` TMPDIR=/tmp/test.proc.$PROCID ./hello_c これを mpirun で実行すると、固まる。 $ mpirun -np 2 ./hello_c_test TMPDIR の内容が並列プロセスごとに異なっていると、MPI 用プログラムの実行時に問題になるらしい。 コンパイル後の設定 3~/aster/etc/codeaster/profile.sh の以下の行をコメントにしないと ASTK が起動しなかった。 export WISHEXECUTABLE=/home/adelie/SALOME-MECA-2011.1-x86_64/SALOME-MECA/Prerequis/TclTk8.4.12/bin/wish8.4 コンパイル後の設定 4~/.bashrc に設定した Open MPI 用の設定を ~/aster/PAR10.03 の profile.sh に移動する。 export PATH=~/aster/public/openmpi-1.4.3/bin:$PATH LD_LIBRARY_PATH=~/aster/public/openmpi-1.4.3/lib:$LD_LIBRARY_PATH OPAL_PREFIX=~/aster/public/openmpi-1.4.3 これは OpenFOAM の Open MPI との干渉を避けるための処置。OpenFOAM を使っておらず、Open MPI を Code_Aster 以外で使うならば ~/.bashrc に設定したままでもよいが、その場合は Open MPI を別の場所にインストールしたほうがよいかもしれない。 テスト~/aster/PAR10.3 の forma01a.export, astout.export の "STA10.3" を "PAR10.3" に書き換える (気分の問題)。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 "mpi_nbcpu" を 2 より大きくするとエラーになった。設定がまずいらしい。とりあえず動くことが確認できれば OK。 | |
| PENGUINITIS | |