DALAB情報発信用ブログ:OpenCAE+GPGPU+Peridynamics編

DALABで行っている研究活動の中で、OpenCAEやGPGPUや破壊解析の取り組みについてまとめてゆきます。

DEXCS2012-Salomeの有効活用:並列版Code_Asterの活用手順(2)

2013年05月22日 18時32分00秒 | OpenCAE活用
■ 解析手順2:並列ソルバーの変更

先ほどの解析結果では、CPUコアを1から4に変更したことで、計算時間が増える期待外れな結果でした。それでは、別のソルバーに変更して検討を広げたいと思います。

・Eficasの起動
コマンドファイルcommはテキストファイルなので、エディタでも修正できますが、パラメータの選択などを支援するEficasを使う方が便利です。ASTKの解析ファイルの中で、ssnv506d.commにカーソルを入れておき、メニューから Tools > Command file editor (Eficas)を選択します。

・Eficasの操作
最初に用いるコマンドのバージョンを聞かれるので、ここでは安定板なのでSTA10を選択して、OKで進めます。
ソルバーの設定は、STAT_NON_LINEにあるので、これを展開して、最後の方のSOLVEURを展開します。
デフォルトの直接法ソルバーとしてmult_frontが設定されているので、SOLVEURにMETHODを追加します。
これに対して、MUMPUSを設定します。b_mumpsに、OUT_OF_CORE, MATR_DISTRIBUTEE, LIBEREMEMOIREを追加します。
これらの3つのMUMPUSの設定項目では、それぞれOUIを設定して、Eficasを保存して終了します。
さらに検証を進めると、PCENT_PIVOTの追加がエラーメッセージにあるので100と設定します。

・ソルバーMUMPUSでの解析
再びASTKを起動して解析を実行します。この場合には解析は途中まで進みますが、mess,resuが生成されません。
そこで、Total memoryをこの状態で可能な8000MBとして、CPUコア数を4にすると、解析は最後まで進みました。そこで期待の計算時間ですが88.51秒でデフォルトの1コアの場合とほぼ同じでした。並列処理の効果がなかなか確認できません。

DEXCS2012-Salomeの有効活用:並列版Code_Asterの活用手順(1)

2013年05月22日 09時21分33秒 | OpenCAE活用
折角構築した並列版Code_Asterを活用する手順を説明します。ここでは、構築に用いたCode_Asterのソースパッケージの中にある検証例題を用いて並列解析を検証します。なお、以下の手順では、コマンドライン操作が中心なので、端末を開いて進めます。

■ 検証例題に必要なファイル

作業用ディレクトリAsterWorkをホームディレクトリ/home/dexcs/に作り、ここで作業を行います。
$ mkdir ~/AsterWork

・検証例題のファイル

Code_Asterをこのブログに示した手順でインストールすると、/opt/asterの中に、以下の4つの解析モジュールが構築されます。
  開発版11.3 : 単独実行 STA11.3(stable)  並列実行 PAR11.3
  安定版10.8 : 単独実行 STA10.8(stable)  並列実行 PAR10.8

Code_Asterのソルバーのバージョンは、基本的には独立しているので、11系列と10系列は分けて扱います。以下の説明では、10系列の検証例題を対象とします。なお単独実行STA10.8と並列実行PAR10.8の例題は同じですが、ここではPAR10.8を対象とします。

検証例題のファイルは、/opt/aster/PAR10.8/astestにあるので、移動します。
$ cd /opt/aster/PAR10.8/astest

ここでは、ssnv506dの検証例題を対象とします。この例題の意味は以下の通りです。
 s: Structureで構造解析
 s: Staticで静的解析
 n: Nonlinearで非線形問題
 v: Volumic 3Dで3次元要素
 506:506番例題
 d:a~dで立体問題

関連するファイルを、作業ディレクトリにコピーします。
$ cp ssnv506d.* ~/AsterWork

コピーしたファイルを確認します。以下の5つのファイルがあります。
$ cd ~/AsterWork; ls
ssnv506d.comm ssnv506d.datg ssnv506d.mail ssnv506d.mgib ssnv506d.para

それぞれの拡張子の意味は以下の通りです。
 comm:Asterの解析コマンドファイル
 datg:多分?入力データの説明
 mail:Asterのメッシュファイル
 mgib:Gibi形式のメッシュファイル
 para:計算例の結果情報

・検証例題の解説文章

この検証例題については、理論解説や数値解析の比較検討が文章でまとめられています。まずCode_Asterのドキュメントは、以下にあります。
http://www.code-aster.org/V2/spip.php?rubrique19

左のメニューから、開発版11系(Code_Aster version 11)、安定板10系(Code_Aster version 10)を選択します。ここでは10系です。

検証例題なので、Validationの「V6」を選択すると、多数の解説文書があり、この中でssnv506に該当する以下を選択します。
[V6.04.506] SSNV506 - elastic-plastic indentation of a block by an elastic spherical indenter

全18頁のPDFドキュメントが表示されるので、これで検証例題の内容を確認します。2頁の図にあるように、平板に球体を押し付ける接触解析です。今回対象とする例題dは立体問題で、文書の11頁にモデル図があります。

■ 解析手順その1:並列実行の確認

現在の状態では、Code_Asterで並列解析を行うには、ASTKを用います。まずは最も単純な設定で解析を実行してみます。
先に説明したブログに従って並列Code_Asterの解析環境が構築されている前提です。以下のコマンドでASTKを実行します。
$ /opt/aster/bin/astk

・作業フォルダの設定
ASTKのFILESの下、Base pathの欄の右のフォルダアイコンより、作業フォルダを設定します。ここでは/home/dexcs/AsterWorkです。

・入力ファイルの設定
先のアイコンの2つ下のフォルダアイコンより、ssnv506d.commとssnv506d.mgibを設定します。

