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

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

DEXCS-OpenFOAMの有効活用:GPGPUによるDEM解析(2)

2011年11月22日 17時59分32秒 | DEXCS情報
ここではNVIDIAのサイトからCUDAのパッケージをインストールします。なお利用するのはVer.3.1で、Ubuntu9.10の64bit用です。最新はVer.4.0があるようですが、ここでは実績のある構成で進めます。

■CUDA Toolkitのダウンロード
まずは以下のダウンロードサイトに接続します。
http://developer.nvidia.com/object/cuda_3_1_downloads.html#Linux
この中で、CUDA Toolkit for Ubuntu Linux 9.10の64-bitをダウンロードします。
ファイルcudatoolkit_3.1_linux_64_ubuntu9.10.runはホームディレクトリに保存されています。
以下の作業は、ホームディレクトリで行います。

■CUDAのインストール先を準備する
ここでは、CUDAに関連する全てを/opt/CUDAにインストールすることにします。ディレクトリを以下のとおり準備します。なお一般ユーザーが自由に読み書きできるようにしておきます。
$ sudo mkdir /opt/CUDA
$ sudo chmod 777 /opt/CUDA

■CUDA Toolkitのインストール
以下のコマンドを実行してインストールします。
$ chmod a+x cudatoolkit_3.1_linux_64_ubuntu9.10.run
$ sudo ./cudatoolkit_3.1_linux_64_ubuntu9.10.run
ここでインストール先ディレクトリを聞かれますので、/opt/CUDAとします。

最後に色々な注意などが表示され、Installation Completeと表示されたらインストール成功です。ここでインストールされたファイルなどは、全て/opt/CUDA/cudaに配置され、削除するときはこのディレクトリを全て削除します。またリリースノートなどは、/opt/CUDA/cuda/docにあります。

■CUDA Toolkitのパスの設定
インストールの注意に従ってパスを以下のように設定します。

・LD_LIBRARY_PATH
2つの方法がありますが、設定ファイルを使います。
$ sudo vi /etc/ld.so.conf.d/cuda.confで設定ファイルを新しく作ります。
内容は以下の2行です。
 /opt/CUDA/cuda/lib64
 /opt/CUDA/cuda/lib
この設定を有効にするために、以下のコマンドを実行します。
$ sudo ldconfig

・PATH
以下の手順で設定ファイルを使います。
$ sudo vi /etc/profile.d/cuda.shで設定ファイルを新しく作ります。
内容は以下の2行です。
 export PATH=/opt/CUDA/cuda/bin:$PATH
 export LIBRARY_PATH=/usr/lib/nvidia-current:$LIBRARY_PATH
この設定を有効にするために、ログアウトして再ログインします。

以上の設定を確認するために、以下のコマンド実行します。
$ printenv | grep PATH
ここで、上記で設定したPATH,LIBRARY_PATHを確認します。
$ ldconfig -p | grep CUDA
ここで、上記で設定した/opt/CUDA/cuda/lib,lib64を確認します。

■GPU Computing SDKのダウンロード
次に追加のライブラリやサンプルプログラムなどをインストールします。先のNVIDIAのダウンロードサイトから、GPU Computing SDK code samplesのdownloadからダウンロードします。
http://developer.nvidia.com/object/cuda_3_1_downloads.html#Linux
ファイルgpucomputingsdk_3.1_linux.runはホームディレクトリに保存されています。

■GPU Computing SDKのインストール
以下のコマンドを実行してインストールします。
$ chmod a+x gpucomputingsdk_3.1_linux.run
$ ./gpucomputingsdk_3.1_linux.run
ここでインストール先ディレクトリを聞かれますので、/opt/CUDA/SDKとします。さらにCUDAのインストール先を確認されます。defaultで/opt/CUDA/cudaと正しく表示されているのでEnterで進めます。

最後に色々な注意などが表示され、Installation Completeと表示されたらインストール成功です。ここでインストールされたファイルなどは、全て/opt/CUDA/SDKに配置され、削除するときはこのディレクトリを全て削除します。また先に設定したPATH,LIBRARY_PATHの設定が正しいか確認されます。

ここでLD_LIBRARY_PATHの設定を、以下のとおりに追加します。
$ sudo vi /etc/profile.d/cuda.sh
内容は以下のとおり
export LD_LIBRARY_PATH=/opt/CUDA/cuda/lib:$LD_LIBRARY_PATH
ここでもログアウトして再ログインしておきます。

ここで上記で用いた2つのインストール用ファイルは、念のため/opt/CUDAに保存しておきます。

■サンプルプログラムのビルド
サンプルのソースがある/opt/CUDA/SDK/Cでビルドします。
$ cd /opt/CUDA/SDK/C
$ make
ビルド作業がしばらく続きます。最後にFinished building allと表示されたら、ビルドが完了したことになります。

サンプルプログラムの説明は、/opt/CUDA/SDK/CにあるSample.htmlにまとめられています。また実行形式は、/opt/CUDA/SDK/C/bin/linux/releaseに沢山作られています。
この実行形式にはパスを通していないので、ディレクトリを移動して実行します。例としてnbodyを実行してみます。
$ cd /opt/CUDA/SDK/C/bin/linux/release
$ ./nbody
銀河の星が爆発するような表示が出されると思います。これでCUDAのインストールが完了です。

DEXCS-OpenFOAMの有効活用:GPGPUによるDEM解析(1)

2011年11月20日 20時57分56秒 | DEXCS情報
今取り組んでいるDEM解析は、LIGGGHTSというシステムを用いていますが、これはLAMMPSという分子動力学のシステムがベースになっています。多数の粒子の相互関係を計算するので、非常に計算量が多く計算時間もかかります。

そこで最近流行のGPGPUの活用を試みたいと思います。どうもLAMMPSの方は古くから使われているシステムでGPGPUに対応する改良が既に行われているようなので、これに期待して最終的にはLIGGGHTSをGPGPUで高速処理することが目標です。