・出力ファイルの設定
最低限として出力のメッセージファイルを設定します。先のアイコンの間の新規ファイルアイコンより、以下の設定で作成します。
Type: mess  Server: Local  Name: /home/dexcs/AsterWork/ssnv506d.mess

・解析モジュールの選択
まずは安定板の単独実行なのですが、このコマンドファイルの設定が並列実行のソルバーを前提としており、PAR10.8を選択します。ただし現状の設定では、利用するCPUは1個なので単独実行となります。

・ASTK設定ファイルの保存
この条件設定を保存します。File > Saveで、ファイル名をssnv506d.astkとして保存します。

・単独実行の解析
右下のボタンRunを押して実行します。それなりに時間がかかるので、システムモニターで動作を確認します。

・出力ファイルの確認
以上の実行により、先に設定した解析のメッセージファイルssnv506d.messと解析の定義ファイルssnv506d.exportの2つが作られます。
このmessファイルをエディタviで開くと、最後にTEMPS CPU TOTALの項目が88.15となっていました。これが計算時間になります。

・結果ファイルの確認
次に解析結果を保存するファイルを以下のように設定します。これを設定すると結果ファイルresuが作られます。
Type: resu  Server: Local  Name: /home/dexcs/AsterWork/ssnv506d.resu

・並列処理の設定
目的である並列実行を設定します。ASTKのメニューより Options > mpi_nbcpu を選択して1から4にしてみます。この解析環境のCPUコア数は4です。
このとき、システムモニターのリソースのCPU使用率をみると、4つのCPUコアが動作しているのが確認できます。この時の計算時間は99.27秒で並列処理の方が遅くなっています。






DEXCS2012-Salomeの有効活用:並列版Code_Asterの設定準備(1)

2013年05月21日 18時31分41秒 | OpenCAE活用
ここでは、先に構築した並列版Code_Asterを活用するための準備や設定をまとめます。

■ ASTKの設定

動作確認において、/opt/aster/bin/astkを起動するとき、ネットワーク関係の設定の指示が出ますので、これに対応します。

1:メッセージを見てOKで起動させ、Configuration → Preferences → Networkと選択して、Domain nameを設定します。ここでは、archi.gifu-nct.ac.jpとします。OKで終了して、ASTKを終了してから再度起動してみます。これで先のメッセージは表示されません。

■ 

並列版Code_Asterの構築:aster/PAR10.8のconfig.txt

2013年05月21日 18時01分00秒 | OpenCAE活用
# Configuration file
#
# Fields are separated by a " | " (the space is significative)
#
# Keywords :
# ENV_SH : environment script (absolute filename or relative to current directory)
# LIB : archiver
# BIBL : librairies linked with Code_Aster (with options -L/-l eventually)
# PYTHON : Python binary
# DEVEL : Set to no to tell that this version does not allow user developments.
# Typically for a binary distribution (default is yes)
# LINK : linker command
# OPTL : linker options
# CC : C compiler command
# DEFS : pre-processor #define commands separated by space or comma
# they will be added to all compilation options OPTx_x
# OPTC_D : C compiler options using DEBUG mode
# OPTC_O : C compiler options using NODEBUG mode
# INCL : C include flags
# F77 : Fortran compiler command
# OPTF_D : Fortran compiler options using DEBUG mode
# OPTF_O : Fortran compiler options using NODEBUG mode
# INCLF : Fortran include flags
# F90 : Fortran 90 compiler command
# OPTF90_D : Fortran 90 compiler options using DEBUG mode
# OPTF90_O : Fortran 90 compiler options using NODEBUG mode
# INCLF90 : Fortran 90 include flags
# G77_AGLA : used only for configuration management of EDF version
# SUPERV : Code_Aster Python packages
# REPPY : name of 'bibpyt' in the temporary execution directory
# ARGPYT : main python module
# ARGEXE : arguments passed to Code_Aster executable
# REPOUT : tools directory
# MAKE_SURCH_OFFI/MAKE_CAPY_OFFI : Python modules to compiling elements catalogs
# CRP / CRS : tools to check source files and programming rules
# ID_PERF : a label to identify a group of machines (use by TEST_TEMPS command)
#
ID_PERF | id | - | dexcs-parallel
#
ENV_SH | env | - | profile.sh
#
LIB | ar | ? | /usr/bin/ar -rv
#
BIBL | python | 2.4 | -L/usr/lib -L/usr/lib/python2.7/config -lpython2.7
BIBL | med | 2.3.5 | $ASTER_ROOT/public/med-3.0.6/lib/libmed.a
BIBL | hdf5 | 1.6.5 | $ASTER_ROOT/public/hdf5-1.8.8/lib/libhdf5.a
BIBL | zmat | 8.4 |
BIBL | mumps | ? | -L/opt/mumps-4.9.2_mpi/lib -ldmumps -lzmumps -lsmumps -lcmumps -lmumps_common -lpord -L/opt/ParMetis-3.2.0 -lparmetis -lmetis -L/opt/scotch_5.1.11_esmumps_mpi/lib -lptesmumps -lptscotch -lptscotcherr
BIBL | scalap | 2.0.2 | /opt/scalapack/lib/libscalapack.a /opt/acml5.3.1/gfortran64/lib/libacml.a
BIBL | metis | ? | -L/opt/ParMetis-3.2.0 -lparmetis -lmetis
BIBL | petsc | 2.3.3 | -L/opt/petsc-2.3.3-p16/lib/linux-gnu-c-opt -lpetscsnes -lpetscksp -lpetscdm -lpetscmat -lpetscvec -lpetsc
BIBL | scotch | 5.1.11| -L/opt/scotch_5.1.11_esmumps_mpi/lib -lptesmumps -lptscotch -lptscotcherr
BIBL | math | ? | -L/opt/acml5.3.1/gfortran64/lib -lacml
BIBL | mpi | 2 | -L/usr/lib/openmpi/lib -lmpi -lmpi_f90
BIBL | c++ | ? | -L/usr/lib/gcc/x86_64-linux-gnu/4.6 -lstdc++
BIBL | sys | ? | -Wl,--allow-multiple-definition -Wl,--export-dynamic -L/usr/lib/x86_64-linux-gnu -ldl -L/usr/lib/x86_64-linux-gnu -lutil -L/usr/lib/x86_64-linux-gnu -lm -L/usr/lib/x86_64-linux-gnu -lpthread -L/usr/lib/x86_64-linux-gnu -lz
#
DEFS | defined | ? | LINUX64 _USE_OPENMP H5_NO_DEPRECATED_SYMBOLS _HAVE_METIS _HAVE_MUMPS _USE_MPI _HAVE_PETSC
#
NOBUILD | option | ? |
#
PYTHON | python | 2.4 | /usr/bin/python
#
LINK | link | ? | mpif90
OPTL | link | ? | -fopenmp
#
CC | cc | ? | mpicc
OPTC_D | cc | ? | -c -g -fno-stack-protector -fPIC -fopenmp
OPTC_O | cc | ? | -c -O2 -fno-stack-protector -fPIC -fopenmp
INCL | include | ? | -I/opt/aster/PAR10.8/bibc/include -I/usr/include/python2.7 -I/usr/lib/python2.7/dist-packages/numpy/core/include -I$ASTER_ROOT/public/hdf5-1.8.8/include -I$ASTER_ROOT/public/med-3.0.6/includ -I/opt/ParMetis-3.2.0/METISLibe -I/opt/scotch_5.1.11_esmumps_mpi/include
#
F77 | f77 | ? | mpif90
OPTF_D | f77 | ? | -c -g -fPIC -fopenmp -fdefault-double-8 -fdefault-integer-8 -fdefault-real-8
OPTF_O | f77 | ? | -c -O2 -fPIC -fno-tree-dse -fopenmp -fdefault-double-8 -fdefault-integer-8 -fdefault-real-8
INCLF | include | ? | -I$ASTER_ROOT/PAR10.8/bibfor/include
#
F90 | f90 | ? | mpif90
OPTF90_D | f90 | ? | -c -g -ffixed-line-length-0 -x f77-cpp-input -fPIC -fopenmp -fdefault-double-8 -fdefault-integer-8 -fdefault-real-8
OPTF90_O | f90 | ? | -c -O2 -ffixed-line-length-0 -x f77-cpp-input -fPIC -fno-tree-dse -fopenmp -fdefault-double-8 -fdefault-integer-8 -fdefault-real-8
INCLF90 | include | ? | -I$ASTER_ROOT/PAR10.8/bibfor/include -I$ASTER_ROOT/PAR10.8/bibf90/include_mumps-4.9.2_mpi
INCLF90 | petsc | 2.3.3 | -I/opt/petsc-2.3.3-p16/ -I/opt/petsc-2.3.3-p16/include -I/opt/petsc-2.3.3-p16/bmake/linux-gnu-c-opt/ -I/opt/petsc-2.3.3-p16/bmake/linux-gnu-c-opt/include
#
G77_AGLA | g77 | ? | unused
#
SRCFOR | src | 11-04 | bibfor
SRCF90 | src | 11-04 | bibf90
SRCFERM | src | 11-04 | fermetur
SRCC | src | 11-04 | bibc
SRCPY | src | 11-04 | bibpyt
SRCCATA | src | 11-04 | catalo
SRCCAPY | src | 11-04 | catapy
SRCTEST | src | 11-04 | astest
SRCMAT | src | 11-04 | materiau
SRCHIST | src | 11-04 | histor
#
MAKE | build | - | nodebug
BIN_NODBG | bin | 11-04 | asteru
BIN_DBG | bin | 11-04 | asterd
BINCMDE | bin | 11-04 | commande
BINELE | bin | 11-04 | elements
BINPICKLED | bin | 11-04 | cata_ele.pickled
BINLIB_NODBG | bin | 11-04 | lib/libaster.a
BINLIB_DBG | bin | 11-04 | lib/libasterd.a
BINLIBF_NODBG | bin | 02-05 | lib/libferm.a
BINLIBF_DBG | bin | 02-05 | lib/libfermd.a
BINOBJ_NODBG | bin | 11-04 | obj/aster
BINOBJF_NODBG | bin | 11-04 | obj/ferm
BINOBJ_DBG | bin | 11-04 | obj/asterd
BINOBJF_DBG | bin | 11-04 | obj/fermd
#
REPPY | exec | 11-04 | Python
ARGPYT | exec | 03-02 | Execution/E_SUPERV.py
ARGEXE | exec | 03-02 | -eficas_path ./Python
#
MAKE_SURCH_OFFI | build | 11-04 | Lecture_Cata_Ele/make_surch_offi.py
MAKE_CAPY_OFFI | build | 11-04 | Lecture_Cata_Ele/make_capy_offi.py
#
REPOUT | exec | 11-04 | $ASTER_ROOT/outils
REPMAT | exec | 02-05 | $ASTER_ROOT/PAR10.8/materiau
REPDEX | exec | 02-05 | $ASTER_ROOT/PAR10.8/datg
#
GZIP | tool | ? | ?GZIP?
#
I18N | i18n | - |

並列版Code_Asterの構築:aster/PAR10.8のprofile.sh

2013年05月21日 18時00分05秒 | OpenCAE活用
# profile for Code_Aster version 10.8

if [ -z "$DEFINE_PROFILE_ASTER_VERSION" ]; then
export DEFINE_PROFILE_ASTER_VERSION=done
#--- ifndef DEFINE_PROFILE_ASTER_VERSION ---------------------------------------