GPGPUの開発にはNVIDIAの提供するCUDAを用いるのですが、これはWindows/Linux/MacOSなどが公開されており自由に選択できます。今回は、LIGGGHTSとOpenFOAMとの連携であるCFDEMを目標にUbuntuのLinuxで構築することにします。

ベースですが、将来的にOpenFOAMと連携することを考えて近日公開予定のDEXCS20110forOpenFOAMを用いることにしました。これは先に解説したLIGGGHTSの構築検証ベースでもあります。要は、Ubuntu10.04-64bitということで考えてください。

構築に用いるハードウエアは以下のようなものです。CPUは4コアですがちょっと古いですね。メモリは検証用でCPUにあわせてほどほどです。
CPU: Intel Core2Quad Q8200 2.3GHz
RAM: 4GB
HDD: 500GB
さて問題のGPUですが、NVIDIA GeForce GTS 250です。こちらもちょっと古いですが検証用システムの仕様です。
GPU: NVIDIA GeForce GTS 250 1.8GHz 1024MB-RAM 128-CUDAcore

■ベースの構築
DEXCS2011forOpenFOAM(64)を用いてベースを用意します。要はUbuntu10.04(64)ですので、取り敢えず公開前の場合にはこれをインストールしてください。DEXCS2011forOpenFOAMについては、詳細なインストール手順が以下に公開されていますので、これに従って進めます。
http://mogura7.zenno.info/~et/collect/CAE/DEXCS/2011/DEXCS2011_Install.pdf

ネットワークの設定を済ませ、アップデートマネージャで再チェックを行い、最新の状態にしておきます。

■NVIDIAドライバの導入
上記のインストールが成功していれば、GUIが利用できて何らかのグラフィックのドライバが動作していると思いますが、ここで最新のNVIFIA GPUに対応したドライバを導入します。以下のコマンドを実行して、ネットワークからapt-getでインストールします。途中で確認があったら y で進めます。
$ sudo add-apt-repository ppa:ubuntu-x-swat/x-updates
$ sudo apt-get update
$ sudo apt-get install nvidia-current
上記では、加えてnvidia-settingsもインストールされます
$ sudo apt-get install nvidia-current-modaliases

インストールが成功すると、システム⇒システム管理にNVIDIA X Server Settingsが追加されます。メニューからこのツールを実行すると、注意のメッセージが表示され、X configuration fileを修正するため、以下のコマンドを実行して、X Serverを再起動せよと指示がでます。
$ sudo nvidia-xconfig
新しいX Configuration fileが/etc/X11/xorg.confに作られたと表示されるので、X Serverの再起動するため、先のツールを終了して再起動します。X Severを変更したため注意のメッセージが出た場合には、Xをリスタートする選択します。

再度、NVIDIA X Server Settingsを起動すると、画面の解像度の設定などが確認できます。また利用するGPUの情報も確認できます。

■CUDA利用に必要なライブラリなど
以下のコマンドで、CUDAのコンパイルに必要なライブラリをインストールします。
$ sudo apt-get install freeglut3-dev
$ sudo apt-get install libxi-dev
$ sudo apt-get install libxmu-dev

以上で準備は終わりです。次はNVIDIAのサイトからCUDAのパッケージをインストールします。

DEXCS-OpenFOAMの有効活用:LIGGGHTSによるDEM解析(2)

2011年11月17日 22時06分08秒 | DEXCS情報
コンパイルにより作られたliggghtsを用いてDEM解析のサンプルを実行し、結果の可視化までを説明します。

■サンプルケースの用意
ダウンロードしたLIGGGHTSのパッケージには、/opt/LIGGGHTS/liggghts/examples/LIGGGHTSにたくさんのサンプルが用意されています。
コンベア上に粒子が移動する例題conveyorを試してみます。

ホームディレクトリに作業用ディレクトリを用意します。
$ mkdir ~/DEMwork
上記のサンプルをコピーします。
$ cp -r /opt/LIGGGHTS/liggghts/examples/LIGGGHTS/conveyor ~/DEMwork

■サンプルケースの実行
サンプルケースのディレクトリに移動します。
$ cd ~/DEMwork/conveyor
入力ファイルin.conveyorを確認したら、次のようにして単体実行できます。
$ liggghts < in.conveyor
計算結果は、postディレクトリのdump.conveyorに保存されます。
なお、実行環境が4coreCPUならば、MPIを用いて並列実行も以下のように可能です。
$ mpirun -np 4 /opt/LIGGGHTS/bin/liggghts < in.conveyor

■可視化データ変換ツールpizza.pyのインストール
このpizza.pyを用いて、liggghtsの計算結果dump.conveyorをVTKに変換して、ParaViewで可視化結果を確認します。

まずはpizza.pyをインストールします。以下のサイトよりPizza.py Toolkitにチェックを入れて、ダウンロードボタンを押して入手します。/opt/LIGGGHTSにおき、パッケージを展開します。
http://www.sandia.gov/~sjplimp/download.html
$ tar xvfz pizza.tar.gz
これでツールが/opt/LIGGGHTS/pizza-70ct11にインストールされました。
※ダウンロードした時期によってOctではなくDecになりますが、同様な手順で進めるので読み替えてください。

次にシステムのpythonを利用するために、環境に合わせてpizza.pyを変更するため、以下のディレクトリに移動します。
$ cd /opt/LIGGGHTS/pizza-7Oct11/src

pythonがインストールされている場所をwhereisで確認すると/usr/bin/pythonなので、pizza.pyの先頭を以下のようにエディタで変更します。
$ vi pizza.py
 #!/usr/bin/python -i

この場所/opt/LIGGGHTS/pizza-7Oct11/srcにコマンドパスを通しておきます。
$ vi ~/.bashrc
 export PATH=/opt/LIGGGHTS/pizza-7Oct11/src:$PATH
この.bashrcを有効にするために以下のsourceを実行します。
$ source ~/.bashrc