PATH=/opt/ParMetis-3.2.0:\
/opt/aster/public/metis-edf-4.1:\
/opt/aster/public/gmsh-2.5.0-Linux:\
/opt/aster/public/med-3.0.6:\
/opt/aster/public/hdf5-1.8.8:\
/usr/lib/gcc/x86_64-linux-gnu/4.6:\
/bin:\
/usr/bin:$ASTER_ROOT/outils:$PATH
export PATH

LD_LIBRARY_PATH=/opt/scotch_5.1.11_esmumps_mpi/lib:\
/opt/mumps-4.9.2_mpi/lib:\
/opt/aster/public/metis-4.0.3/lib:\
/opt/aster/public/med-3.0.6/lib:\
/opt/aster/public/hdf5-1.8.8/lib:\
/usr/lib/x86_64-linux-gnu:\
/usr:\
/usr/lib/gcc/x86_64-linux-gnu/4.6:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH

PYTHONPATH=/opt/aster/lib/python2.7/site-packages:\
/usr/lib/python2.7/dist-packages:$PYTHONPATH
export PYTHONPATH

#?OPT_ENV?




#--- endif DEFINE_PROFILE_ASTER_VERSION ----------------------------------------
fi

DEXCS2012-Salomeの有効活用:並列版Code_Asterの構築手順(6)

2013年05月21日 14時48分40秒 | OpenCAE活用
■ PETScのコンパイル

$ cp ~/Install_Files/petsc-2.3.3-p16.tar.gz /opt
$ cd /opt
$ tar xfvz petsc-2.3.3-p16.tar.gz
$ cd petsc-2.3.3-p16

以下のconfigure.pyのコンパイル設定コマンドでは、acmlのバージョンに注意して設定を実行します。最後に「Now build and test the libraries with "make all test"」と表示されたら完了です。

$ ./config/configure.py --with-mpi-dir=/usr/lib/openmpi/lib --with-blas-lapack-lib=/opt/acml5.3.1/gfortran64/lib/libacml.a --with-debugging=0 COPTFLAGS=-O3 FOPTFLAGS=-O3 --with-shared=0 --configModules=PETSc.Configure --optionsModule=PETSc.compilerOptions --with-x=0

上記の設定にしたがって、環境変数を設定してから、makeでコンパイルを実行します。

$ PETSC_ARCH=linux-gnu-c-opt; export PETSC_ARCH
$ PETSC_DIR=/opt/petsc-2.3.3-p16; export PETSC_DIR
$ make

コンパイルが進み、最後に「Completed building libraries」と表示されたら完了です。

やっと並列版Code_Asterのコンパイルまでたどり着きました。以上の手順は全て必要な準備として完了させておいてください。

■ 並列版Code_Asterのコンパイル

ここでは先に構築した安定版10.8の単独実行形式STA10.8をベースにして、並列実行するPAR10.8を追加で構築します。

単独実行のシステム/opt/aster/STA10.8をコピーして、並列実行のPAR10.8を作成する準備をする。

$ cd /opt/aster
$ cp -ax STA10.8 PAR10.8
$ cd /opt/aster/PAR10.8

ここで修正作業が必要です。ディレクトリの中に構築用設定ファイル profile.shとconfig.txt があります。このファイルでは多数の書き換えが必要なので、このブログの別の記事「並列版Code_Asterの構築:aster/PAR10.8のprofile.sh」と「並列版Code_Asterの構築:aster/PAR10.8のconfig.txt」にまとめた設定ファイルの内容を、エディタで置き換えてください。
なおconfig.txtにおいては、acmlとpetscのバージョンは頻繁に更新されるので注意して確認し修正してください。慎重に作業を行うには、それぞれのバックアップのコピーを作った上で修正すると、後で変更箇所をdiffで確かめることができます。

$ cp profile.sh profile.sh.org
$ vi profile.sh
$ cp config.txt config.txt.org
$ vi config.txt

以上で並列版Code_Asterのコンパイルの準備ができました。プロンプトより/opt/aster/PAR10.8ディレクトリであることを確認して、以下の手順でコンパイルを進めます。まず5つのコマンドは、単独実行用にコンパイルしたものを削除しています。処理が進むと「deleting ... [OK]」と表示されてゆきます。

$ ../bin/as_run --vers=PAR10.8 --make clean
$ ../bin/as_run --vers=PAR10.8 --make clean bibf90/mumps
$ ../bin/as_run --vers=PAR10.8 --make clean bibf90/petsc
$ ../bin/as_run --vers=PAR10.8 --make clean bibf90/utilitai
$ ../bin/as_run --vers=PAR10.8 --make clean bibc/scotch

ついに目的の1つ開発版11.3の並列実行のシステムを構築します。以下のコマンドが並列実行用のコンパイルのコマンドです。

$ ../bin/as_run --vers=PAR10.8 --make

ここでは全てのCode_Asterのモジュールを並列実行用にコンパイルするので、相等に時間がかかります。システムモニターで見ると、全てのCPUコアを用いて並列コンパイルしているようです。

最後に「DIAGNOSTIC JOB : OK」 と表示されれば成功です。これで安定版10.8の並列実行モジュールがPAR10.8に構築できました。

構築したモジュールは、Code_Asterの解析起動ツールastkから利用します。ここへPAR10.8を登録します。以下の手順で行います。

$ cd /opt/aster/etc/codeaster
$ vi aster

修正は、vers : stableの下にvers : PAR10.8を追加します。この結果を確かめるために、以下の手順でastkを実行して確かめます。

$ /opt/aster/bin/astk 
(実行すると色々メッセージが出ますが取り敢えずOKで進めます)

起動したASTKの右欄で、Versionの選択にPAR10.8が確認できたら完了です。