■pizza.pyの実行環境の追加
このpizza.pyでは解析データを可視化するために、いくつかの補足ライブラリが必要です。以下の項目をパッケージマネージャで追加します。

システム⇒システム管理⇒Synapticパッケージマネージャを起動します。各項目を検索して、適用しインストールします。
・Pmw: python-pmw, python-pmw-doc
・ImageTk: python-imaging-tk, python-imaging-tk-dbg
・OpenGL: python-opengl

ここでToglについては、liblablgl-ocaml, liblabgl-ocaml-devなどをインストールしたのですが、pythonからToglを正しく読み込めないようです。ただし今回はVTKへの変換だけを行い直接にOpenGLの可視化は行わないので、pizza.pyのパスを通した/opt/LIGGGHTS/pizza-7Oct11/srcより、gl.py,gl.pycの2つを上のディレクトリに移動しておきます。
※H231225の時点でダウンロードした場合は、pizza-8Dec11が作られますが、この場合には上記のエラーは出ないので、glの移動は不要でした。

■pizza.pyによる可視化データ作成
先に実行したサンプルconveyorのディレクトリ~/DEMwork/coveyorに移動します。
pizza.pyの動作を記述するPzzaScriptを、以下の内容を記述したファイルpizzascriptとして作成します。
$ vi pizzascript
 d=dump("post/dump.conveyor")
 v=vtk(d)
 v.many("post/dump")
 exit()

データ作成を以下の様に実行します。
$ pizza.py -f pizzascript
色々なメッセージが出力されますが、Ctrl-Dで抜けてから、サンプルの結果が保存されているpostディレクトリの中に、dump0000.vtk ... dump0199.vtkが作成されています。

ParaViewを利用して結果を確認します。
$ paraview
起動したら、ファイルメニューから上記のVTKファイルを選択して、Applyで表示して調整すると、赤い粒子が落ちてきてコンベアーの上を移動する様子が分かります。

以上で最も基本となる動作が確認できました。

DEXCS-OpenFOAMの有効活用:LIGGGHTSによるDEM解析(1)

2011年11月17日 12時13分44秒 | DEXCS情報
ここでは、DEM解析のソフトウエアの1つであるLIGGGHTSを利用する手順を説明します。OpenFOAM-2.0でもDEM解析が可能ですが、これは粒子を1種類しか指定できない(今の知識では)ので、物体の衝突などを扱うことが難しいと思うのです。

そこで、分子動力学のソフトウエアLAMMPSをベースにして、DEM解析を可能にしたLIGGGHTSを利用してみようと思います。このソフトウエアは、OpenFOAMと連携することで、CFD+DEMつまり流体中の粒子の運動を解析できるそうで、CFDEMとして公開されています。

最終的にはCFDEMを目指すので、OpenFOAMがインストールされている状態を基本とするために、DEXCS2011forOpenFOAMを用いて動作環境を構築します。これは近々公開されるDEXCSで、Ubuntu10.04+OpenFOAM2.0.xの環境となっており、同等の環境ならば同じ手順でできると思います。ここでは64bit環境で構築しています。

なおこの内容は、PENGUINITIS さんのウエブに公開されている情報を手本にして作成しています。
http://www.geocities.jp/penguinitis2002/study/LIGGGHTS/LIGGGHTS/LIGGGHTS.html

■ベースOSの準備
DEXCS2011forOpenFOAMをVMware上に構築します。たぶんDEXCS2010forOpenFOAMにOpenFOAM2.0.xを導入した状態でも同じだと思います。要は、Ubuntu10.04+OpenFOAM2.0.xを用意します。まず最初のLIGGGHTSではOpenFOAMは利用しません。最初にシステム⇒システム管理⇒アップデートマネージャでシステムを更新しておきます。

■コンパイルの準備
LIGGGHTSをコンパイルするには、FFTWとMPIが必要になります。FFTWは、C言語で作られた高速フーリエ変換のツール集で、MPIは並列処理を実現する基盤システムです。ここで用いているDEXCS2011での状況で確認してみます。

システム⇒システム管理⇒Synapticパッケージマネージャを起動して、再読込でパッケージ情報を最新にしておきます。検索からfftwを探してみます。色々と見つかりますが、バージョン2のfftw-dev, fftw-docs, fftw2の3つを選択してインストール指定します。適用を押してダウンロードとインストールを進めます。

次にOpenMPIを準備します。パッケージマネージャでopenmpiを検索して、すでにインストールされているlibopenmpi-dev,libopenmpi1.3,openmpi-commonに加えて、バージョン1.4.1-2に関する4つlibopenmpi-dbg,openmpi-bin,openmpi-checkpoint,openmpi-docをインストール指定します。適用を押してダウンロードとインストールを進めます。環境によっては既にインストールされているパッケージもあります。

LIGGGHTSのコンパイルでMPIのインストール位置を設定するので調べておきます。findでopenmpiを検索すると、/usr/lib/openmpiの中にincludeとlibがありました。

コンパイルは/optにLIGGGHTSを作って行うことにするので、以下の準備をします。
$ sudo mkdir /opt/LIGGGHTS
$ sudo chmod 777 /opt/LIGGGHTS

■LIGGGHTSの入手
gitで最新版のソフトウエアを入手します。/opt/LIGGGHTSの中で、以下のコマンドでダウンロードします。
$ git clone git://cfdem.git.sourceforge.net/gitroot/cfdem/liggghts
しばらく待つと、/opt/LIGGGHTSの中にliggghtsディレクトリができる。

MakeFileが多数用意されているディレクトリに移る。
$ cd liggghts/src/MAKE

■Makefileの修正
最も状況に近いMakefile.linuxを修正して使うのでバックアップを取る。
$ cp Makefile.linux Makefile.linux.org

エディタviなどでMakefile.linuxを状況に合わせて修正する。
$ vi Makefile.linux

変更点は以下の4つ
・コンパイラはgccとする
 #CC = icc
 CC = gcc