並列版Code_Asterの構築:mumps-4.9.2_mpiのMakefile.inc

2013年05月21日 14時37分21秒 | OpenCAE活用
#SCOTCHDIR = /opt/aster/public/scotch_5.1.11_esmumps
SCOTCHDIR = /opt/scotch_5.1.11_esmumps_mpi
ISCOTCH = -I$(SCOTCHDIR)/include

# You have to choose one among the following two lines depending on
# the type of analysis you want to perform. If you want to perform only
# sequential analysis choose the first (remember to add -Dscotch in the ORDERINGSF
# variable below); for both parallel and sequential analysis choose the second
# line (remember to add -Dptscotch in the ORDERINGSF variable below)

#LSCOTCH = -L$(SCOTCHDIR)/lib -lesmumps -lscotch -lscotcherr
LSCOTCH = -L$(SCOTCHDIR)/lib -lptesmumps -lptscotch -lptscotcherr


LPORDDIR = $(topdir)/PORD/lib/
IPORD = -I$(topdir)/PORD/include/
LPORD = -L$(LPORDDIR) -lpord

#LMETISDIR = Directory containing Metis library
#LMETISDIR = /opt/aster/public/metis-4.0/lib
LMETISDIR = /opt/ParMetis-3.2.0

#IMETIS = # Metis doesn't need include files (Fortran interface avail.)

# You have to choose one among the following two lines depending on
# the type of analysis you want to perform. If you want to perform only
# sequential analysis choose the first (remember to add -Dmetis in the ORDERINGSF
# variable below); for both parallel and sequential analysis choose the second
# line (remember to add -Dparmetis in the ORDERINGSF variable below)

#LMETIS = -L$(LMETISDIR) -lmetis
LMETIS = -L$(LMETISDIR) -lparmetis -lmetis

# The following variables will be used in the compilation process.
# Please note that -Dptscotch and -Dparmetis imply -Dscotch and -Dmetis respectively.
ORDERINGSF = -Dscotch -Dmetis -Dpord -Dptscotch -Dparmetis
#ORDERINGSF = -Dscotch -Dmetis -Dpord -Dparmetis
#ORDERINGSF = -Dpord -Dmetis
#ORDERINGSF = -Dpord -Dparmetis -Dmetis
ORDERINGSC = $(ORDERINGSF)

LORDERINGS = $(LMETIS) $(LPORD) $(LSCOTCH)
IORDERINGSF = $(ISCOTCH)
IORDERINGSC = $(IMETIS) $(IPORD) $(ISCOTCH)

#End orderings
########################################################################
################################################################################

PLAT =
RM = /bin/rm -f
CC = mpicc
FC = mpif90
FL = mpif90
AR = ar vr
#RANLIB = ranlib
RANLIB = echo
SCALAP = /opt/scalapack/lib/libscalapack.a \
/opt/acml5.3.1/gfortran64/lib/libacml.a


INCPAR = -I/usr/include/openmpi $(IPORD)
LIBPAR = $(SCALAP) -L/usr/lib -lmpi -lmpi_f77

# See point 17 in the FAQ to have more details on the compilation of mpich with gfortran
INCSEQ = -I$(topdir)/libseq
LIBSEQ = -L$(topdir)/libseq -lmpiseq
#LIBBLAS = -L/usr/lib/xmm/ -lf77blas -latlas
LIBBLAS = -L/opt/acml5.3.1/gfortran64/lib/ -lacml
LIBOTHERS = -lpthread
#Preprocessor defs for calling Fortran from C (-DAdd_ or -DAdd__ or -DUPPER)
CDEFS = -DAdd_

#Begin Optimized options
#OPTF = -O -DALLOW_NON_INIT
#OPTL = -O
#OPTC = -O
OPTF = -O -Dintel_ -DALLOW_NON_INIT -O2 -ffixed-line-length-0 -x f77-cpp-input -fPIC -fopenmp
OPTL = -O -fopenmp
OPTC = -O -O2 -fno-stack-protector -fPIC -fopenmp
#End Optimized options
INC = $(INCPAR)
LIB = $(LIBPAR)
LIBSEQNEEDED =

DEXCS2012-Salomeの有効活用:並列版Code_Asterの構築手順(5)

2013年05月21日 12時44分38秒 | OpenCAE活用
続いて、安定版10.8を用いて、単独実行と並列実行のCode_Asterソルバーを構築します。

以下の手順では、開発版の構築手順と同様に、最初に安定版10.8の単独実行を構築した後で並列実行を構築します。全体としては、以下の4種類のシステムを構築します。
  開発版11.3 : 単独実行 STA11.3(stable)  並列実行 PAR11.3
  安定版10.3 : 単独実行 STA10.8(stable)  並列実行 PAR10.8

先に行った開発版の構築の続きとして進めますので、重複する説明は省略します。

■ 必要なファイル2個のダウンロード

Code_Aster : aster-full-src-10.8.0-3.noarch.tar.gz → http://www.code-aster.org/V2/spip.php?article272 (最新版は10.8ですが、パッチレベルは更新される場合もあります)
PETSc : petsc-2.3.3-p16.tar.gz → http://ftp.mcs.anl.gov/pub/petsc/release-snapshots/(沢山あるファイル一覧から安定版の指定のバージョンをダウンロードします。)

以上2つのファイルを~/Install_Filesに集めて置きます。

ACMLは、開発版でacml-5-3-1-gfortran-64bit.tgzより構築したツールを流用します。
ScaLAPACKは、開発版でscalapack_installer.tgzより構築したツールを流用します。
ParMETISは、開発版でParMetis-3.2.0.tar.gzより構築したツールを流用します。

■ 単独版Code_Asterのコンパイル