・リンカーはgccとする
 #LINK = icc
 LINK = gcc
・MPIのincludeの設定
 #MPI_INC = -DMPICH_IGNORE_CXX_SEEK
 MPI_INC = -DMPICH_IGNORE_CXX_SEEK -I/usr/lib/openmpi/include
・MPIのlibの設定
 #MPI_LIB = -lmpich -lpthread
 MPI_LIB = -L/usr/lib -lmpi -L/usr/lib/openmpi/lib -lmpi_cxx -lpthread

■LIGGGHTSのコンパイルとインストール
先のMakefileを修正した場所の上(/opt/LIGGGHTS/liggghts/src)に移動し、linuxをターゲットにMakeを実行する。
$ cd ..
$ make linux

コンパイルに成功すると/opt/LIGGGHTS/liggghts/srcに実行形式lmp_linuxが作られ、sizeで状態が表示される。
次にインストール用のディレクトリを作り、上記の実行形式をliggghtsとしてコピーしてこれを利用する。
$ mkdir -p /opt/LIGGGHTS/bin
$ cp lmp_linux /opt/LIGGGHTS/bin/liggghts

■コマンドパスを通しておく
まずliggghtsのパスを設定する。~/.bashrcの最後に以下を追加する。
export PATH=/opt/LIGGGHTS/bin:$PATH
次に結果の可視化で用いるparaviewのパスを同様な方法で設定する。
export PATH=/opt/OpenFOAM/ThirdParty-2.0.x/build/linux64Gcc/paraview-3.10.1/bin:$PATH

設定を有効にするために、ログアウトして再ログインしておきます。

DEXCS-Salomeの有効活用:最新版2011.2のインストール(1)

2011年08月29日 20時57分07秒 | DEXCS情報
SALOME-Mecaは、定期的に更新版を公開していますが、平成23年8月下旬に最新版 2011.2-64bit が利用可能となりましたので、DEXCS-Salomeにインストールして見ます。現在のDEXCS-Salome-A2-64 では、SALOME-Meca 2010.2-64bit が利用できますが、これは SALOME-5.1.4 + STA-10.2 の構成ですが、この最新版では、SALOME-6.3.0 + STA-10.5 となっています。今回は、SALOME-6 に注目しています。

ベースのシステムは DEXCS2010-Salome-A2(64) なのですが、OSとしてはUbuntu 10.04(64) になります。上記の DEXCS は一般公開していないので、通常は Ubuntu10.04-64bit を用いることになりますね。以下の手順は 64bit を条件としているので、注意してください。
ちなみに、unama -a の出力は、以下のようにx86-_64 で確かに 64bit システムです。
Linux dexcs-desktop 2.6.32-24-generic #39-Ubuntu SMP Wed Jul 28 05:14:15 UTC 2010 x86_64 GNU/Linux

■インストール確認
DEXCS-Salome では、/opt の中に SALOME-MECA-2010.2-LGPL-x86_64 のディレクトリにインストールされています、最新版 2011.2 もここにインストールすることにします。

■パッケージの入手
下記の SALOME-Meca のダウンロードページから、SALOME-MECA-2011.2-LGPL-x86_64.tgz をダウンロードして、/opt に置きます。ホームディレクトリにダウンロードしたら、sudo mv で移動させます。
http://www.code-aster.org/V2/spip.php?article303

■パッケージの展開
sudo tar zxvf で展開します。/opt での操作は、sudo でルート権限で行います。
インストールディレクトリは、/opt/SALOME-MECA-2011.2-LGPL-x86_64 になります。ここに cd で移動しておきます。

■インストールの実行
さらにインストールを進めるために cd postinstall で移動して、ls でファイル一覧を出して postinstall.py を確認しておきます。
インストール準備を行うため、sudo ./postinstall.py を実行します。必要に応じてログインパスワードを入力します。すぐに手順は完了します。

■インストールの確認
インストールディレクトリに戻るため、cd .. で移動し、仮の実行を確認するため、./runSalomeMeca を実行すると SALOME 6.3.0 が起動します。この最新版 SALOME では、機能のメニューの最後に ParaVis つまり ParaView が利用できるようです。確認できたら File->Exit で終了しておきます。

■簡単な解析の確認
例題として 2010.2 用のピストンの解析を試してみます。手順は http://www.caelinux.org/wiki/images/7/74/Piston_tutorial.pdf を見ながら、形状データは http://www.caelinux.org/wiki/images/e/e0/Piston.zip をダウンロードして使います。手順のとおり進めて見ます。若干、SALOME 6 になり記述が変更されています。一応、最後の Post-Pro で解析結果を確認できました。

次は、ParaVis で可視化を試してみます。

DEXCS-Salomeの有効活用:並列版Code_Asterのコンパイル(3)

2011年07月24日 10時04分29秒 | DEXCS情報
あと少しで並列版Code_Asterの構築が完了します。

■petscの作成
並列ソルバーの petsc を構築します。以下のコマンドを実行してください。
$ cp ~/Install_Files/petsc-2.3.3.tar.gz /opt → petsc のパッケージをコピー
$ cd /opt → /opt に移動
$ tar xfvz petsc-2.3.3.tar.gz → ソフトウエアパッケージを展開
$ cd petsc-2.3.3-p16 → インストール作業用ディレクトリに移動
構築環境の設定を進めます。メッセージが続きますが、エラーが出なければ完了です。
$ ./config/configure.py --with-mpi-dir=/usr/lib/openmpi/lib --with-blas-lapack-dir=/usr/lib/atlas-base/atlas --with-debugging=0 COPTFLAGS=-O3 FOPTFLAGS=-O3 --with-shared=0 --configModules=PETSc.Configure --optionsModule=PETSc.compilerOptions --with-x=0
構築のための環境変数2つを設定ます。
$ PETSC_ARCH=linux-gnu-c-opt; export PETSC_ARCH
$ PETSC_DIR=/opt/petsc-2.3.3-p16; export PETSC_DIR
以下で実際に構築を進めます。
$ make
最後まで進みエラーが出ずに、以下のメッセージが出たら完成です。
Completed building libraries

■ PAR10.3の作成
並列処理システムを構築します。以下のコマンドを実行してください。なお cp は少し時間がかかります。
$ cd /opt/aster → /opt/aster に移動
$ cp -ax STA10.6 PAR10.6 → STA10.6 の内容を属性を維持して PAR10.6 にコピー
$ cd /opt/aster/PAR10.6 → コピーした /opt/aster/PAR10.6 に移動
ここでディレクトリにある profile.sh config.txt を修正するのですが、沢山の修正があります。
まず profile.sh は、以下の4個所を修正します。
PATH に /opt/ParMetis-3.2.0:\ を追加
LD_LIBRARY_PATH の /opt/aster/public/mumps-4.9.2/lib: を /opt/mumps-4.9.2_mpi/lib:\ に変更
LD_LIBRARY_PATH に /opt/petsc-2.3.3-p16/lib/linux-gnu-c-opt: を追加
LD_LIBRARY_PATH に /usr/lib/openmpi/lib: を追加
次に config.txt は、以下の16個所を修正します。
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 に変更
BIBL の scalap に /opt/scalapack/lib/libscalapack.a /opt/scalapack/lib/blacs.a /opt/scalapack/lib/blacsF77.a /opt/scalapack/lib/blacs.a /usr/lib/atlas-base/atlas/libblas.a /usr/lib/atlas-base/atlas/liblapack.a
を追加
BIBL の metis に -L/opt/ParMetis-3.2.0 -lparmetis -lmetis を追加
BIBL の petsc に -L/opt/petsc-2.3.3-p16/lib/linux-gnu-c-opt -lpetscsnes -lpetscksp -lpetscdm -lpetscmat -lpetscvec -lpetsc を追加
BIBL の mpi に -L/usr/lib/openmpi/lib -lmpi -lmpi_f77 を追加
DEFS の defined を LINUX64 H5_USE_16_API _HAVE_MUMPS _HAVE_PETSC _USE_MPI _USE_MPI_MUMPS _USE_MPI_FETI _USE_OPENMP
に変更
NOBUILD はコメントアウト
LINK の link を mpif90 に変更
CC の cc を mpicc に変更
F77 の f77 を mpif90 に変更
F90 の f90 を mpif90 に変更
INCLF90 の include に -I/opt/aster/PAR10.6/bibf90/include_mumps-4.9.2_mpi を追加
INCLF90 の petsc に -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/ を追加
REPOUT の exec を /opt/aster/outils に変更
REPMAT の exec を /opt/aster/PAR10.6/materiau に変更
REPDEX の exec を /opt/aster/PAR10.6/datg に変更

さらに /opt/aster/etc/codeaster/ ディレクトリにある asrun ファイルを修正します。
$ cd /opt/aster/etc/codeaster/
$ vi asrun
mpi_get_procid_cmd は echo $OMPI_COMM_WORLD_RANK を選択

ファイルを準備したら、以下の手順でコンパイルします。暫く待ちます。
$ cd /opt/aster/PAR10.6
$ ../bin/as_run --vers=PAR10.6 --make clean → 不要ファイルの削除
$ ../bin/as_run --vers=PAR10.6 --make clean bibf90/mumps → 不要ファイルの削除
$ ../bin/as_run --vers=PAR10.6 --make → PAR10.6 のコンパイルの実行

最後までコンパイルが進むと、並列Code_Asterの検証用ジョブが実行されます。最後に以下のメッセージが出ていれば成功です。
as_run 1.10.4 --- DIAGNOSTIC JOB : OK

次に、コンパイルした PAR10.6 を利用できるように設定します。/opt/aster/etc/codeaster/ ディレクトリにある aster ファイルをエディタで開きます。最後の vers : stable の下に vers : PAR10.6 を追加します。
$ cd /opt/aster/etc/codeaster/
$ vi aster

DEXCS-Salomeの有効活用:並列版Code_Asterのコンパイル(2)

2011年07月23日 21時10分39秒 | DEXCS情報
準備ができたら、並列版のCode_Asterのコンパイルに進みます。

■ Code_Asterのインストール
以下のコマンドを順に実行してゆきます。途中で setup.cfg を変更するための sed スクリプトがありますが、複雑な記述なので間違えないようにしてください。どうしても上手くいかないときは、(1)に示した構築手順のまとめに見本の setup.cfg があるので、比較してください。
$ cd ~/Install_Files → インストール作業用ディレクトリに移動
$ tar xfvz aster-full-src-10.6.0-3.noarch.tar.gz → ソフトウエアパッケージを展開
$ cd aster-full-src-10.6.0/ → aster インストール作業用ディレクトリに移動
$ sed -i "s:PREFER_COMPILER\ =\ 'GNU':PREFER_COMPILER\ =\'GNU_without_MATH'\nMATHLIB=\ '-L/usr/lib/atlas-base/atlas -lblas -llapack':g" setup.cfg → セットアップ用設定ファイル setup.cfg のコンパイラの設定を変更
$ python setup.py install --prefix=/opt/aster → コンパイルしてインストールを実行しますが、途中で setup.cfg に関して確認を求められますが、進めてよいので y を入力します。コンパイルには、相当に時間がかかります。何らかの誤りがあると、エラー ERROR が表示され中断します。その時は setup.log を良く調べて対応してください。
メッセージが色々と出て、致命的なエラーの中断が出なければ、最後に以下のメッセージが出ます。これで並列版Code_Asterのコンパイルとインストールの完了です。でも、まだまだ作業があります。
Installation of : Code_Aster + 13 of its prerequisites
Destination : /opt/aster
Elapsed time : 1060.69 s → コンパイル環境に違う