まずは、安定版の単独実行Code_Asterを/optにコンパイルします。計算の高速化のために、数値計算ライブラリは開発版でコンパイルしたACMLを用います。この設定のために、sedコマンドで、setuup.cfgを書き換えます。Code_AsterとACMLのバージョンに注意します。

$ cd ~/Install_Files
$ tar xfvz aster-full-src-10.8.0-3.noarch.tar.gz
$ cd aster-full-src-10.8.0/
$ sed -i "s:PREFER_COMPILER\ =\ 'GNU':PREFER_COMPILER\ =\'GNU_without_MATH'\nMATHLIB=\ '-L/opt/acml5.3.1/gfortran64/lib -lacml':g" setup.cfg

実際のコンパイルは次のコマンドで実行します。

$ python setup.py install

コンパイルが進み、継続を確認するのでyで進めます。さらに確認や構築が進みます。なお開発版でコンパイルしたツールで、安定版でも利用するものが/opt/aster/publicの中にあり、以下の5つのツールは残して再利用するので、確認ではnで進めます。続いて警告などが出ますが、先に進めます。結構な時間がかかります。
hdf5, med, gmsh, scotch, metis

エラー表示がなく「Installation of : Code_Aster + 13 of its prerequisites」が表示されたらひとまず完了です。なおインストール先は/opt/asterになり、この中にSTA10.8ができており、これが安定版10.8の単独実行ソルバーになります。

※ 実は、python setup.py installを初めてに実行したときは、途中でpythonが止まらなくなって中断して、STA10.8などを削除してもう一度実行したら最後まで構築が進みました。原因は分かりません。この時は追加で、metis-edf, mumps の2つも残す確認をしました。

■ MUMPSのコンパイル

インストールファイルのディレクトリ~/Install_Filesにある展開したCode_Asterのソースファイル中にあるmumps-4.10.0を、/optにコピーしてmpiコンパイラでコンパイルして並列処理のツールを構築します。なおasterのソースに含まれるmumpsのバージョンに注意してください。

$ cp ~/Install_Files/aster-full-src-10.8.0/SRC/mumps-4.9.2-2.tar.gz /opt/
$ cd /opt
$ tar xfvz mumps-4.9.2-2.tar.gz
$ mv mumps-4.9.2 mumps-4.9.2_mpi
$ cd mumps-4.9.2_mpi/

ここで修正作業が必要です。ディレクトリの中に構築用設定ファイル Makefile.inc があります。このファイルでは多数の書き換えが必要なので、このブログの別の記事「並列版Code_Asterの構築:mumps-4.9.2_mpiのMakefile.inc」にまとめたmumps-4.9.2_mpi用のMakefile.incの内容を、エディタで置き換えてください。なおacmlのバージョンは頻繁に更新されるので注意してください。慎重に作業を行うには、Makefile.incのバックアップをMakefile.inc.orgにコピーして作った上で修正すると、後で変更箇所をdiffで確かめることができます。

$ cp Makefile.inc Makefile.inc.org
$ vi Makefile.inc

以上の準備ができたら、makeでコンパイルを実行します。

$ make all