■ hostfile の設定
MPI の動作環境の設定のため、/opt/aster/etc/codeaster ディレクトリの中に、適当なエディタで mpi_hostfile ファイルを作成し、「コンピュータ名 CPU=コア数」を記入します。
例えばここでの作業では、検証用に仮想マシン上で dexcs-salome-par というクアッド(4)コアマシンを1台使っているので、「dexcs-salome-par cpu=4」となります。多数の計算ノードを使うようになったら、ここに追記します。
$ cd /opt/aster/etc/codeaster
$ vi mpi_hostfile

■ scalapackのインストール
並列処理ライブラリの scalapack をインストールします。ここではソースからのコンパイルを行います。以下のコマンドを実行してください。コンパイルでは少しだけ時間がかかります。なおインストール先は /opt/scalpack になります。
$ mkdir /opt/scalapack → インストール用ディレクトリを作成
$ mkdir /opt/scalapack/build
$ mkdir /opt/scalapack/lib
$ cp ~/Install_Files/mpiblacs.tgz /opt/scalapack/build → インストール作業用ディレクトリにソフトウエアパッケージをコピー
$ cp ~/Install_Files/scalapack-1.8.0.tgz /opt/scalapack/build
$ cd /opt/scalapack/build → インストール作業用ディレクトリに移動
$ tar xfvz mpiblacs.tgz → ソフトウエアパッケージを展開
$ tar xfvz scalapack-1.8.0.tgz
$ cd /opt/scalapack/build/BLACS → BLACSインストール作業用ディレクトリに移動

コンパイル用の Bmake.inc を BMAKES/Bmake.MPI-LINUX をもとに以下の様に作成します。
$ cp ./BMAKES/Bmake.MPI-LINUX ./Bmake.inc → ./Bmake.inc の原型をコピー
修正箇所は Bmake.inc ファイルの、以下15行です。
BTOPdir = /opt/scalapack/build/BLACS
BLACSFINIT = $(BLACSdir)/blacsF77.a
BLACSCINIT = $(BLACSdir)/blacsC.a
BLACSLIB = $(BLACSdir)/blacs.a
MPIdir =
MPILIBdir = /usr/lib/openmpi/lib
MPIINCdir = /usr/lib/openmpi/include
MPILIB = $(MPILIBdir)/libmpi.a
INTFACE = -DAdd
F77 = mpif90
F77FLAGS = $(F77NO_OPTFLAGS) -O3
CC = mpicc
CCFLAGS = -O3
CCLOADER = $(F77)
RANLIB = /usr/bin/ranlib