途中で警告が出てもコンパイルは進みますので、暫く待ちます。最後に「mpif90 -o zsimpletest (途中省略) -lpthread / make[1]: ディレクトリ `/opt/mumps-4.9.2_mpi/examples' から出ます」と表示されたら完了です。

DEXCS2012-Salomeの有効活用:並列版Code_Asterの構築手順(4)

2013年05月21日 12時14分10秒 | OpenCAE活用
あともう少しで開発版11.3の並列実行のシステムが完成です。

■ PETScのコンパイル

PETScは、ポータブルで拡張性のある科学技術計算用のツール集であり、並列処理の演算にも対応しています。以下の手順では、ダウンロードしたpetscのバージョンに注意してください。

$ cp ~/Install_Files/petsc-3.3-p7.tar.gz /opt
$ cd /opt
$ tar xfvz petsc-3.3-p7.tar.gz
$ cd petsc-3.3-p7

以下のconfigure.pyのコンパイル設定コマンドでは、acmlのバージョンに注意して設定を実行します。最後に「Configure stage complete.」と表示されたら完了です。

$ ./config/configure.py --with-mpi-dir=/usr/lib/openmpi/lib --with-blas-lapack-lib=/opt/acml5.3.1/gfortran64/lib/libacml.a --with-debugging=0 COPTFLAGS=-O3 FOPTFLAGS=-O3 --configModules=PETSc.Configure --optionsModule=PETSc.compilerOptions --with-x=0

上記の設定にしたがって、makeでコンパイルを実行します。

$ make PETSC_DIR=/opt/petsc-3.3-p7 PETSC_ARCH=arch-linux2-c-opt all

コンパイルが進み、最後に「Completed building libraries」と表示されたら完了です。「Now to check if the libraries are working do」とあるので続いて、同様にmakeを用いて、コンパイルが成功したことを確かめます。

$ make PETSC_DIR=/opt/petsc-3.3-p7 PETSC_ARCH=arch-linux2-c-opt test

これも最後に「Completed test examples」と表示されたら完了です。

やっと並列版Code_Asterのコンパイルまでたどり着きました。以上の手順は全て必要な準備として完了させておいてください。

■ 並列版Code_Asterのコンパイル

ここでは先に構築した開発版11.3の単独実行形式STA11.3をベースにして、並列実行するPAR11.3を追加で構築します。まずCode_Asterの実行コマンドasrunの設定ファイル/opt/aster/etc/codeaster/asrunをテキストエディタで開いて修正します。

$ cd /opt/aster/etc/codeaster
$ vi asrun

設定ファイル中のMPIの設定で、mpi_get_procid_cmdの部分を以下のように書き換えます。
mpi_get_procid_cmd : echo $OMPI_COMM_WORLD_RANK

使用するプロセッサー数が32を超える場合は、下記の部分も数字を書き換えます。今回は4なので必要ありませんでした。
batch_mpi_nbpmax : 32
interactif_mpi_nbpmax : 32

単独実行のシステム/opt/aster/STA11.3をコピーして、並列実行のPAR11.3を作成する準備をする。

$ cd /opt/aster
$ cp -ax STA11.3 PAR11.3
$ cd /opt/aster/PAR11.3

ここで修正作業が必要です。ディレクトリの中に構築用設定ファイル profile.shとconfig.txt があります。このファイルでは多数の書き換えが必要なので、このブログの別の記事「並列版Code_Asterの構築:aster/PAR11.3のprofile.sh」と「並列版Code_Asterの構築:aster/PAR11.3のconfig.txt」にまとめた設定ファイルの内容を、エディタで置き換えてください。
なおconfig.txtにおいては、acmlとpetscのバージョンは頻繁に更新されるので注意して確認し修正してください。慎重に作業を行うには、それぞれのバックアップのコピーを作った上で修正すると、後で変更箇所をdiffで確かめることができます。

$ cp profile.sh profile.sh.org
$ vi profile.sh
$ cp config.txt config.txt.org
$ vi config.txt

以上で並列版Code_Asterのコンパイルの準備ができました。プロンプトより/opt/aster/PAR11.3ディレクトリであることを確認して、以下の手順でコンパイルを進めます。まず5つのコマンドは、単独実行用にコンパイルしたものを削除しています。処理が進むと「deleting ... [OK]」と表示されてゆきます。

$ ../bin/as_run --vers=PAR11.3 --make clean
$ ../bin/as_run --vers=PAR11.3 --make clean bibf90/mumps
$ ../bin/as_run --vers=PAR11.3 --make clean bibf90/petsc
$ ../bin/as_run --vers=PAR11.3 --make clean bibf90/utilitai
$ ../bin/as_run --vers=PAR11.3 --make clean bibc/scotch

ついに目的の1つ開発版11.3の並列実行のシステムを構築します。以下のコマンドが並列実行用のコンパイルのコマンドです。

$ ../bin/as_run --vers=PAR11.3 --make

ここでは全てのCode_Asterのモジュールを並列実行用にコンパイルするので、相等に時間がかかります。システムモニターで見ると、全てのCPUコアを用いて並列コンパイルしているようです。

最後に「DIAGNOSTIC JOB : OK」 と表示されれば成功です。これで開発版11.3の並列実行モジュールがPAR11.3に構築できました。

構築したモジュールは、Code_Asterの解析起動ツールastkから利用します。ここへPAR11.3を登録します。以下の手順で行います。

$ cd /opt/aster/etc/codeaster
$ vi aster

修正は、vers : stableの下にvers : PAR11.3を追加します。この結果を確かめるために、以下の手順でastkを実行して確かめます。

$ /opt/aster/bin/astk 
(実行すると色々メッセージが出ますが取り敢えずOKで進めます)

起動したASTKの右欄で、Versionの選択にPAR11.3が確認できたら完了です。


並列版Code_Asterの構築:aster/PAR11.3のconfig.txt

2013年05月21日 10時19分47秒 | OpenCAE活用
# Configuration file
#
# Fields are separated by a " | " (the space is significative)
#
# Keywords :
# ENV_SH : environment script (absolute filename or relative to current directory)
# LIB : archiver
# BIBL : librairies linked with Code_Aster (with options -L/-l eventually)
# PYTHON : Python binary
# DEVEL : Set to no to tell that this version does not allow user developments.
# Typically for a binary distribution (default is yes)
# LINK : linker command
# OPTL : linker options
# CC : C compiler command
# DEFS : pre-processor #define commands separated by space or comma
# they will be added to all compilation options OPTx_x
# OPTC_D : C compiler options using DEBUG mode
# OPTC_O : C compiler options using NODEBUG mode
# INCL : C include flags
# F77 : Fortran compiler command
# OPTF_D : Fortran compiler options using DEBUG mode
# OPTF_O : Fortran compiler options using NODEBUG mode
# INCLF : Fortran include flags
# F90 : Fortran 90 compiler command
# OPTF90_D : Fortran 90 compiler options using DEBUG mode
# OPTF90_O : Fortran 90 compiler options using NODEBUG mode
# INCLF90 : Fortran 90 include flags
# G77_AGLA : used only for configuration management of EDF version
# SUPERV : Code_Aster Python packages
# REPPY : name of 'bibpyt' in the temporary execution directory
# ARGPYT : main python module
# ARGEXE : arguments passed to Code_Aster executable
# REPOUT : tools directory
# MAKE_SURCH_OFFI/MAKE_CAPY_OFFI : Python modules to compiling elements catalogs
# CRP / CRS : tools to check source files and programming rules
# ID_PERF : a label to identify a group of machines (use by TEST_TEMPS command)
#
ID_PERF | id | - | dexcs-parallel
#
ENV_SH | env | - | profile.sh
#
LIB | ar | ? | /usr/bin/ar -rv
#
BIBL | python | 2.4 | -L/usr/lib -L/usr/lib/python2.7/config -lpython2.7
BIBL | med | 2.3.5 | $ASTER_ROOT/public/med-3.0.6/lib/libmed.a
BIBL | hdf5 | 1.6.5 | $ASTER_ROOT/public/hdf5-1.8.8/lib/libhdf5.a
BIBL | zmat | 8.4 |
BIBL | mumps | ? | -L/opt/mumps-4.10.0_mpi/lib -ldmumps -lzmumps -lsmumps -lcmumps -lmumps_common -lpord -L/opt/ParMetis-3.2.0 -lparmetis -lmetis -L/opt/scotch_5.1.11_esmumps_mpi/lib -lptesmumps -lptscotch -lptscotcherr
BIBL | scalap | 2.0.2 | /opt/scalapack/lib/libscalapack.a /opt/acml5.3.1/gfortran64/lib/libacml.a
BIBL | metis | ? | -L/opt/ParMetis-3.2.0 -lparmetis -lmetis
BIBL | petsc | 3.2 | -L/opt/petsc-3.3-p7/arch-linux2-c-opt/lib -lpetsc
BIBL | scotch | 5.1.11| -L/opt/scotch_5.1.11_esmumps_mpi/lib -lptesmumps -lptscotch -lptscotcherr
BIBL | math | ? | -L/opt/acml5.3.1/gfortran64/lib -lacml
BIBL | mpi | 2 | -L/usr/lib/openmpi/lib -lmpi -lmpi_f90
BIBL | c++ | ? | -L/usr/lib/gcc/x86_64-linux-gnu/4.6 -lstdc++
BIBL | sys | ? | -Wl,--allow-multiple-definition -Wl,--export-dynamic -L/usr/lib/x86_64-linux-gnu -ldl -L/usr/lib/x86_64-linux-gnu -lutil -L/usr/lib/x86_64-linux-gnu -lm -L/usr/lib/x86_64-linux-gnu -lpthread -L/usr/lib/x86_64-linux-gnu -lz
#
DEFS | defined | ? | LINUX64 _USE_OPENMP H5_NO_DEPRECATED_SYMBOLS _HAVE_METIS _HAVE_MUMPS _USE_MPI _HAVE_PETSC
#
NOBUILD | option | ? |
#
PYTHON | python | 2.4 | /usr/bin/python
#
LINK | link | ? | mpif90
OPTL | link | ? | -fopenmp
#
CC | cc | ? | mpicc
OPTC_D | cc | ? | -c -g -fno-stack-protector -fPIC -fopenmp
OPTC_O | cc | ? | -c -O2 -fno-stack-protector -fPIC -fopenmp
INCL | include | ? | -I$ASTER_ROOT/PAR11.3/bibc/include -I/usr/include/python2.7 -I/usr/lib/python2.7/dist-packages/numpy/core/include -I$ASTER_ROOT/public/hdf5-1.8.8/include -I$ASTER_ROOT/public/med-3.0.6/include -I/opt/ParMetis-3.2.0/METISLib -I/opt/scotch_5.1.11_esmumps_mpi/include
#
F77 | f77 | ? | mpif90
OPTF_D | f77 | ? | -c -g -fPIC -fopenmp -fdefault-double-8 -fdefault-integer-8 -fdefault-real-8
OPTF_O | f77 | ? | -c -O2 -fPIC -fno-tree-dse -fopenmp -fdefault-double-8 -fdefault-integer-8 -fdefault-real-8
INCLF | include | ? | -I$ASTER_ROOT/PAR11.3/bibfor/include
#
F90 | f90 | ? | mpif90
OPTF90_D | f90 | ? | -c -g -ffixed-line-length-0 -x f77-cpp-input -fPIC -fopenmp -fdefault-double-8 -fdefault-integer-8 -fdefault-real-8
OPTF90_O | f90 | ? | -c -O2 -ffixed-line-length-0 -x f77-cpp-input -fPIC -fno-tree-dse -fopenmp -fdefault-double-8 -fdefault-integer-8 -fdefault-real-8
INCLF90 | include | ? | -I$ASTER_ROOT/PAR11.3/bibfor/include -I$ASTER_ROOT/PAR11.3/bibf90/include_mumps-4.10.0_mpi
INCLF90 | petsc | 3.2 | -I/opt/petsc-3.3-p7/include -I/opt/petsc-3.3-p7/arch-linux2-c-opt/include
#
G77_AGLA | g77 | ? | unused
#
SRCFOR | src | 11-04 | bibfor
SRCF90 | src | 11-04 | bibf90
SRCFERM | src | 11-04 | fermetur
SRCC | src | 11-04 | bibc
SRCPY | src | 11-04 | bibpyt
SRCCATA | src | 11-04 | catalo
SRCCAPY | src | 11-04 | catapy
SRCTEST | src | 11-04 | astest
SRCMAT | src | 11-04 | materiau
SRCHIST | src | 11-04 | histor
#
MAKE | build | - | nodebug
BIN_NODBG | bin | 11-04 | asteru
BIN_DBG | bin | 11-04 | asterd
BINCMDE | bin | 11-04 | commande
BINELE | bin | 11-04 | elements
BINPICKLED | bin | 11-04 | cata_ele.pickled
BINLIB_NODBG | bin | 11-04 | lib/libaster.a
BINLIB_DBG | bin | 11-04 | lib/libasterd.a
BINLIBF_NODBG | bin | 02-05 | lib/libferm.a
BINLIBF_DBG | bin | 02-05 | lib/libfermd.a
BINOBJ_NODBG | bin | 11-04 | obj/aster
BINOBJF_NODBG | bin | 11-04 | obj/ferm
BINOBJ_DBG | bin | 11-04 | obj/asterd
BINOBJF_DBG | bin | 11-04 | obj/fermd
#
REPPY | exec | 11-04 | Python
ARGPYT | exec | 03-02 | Execution/E_SUPERV.py
ARGEXE | exec | 03-02 | -eficas_path ./Python
#
MAKE_SURCH_OFFI | build | 11-04 | Lecture_Cata_Ele/make_surch_offi.py
MAKE_CAPY_OFFI | build | 11-04 | Lecture_Cata_Ele/make_capy_offi.py
#
REPOUT | exec | 11-04 | $ASTER_ROOT/outils
REPMAT | exec | 02-05 | $ASTER_ROOT/PAR11.3/materiau
REPDEX | exec | 02-05 | $ASTER_ROOT/PAR11.3/datg
#
GZIP | tool | ? | ?GZIP?
#
I18N | i18n | - |