コンパイルを進めます。
$ make mpi → BLACSのライブラリをコンパイル
エラーがなく最後に以下が表示されて、blacs.a が出来たら成功です。
/usr/bin/ranlib /opt/scalapack/build/BLACS/LIB/blacs.a
$ cp LIB/*.a /opt/scalapack/lib → BLACS のライブラリを移動

コンパイル用の SLmake.inc を SLmake.inc.example をもとに以下の様に作成します。
$ cd /opt/scalapack/build/scalapack-1.8.0 → scalapack インストール作業用ディレクトリに移動
$ cp SLmake.inc.example SLmake.inc → SLmake.inc の原型をコピー
修正個所は SLmake.inc ファイルの、以下の12行です。
home = /opt/scalapack/build/scalapack-1.8.0
BLACSdir = /opt/scalapack/lib
SMPLIB = /usr/lib/openmpi/libmpi.a
BLACSFINIT = $(BLACSdir)/blacsF77.a
BLACSCINIT = $(BLACSdir)/blacsC.a
BLACSLIB = $(BLACSdir)/blacs.a
F77 = mpif90
CCFLAGS = -O3
CDEFS = -DNO_IEEE $(USEMPI) -DAdd_
RANLIB = /usr/bin/ranlib
BLASLIB = /usr/lib/atlas-base/atlas/libblas.a
LAPACKLIB = /usr/lib/atlas-base/atlas/liblapack.a

コンパイルを進めます。
$ make → scalapack のライブラリをコンパイル
エラーがなく最後に以下が表示されて、libscalapack.a が出来たら成功です。
/usr/bin/ranlib /opt/scalapack/build/scalapack-1.8.0/libscalapack.a
$ cp libscalapack.a /opt/scalapack/lib → scalapack のライブラリを移動

■ ParMetisのインストール
並列処理用データ分割ツール ParMetis をインストールします。以下のコマンドを実行してください。
$ cp ~/Install_Files/ParMetis-3.2.0.tar.gz /opt → インストール用ソフトウエアパッケージを /opt にコピー
$ cd /opt → /opt に移動
$ tar xfvz ParMetis-3.2.0.tar.gz → ソフトウエアパッケージを展開
$ cd ParMetis-3.2.0 → ParaMetis インストール作業用ディレクトリに移動
ここで修正作業が必要です。ディレクトリの中に構築用設定ファイル Makefile.in があります。これに XTRALIBS = -lmpi を追加設定の場所に記入します。適当なエディタで行ってください。出来たらコンパイルします。
$ make
暫く待ちます。エラーが出ずに下記のメッセージが出たら完成です。
chmod 744 ../Graphs/pometis3.2.0

■ mumpsのインストール
並列連立方程式ソルバー mumps をインストールします。以下のコマンドを実行してください。
$ cp ~/Install_Files/aster-full-src-10.6.0/SRC/mumps-4.9.2-2.tar.gz /opt/ → インストール用ソフトウエアパッケージを /opt にコピー
$ cd /opt → /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/ → mumps インストール作業用ディレクトリに移動

修正個所は Makefile.in ファイルの、以下の17行です。SCALAP に blacs.a が2回指定されていますが、この通りにします。
SCOTCHDIR = /opt/aster/public/scotch_5.1.11_esmumps
LMETISDIR = /opt/ParMetis-3.2.0
LMETIS = -L$(LMETISDIR) -lparmetis -lmetis
ORDERINGSF = -Dpord -Dparmetis -Dmetis
CC = mpicc
FC = mpif90
FL = mpif90
SCALAP = /opt/scalapack/lib/libscalapack.a \
/opt/scalapack/lib/blacs.a \
/opt/scalapack/lib/blacsF77.a \
/opt/scalapack/lib/blacs.a \
/usr/lib/atlas-base/atlas/libblas.a \
/usr/lib/atlas-base/atlas/liblapack.a
INCPAR = -I/usr/lib/openmpi/include/ $(IPORD)
LIBPAR = $(SCALAP) -L/usr/lib/openmpi/lib -lmpi
LIBBLAS = -L/usr/lib/atlas-base/atlas/libblas.a
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
INC = $(INCPAR)
LIB = $(LIBPAR)
LIBSEQNEEDED =

ファイルを準備したらコンパイルします。暫く待ちます。
$ make all
エラーが出ずに、以下のメッセージが出れば完成です。
mpif90 -o zsimpletest -O -fopenmp zsimpletest.o …… 

DEXCS-Salomeの有効活用:並列版Code_Asterのコンパイル(1)

2011年07月23日 18時10分30秒 | DEXCS情報
ここでは、並列版Code_Asterの活用を目指してコンパイルに挑戦します。なお以下の手順は、Code_Asterの活用について情報提供を頂いているMKさんの資料を参考にしています。

H240221:MKさんの資料の改定に対応して内容を修正

構築手順まとめ:http://opencae.gifu-nct.ac.jp/pukiwiki/index.php?Code_Aster%20%A4%CE%CA%C2%CE%F3%B2%BD
上記の英文情報:http://www.code-aster.org/forum2/viewtopic.php?id=14892

検証に用いたベースのシステムは DEXCS2011-Salome-A3(64) なのですが、OSとしてはUbuntu 11.04(64) になります。
ただしこれに限定しているわけではなくて、Ubuntu の 10.04 などでも同様に構築できます。
なお以下の手順は 64bit を前提としているので、注意してください。

■ 準備
まずはОSをインストールしたら、ネットワークを接続して、システムアップデートを行っておきます。「システム」→「システム管理」→「アップデート・マネージャ」で、再チェックしてアップデートをインストールします。

■ インストール先など
この作業は dexcs ユーザーとして行っています。これはそれぞれの設定で読み替えてください。
ダウンロードしたファイルの保存:~/Install_Files (/home/dexcs/Install_Files)
システムをインストールする場所:/opt (この中に、acml や aster が作られます。)

■ 必要なファイル5個のダウンロード
aster-full-src-10.6.0-3.noarch.tar.gz → http://www.code-aster.org/V2/spip.php?article272 (最新版は11.1ですが、ここでは実績のある10.6を用います。)
ParMetis-3.2.0.tar.gz → http://glaros.dtc.umn.edu/gkhome/metis/parmetis/download (最新版がありますが、実績のある3.2.2を旧版の中から探してダウンロードします。)
mpiblacs.tgz → http://www.netlib.org/blacs/BLACS/Papers.html(MPIBLACSのリンクからダウンロードします。)
scalapack-1.8.0.tgz → http://www.netlib.org/scalapack/ (色々書いてありますが、下の方からRelease Historyにある1.8.0をダウンロードします。)
petsc-2.3.3.tar.gz → http://ftp.mcs.anl.gov/pub/petsc/release-snapshots/(沢山あるファイル一覧から指定のバージョンをダウンロードします。)

■ 色々な準備作業
まず、dexcsユーザーのホームディレクトリにある上記の5つのファイルを保存ディレクトリ~/Install_Filesにまとめて置きます。
次に、インストール先の/optの所有者を変更します。本来/optはrootが所有ですが、導入や利用を考えて一般ユーザーdexcs(ここでの設定)にしておきます。要は作業者dexcsが読み書きできるようにします。
$ sudo chown dexcs /opt/

■ 追加パッケージのインストール
構築に必要なパッケージを sudo apt-get install でインストールします。途中で「続行しますか?」と何か聞かれたら、指示に従って進めます。例えば、sudo apt-get install gfortran のようにします。
gfortran g++ → コンパイラの追加
python-dev python-numpy → Pythonの機能追加
zlib1g-dev → 圧縮ファイル対応ライブラリの追加
libatlas-base-dev → blas,lapackに対応するatlasの追加
grace → グラフ描画ツールの追加
bison flex → コンパイルツールの追加
python-qt4 → Pythonの機能追加
checkinstall → コンパイル支援ツールの追加
openmpi-bin openmpi-dev openmpi-dbg openmpi-doc → 並列処理用MPIの実装
libcr-dev → ParMetis用のライブラリ
エラー無く最後までインストールが進んだら、追加パッケージの準備は完了です。

OpenFOAM-2.0.0でDEM解析を試す:基本例題の検討(1)

2011年07月16日 07時16分48秒 | DEXCS情報
それでは、DEM解析の検討を進めます。用いる環境は、DEXCS2010-OpenFOAM (64) に、最新の OpenFOAM-2.0.0 をバイナリインストールした環境でおこないます。準備方法は、このブログの記事を参考にしてください。

ここでは、下記の PENGUINITIS さんのウエブに公開されているデータを用いて、DEM解析の詳細を勉強します。
http://www.geocities.jp/penguinitis2002/study/OpenFOAM/dem/dem.html
(PENGUINITISさん:情報公開ありがとうございます)

■ 入力データの入手
上記のサイトから、ファイル square.tar.gz をダウンロードして、~/OpenFOAM の中に Work ディレクトリを作って、この中で展開しておきます。
$ tar zxvf square.tar.gz

■ 入力データの構成
展開すると square ディレクトリが出来て、それは以下の構成です。ディレクトリには末尾に / がついています。

square/
  0/:初期条件
    U:初期条件、速度
  constant/
    RASProperties:レイノルズ数の変化の設定
    kinematicCloudProperties:衝突の設定
    turbulenceProperties:流体特性(モデル{層流、乱流など})
    g:重力加速度[m/s²]
    polyMesh/
     blockMeshDict:blockMeshを行うための記述がされている
    kinematicCloudPositions:玉の初期配置の設定
    transportProperties:流体特性(動粘性係数、密度など)
  dem.pvsm
  system/
    controlDict:計算時間の制御、解のデータの読み書きに関する入力
    fvSchemes:スキームの設定
      didSchemes:一次の時間微分項の離散化スキームの設定
      gradSchemes:勾配の離散化スキーム
      divShemes:発散離散化スキーム
      laplacianSchemes:ラプラシアン離散化スキーム
      interpolationSchemes:補間スキーム
    fvSolution:偏微分方程式を離散化してできる代数方程式を解くための設定

■ 計算手順1:blockMesh
まずメッシュを作成するため、square ディレクトリの中で、blockMesh コマンドを実行します。すぐに終わります。
$ blockMesh
こうすると、新しく以下のファイルが生成されます。

square/
  constant/
    polyMesh/
      boundary:パッチのリスト
      faces:面のリスト
      neighbour:隣接セルのリスト
      owner:保有セルのリスト
         (ヘッダーにポイント数、セル数、総面積、内部面積が記載)
      points:セルの頂点(ポイント)のリスト

■ 計算手順2:icoUncoupledKinematicParcelFoam
次に DEM解析を実行します。square ディレクトリの中で、icoUncoupledKinematicParcelFoam コマンドを実行します。しばらく計算が進みます。
$ icoUncoupledKinematicParcelFoam

■ 計算結果
この計算結果として、square ディレクトリの中に、各解析ステップ毎の結果が出力されます。生成されたディレクトリは以下の通りです。

square/
  0/
  0.002/
  0.004/
  ……
  0.498/
  0.5/

■可視化
可視化のためのVTKデータを作るために、以下のコマンドを実行します。
$foamToVTK
これで、VTKデータが作られるので、結果を見るためにParaViewを起動します。DEXCS2010では、「アプリケーション」→「DEXCS」→「paraview」で起動できます。

メニューの「File」→「Open」で、OpenFOAM-square-VTK-lagrangian-kinematicCloudにある kinematicCloud_..vtk を選択してOKで開きます。
同様にして、OpenFOAM-square-VTKにあるsquare_.vtkを開きます。

ここまできたらParaViewの設定を行います。表示形式:Glyph Glyph Type:Sphere Scale Mode:scalar SetScaleFactor:0.02 Scalers:d Vectors:U Radius:0.52 Theta Resolution:20 Phi Resolution:20にしたら、きれいな表示にすることができました。もし、可視化した玉が大きすぎたり、小さすぎたりする場合は、SetScaleFactorによって調整することができます。


DEXCS-Salomeの有効活用:Code_Asterのコンパイル(1)

2011年07月03日 14時38分14秒 | DEXCS情報
ここでは、DEXCS-Salomeを有効活用するための情報を発信してゆきます。まずは並列処理を目指して、Code_Asterをソースコンパイルする方法をまとめます。以下の記述は、コンパイルの練習と位置付けています。

オープンCAEに関して、非常に有用な情報をまとめてくださるPENGUINITISさんの記事に、Code_Aster のコンパイル方法が公開されましたのでご紹介します。テスト方法や並列版まで記載があります。
http://www.geocities.jp/penguinitis2002/study/Code_Aster/Code_Aster_setup.html

ベースのシステムは DEXCS2010-Salome-A2(64) と言うもので、OSとしては、Ubuntu 10.04(64) になります。ちなみに、このOSが 64bit かどうか確かめるには、端末のプロンプトで、以下のコマンドを実行します。
$ uname -a
それで出力の中に、"x86_64 amd64" があれば 64bit で、"i386 i686" のときは 32bit になります。

■ ソースパッケージの入手
Code_Aster の公式サイト http://www.code-aster.org/ より、表示を英語に変えて、DownLoad のページから Code_Aster のソースコードのセットを入手します。最新版は 11.0 ですが、ここでは並列処理を目指して 10.3 を用います。
用意するファイル:aster-full-src-10.3.0-3.noarch.tar.gz
これを、ホームディレクトリに置いて、tar xvfz で展開しておきます。

■ コンパイルの準備
用いるOSの状態では、色々と足りないものがあるので、追加パッケージを導入します。ここでは、手軽に行うために「システム」→「システム管理」→「Synapticパッケージマネージャ」を用いることにします。

起動すると、利用者のパスワードを求められるので、入力します。マネージャのウインドウが表示されたら、「再読込」を行っておきます。「検索」を押してキーワードから検索し、必要なパッケージを指定して、インストール指定にします。「適用」で実際にインストールします。

・コンパイラ関連の追加
キーワード:g++ より → パッケージ:g++
キーワード:gfortran より → パッケージ:gfortran

・ライブラリ関連の追加
キーワード:liblapack より → パッケージ:liblapack3gf liblapack-dev

・python関連の追加
キーワード:python-numpy より → パッケージ:python-numpy
キーワード:python-dev より → パッケージ:python-dev

■ ネットワーク環境の設定
ここでは練習のため、ネットワーク環境のみ設定しておく。展開したディレクトリ aster-full-src-10.3.0 に cd して、エディタで setup.cfg を開く。以下は DALAB での設定例です。
SERVER_NAME='shuubun'
DOMAIN_NAME='archi.gifu-nct.ac.jp'
FULL_SERVER_NAME='shuubun.archi.gifu-nct.ac.jp'

■ コンパイルスクリプトの実行
ここまで準備が出来たら、以下のコマンドでコンパイルを実行します。なお、ここでの手順ではコンパイルした Code_Aster を /opt/aster にインストールすることにします。しばらく待ちます。途中で進めて良いか確認されますが、練習のため y で進めます。
$ sudo python setup.py install --prefix=/opt/aster

以上で、エラーが出ずにコンパイルが完了しました。/opt/aster の中にも色々な結果のファイルが保存されています。