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

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

Ubuntu14.04LTSを用いたオープンCAE活用:流体解析システムReef3D(1)

2015年01月11日 21時28分15秒 | OpenCAE活用
オープンCAEの流体解析システムと言えばOpenFOAMに注目が集まっていますが、用途を限定すれば他にも色々なシステムが公開されています。そこでプログラムも入力データもとてもコンパクトな流体解析システムReef3Dの導入と検証を説明します。

Reef3D:特徴としては、レベルセット法を採用し、自由表面流れ計算に強みがあり、直交格子を使用し、境界の取り扱いはGCIBMで、並列計算にも対応し、補間にはWENOも使える、とのことです。

■Ubuntu14.04LTSの準備

日本語版Ubuntuの公式サイト https://www.ubuntulinux.jp/download/ja-remix から、「ubuntu-ja-14.10-desktop-amd64-20141124.iso(ISOイメージ)」を入手します。
ダウンロードしたインストールファイル「ubuntu-ja-14.10-desktop-amd64-20141124.iso」を用いて、64bitシステムとして、Ubuntu14.04LTSを構築します。
ここでは仮想マシン構築ではなく、ノートPC(RAM:8GB HDD:800GB, CPU:Corei7-2640M)に、インストールDVDを作って指示通り作業を行いました。

最初の構築作業をがインストーラーの指示通り(ヂュアルブートもせず、特別な設定もせずに)に完了して、再起動したあとでログインしたら、以下の準備を行っておきます。
・システム設定→詳細→更新をインストール→ソフトウエアの更新を実行して、ソフトウエアを最新の状態にしてください。
・システム設定→画面の明るさとロック→次の時間アイドル状態が…の設定を1時間に伸ばし、ロックするをオフ、サスペンドからの復帰…のチェックを外しておきます。
・システム設定→外観→挙動→ワークスペースを有効にするをチェック入れで、4つのワークスペースを使えるようにしておきます。
・左端のランチャー最上位の検索ツールより、端末・システムモニターを起動させ、ランチャーに登録して常に使えるようにしておく。
なお、仮想マシン構築の場合は、十分なリソース(RAM:十分な量最低2GB以上、HDD:最低20GN、CPU-Core:並列計算するので2以上)を割り当ててください。

システム構築に関する準備として、コンパイラなどのツールを導入しておきます。ここではパッケージを用いて apt-get を用いて簡単に導入しておきます。
端末を開いて、sudo apt-get update して、パッケージ情報を更新しておきます。その後で、以下のツールを、sudo apt-get install で導入します。
・g++, gfortran:基本となるコンパイラー(ちなみにコマンドは、sudo apt-get insall g++ gfortran のようにしてください)
・openmpi-bin, libopenmpi-dev:並列処理を実行するためのMPI環境の実装として、OpenMPIを用います。(mpirun,mpicxxで動作確認できます)
・paraview:解析結果の可視化ツールを導入します。(起動してランチャーに登録しておきます)

■Reef3Dのシステムの構築

以下の操作は、全ての端末の中で行います。なおUbuntuの初期状態では、ホームディレクトリにあるディレクトリ名が日本語のものがあり、ln -s を用いて英語名のリンクを作っておくと便利です。

Reef3Dの公式サイトのダウンロードページ http://reef3d.wordpress.com/source-code/ より、以下のファイルを入手します。
・REEF3D-UserGuide.pdf:流体解析ツールReef3Dのユーザーガイド
・REEF3D_14.11.zip:Reef3Dのツールのソースプログラム
・Tutorial_REEF3D_14.11.zip:Reef3Dの例題の入力ファイル
・DIVEMesh-UserGuide.pdf:メッシュ生成ツールDIVEMeshのユーザーガイド
・DIVEMesh_14.11.zip:DIVEMeshのツールのソースプログラム

Reef3Dの作業用ディレクトリReef3dWorkをホームディレクトリに作り、この中に入手した3つのファイルを移動します。次に利用するファイル群を圧縮した zip ファイル3つを展開します。
$ cd ~; mkdir Reef3dWork
$ cp ~/Download/* ~/Reef3dWork
$ cd Reef3dWork
$ unzip REEF3D_14.11.zip; unzip DIVEMesh_14.11.zip(展開した結果で、REEF3D_14.11とDIVEMesh_14.11のディレクトリが作られます)
$ unzip Tutorial_REEF3D_14.11.zip -d Tutorial(指定した展開先Tutorialの中に5つの例題が保存されます)

まずメッシュ生成ツールDIVEMeshをコンパイルします。
$ cd ~/Reef3dWork/DIVEMesh_14.11
$ make(何も設定せずに、make一発でコンパイルが進みます。最後に長いmpicxxのコマンドラインが実行されて、エラーが出なければ完成です)
$ ls bin(これで、DiveMESHが表示されたらコンパイルが成功です。)
次に流体解析ツールReef3Dをコンパイルします。
$ cd ~/Reef3dWrok/REEF3D_14.11
$ make(何も設定せずに、make一発でコンパイルが進みます。最後に長いmpicxxのコマンドラインが実行されて、エラーが出なければ完成です)
$ ls bin(これで、reef3dが表示されたらコンパイルが成功です。)

コンパイルしたツールをシステムとして利用できるように移動して、コマンドパスを設定します。
$ sudo mkdir /opt/Reef3D
$ cd ~/Reef3dWork
$ sudo cp REEF3D_14.11/bin/reef3d /opt/Reef3D
$ sudo cp DIVEMesh_14.11/bin/DIveMESH /opt/Reef3D/divemesh(ツールの名称を単純にdivemeshとします)
$ ls /opt/Reef3D(これでコピーを確認します)
$ cd ~
$ vi .bashrc(以下の内容をファイルの最後に追加します)
export PATH=/opt/Reef3d:$PATH
$ source ~/.bashrc(これでどこからでもreef3d,divemeshが実行できるようになり、このsource実行は再ログイン後は不要です)

■Reef3Dの例題の動作検証

先ほど展開した例題:チュートリアルを用いて、動作検証を行います。Reef3Dの特徴は、システムがシンプルだけでなく、入力ファイルをとても簡単で理解し易いと思います。
流れの様子が立体的に見える2番の例題「6_2 Narrow Contraction」を用いて説明します。ちなみに、他の4つの例題も同様に解析可能です。
cd ~/Reef3D/Tutorial/6_2 Narrow Contraction(なおLinuxでファイル名にスペースがあるときは、そのまえに¥を入力してください。)

ディレクトリの中には、以下の2つのファイルしかありません。これなら解析条件の設定がすくに分かりそうです。なおこれらの例題は全て4CPU-Coreによる並列計算を前提としています。
control.txt:メッシュ生成ツールDIVEMeshの入力データ
ctrl.txt:流体解析ツールReef3Dの入力データ

すでに2つのツールには実行パスが通してあるので、すぐに実行できます。まず流体解析の解析空間のメッシュなどの空間的な情報を、contro.txtより生成します。
$ divemesh(/opt/Reef3Dのコピーするときの名前です)
これだけで、grid-000001.dat…grid-000004.datの4つの解析空間の入力データとflag_indicate.txtがつくられます。この4つのgridファイルが4並列処理に対応しています。

準備が出来たので、並列処理で流体解析ツールReef3Dを実行します。並列実行ツールmpirunを用いて、以下のように行います。入力ファイルctrl.txt.は設定不要です。
$ mpirun -np 4 reef3d(入力ファイルは固定でctrl.txtになっているようです)
これで、流体解析が実行されます。起動した端末にはステップ毎の情報が、流れるように表示されます。システムモニターを見ると4並列で実行していることが分かります。

計算はずっと続くので、数分待ったら、起動した端末で ctrl+cで計算を中断させます。解析結果は、REEF3Dが先頭についた7つのディレクトリに保存されています。
結果を可視化ツールParaViewで確認します。ランチャーに登録しておいたParaViewを起動します。可視化に使うデータはREEF3D_VTUのディレクトリにあるVTUデータです。
ParaViewのOpenFIleより、~/Reef3dWork/Tutorial/6_2 Narrow Contraction/REEF3D_VTUのファルダを開いて、REEF3D-..pvtuを選択して、OKで開きます。
解析結果を読み込んだら、Applyを押して、表示内容をvelocity:速度にして、ステップを進行させると、速度の変化が確認できます。









DEXCS2012-Salomeの有効活用:CFD/Code_Saturneの導入手順(4)

2013年07月14日 04時00分25秒 | OpenCAE活用
これまで説明したCode_Saturneの導入は以下の2種類ですが、いずれも構築時にSalomeとの連携を設定していないため、SaturneGUIでの流体解析は可能ですが、SalomeをGUIとして用いるCFDSTUDYの機能が利用できません。
1: Installerを用いて簡易コンパイルを行う  2: Synampticを用いてパッケージ導入を行う

そこで本解説では以下の情報を手本にして、Salomeと連携可能なCode_Saturneの導入方法を検討します。なお、導入の前提や注意などは、導入手順(1)に示した通りなので、確認しておいてください。
https://sites.google.com/site/codeastersalomemeca/home/code_saturne/code_saturnenoinsutoru

■ インストールの確認

まず初めに、DEXCS2012-SalomeのSalomeに連携させるため、インストール先を確認しておきます。
・Salome-Mecaは、/opt/salomeにインストールされ、ここに、2つのディレクトリSALOME-MECA-2013.1-LGPL, appli_V6_6_0があります。

■ ダウンロードと展開

以下のサイトからCode_Saturneのソースパッケージをダウンロードします。2013/07時点での最新の公開版は3.1になるので、ページの最初の行にある"here"よりダウンロードします。45MB程度のソースパッケージなので暫く待ちます。DEXCSでChromiumブラウザを用いた場合は、ホームのDownloadsに、code_saturne-3.1.0.tar.gzが保存されます。
http://code-saturne.org/cms/download/3.1

以下の手順で展開して、~/Downloads/code_saturne-3.1.0でインストール作業を進めます。この中にINSTALLファイルがあり、これを参考にして進めます。
なお以下の手順ではコマンド入力を基本にしており、Ubuntuの端末を利用します。DEXCSでは上部のバーかアプリケーション→アクセサリ→端末で利用できます。複数起動して目的に応じて使い分けると便利です。
$ cd ~/Downloads
$ tar xvfz code_saturne-3.1.0.tar.gz
$ cd code_saturne-3.1.0; ls

■ インストール環境の準備

DEXCSの状態でインストールを進めるためには、以下のツールの追加が必要です。アプリケーション→システムツール→システム管理→Synapticパッケージマネージャを起動します。ログインユーザーのパスワードを入力してツールが起動したら、再読込を押して最新の状態にしておきます。以下の項目を、検索して、インストール指定して、適用します。

g++:検索 g++ (4.6.3) → g++ g++4.6 libstdc++6-4.6-dev (3)
gfortran:検索 gfortran (4.6.3) → gfortran gfortran-4.6 (2)
opnempi:検索 openmpi (1.4.3) → libopenmpi-dbg libopenmpi-dev (2) + 関連ツール(1)
cmake:検索 cmake (2.8.7) → cmake cmake-data cmake-dbg (3) + 関連ツール(2)
PyQt4:検索 pyqt4 (4.9.1) → pyqt4-dev-tools (1)

■ コンパイルとインストールの実行

まずDEXCS-SalomeにインストールされているSalome-Mecaのライブラリへの設定情報を利用するために、以下を実行する。
$ cd ~/Downloads/code_saturne-3.1.0
$ source /opt/salome/appli_V6_6_0/env.d/envProducts.sh

インストール設定を行うために、以下のconfigureを実行する。なお各ライブラリのパスはDEXCS2012-Salomeに合わせています。
下記のコマンドは行を分けて記述していますが、1つのコマンドとして実行するもので、各行の最後の'\'は継続を表しています。
以下の設定では、インストール先は/opt/code_saturne-3.1.0です。

$ ./configure --with-mpi=/usr/lib/openmpi \
--with-libxml2=/opt/salome/SALOME-MECA-2013.1-LGPL/prerequisites/Libxml2_278 \
--with-metis=/opt/salome/SALOME-MECA-2013.1-LGPL/prerequisites/Metis_40 \
--with-scotch=/opt/salome/SALOME-MECA-2013.1-LGPL/prerequisites/Scotch_5111 \
--with-hdf5=/opt/salome/SALOME-MECA-2013.1-LGPL/prerequisites/Hdf5_188 \
--with-cgns=/opt/salome/SALOME-MECA-2013.1-LGPL/prerequisites/Cgnslib_3134 \
--with-med=/opt/salome/SALOME-MECA-2013.1-LGPL/tools/Medfichier_306 \
--with-salome=/opt/salome/SALOME-MECA-2013.1-LGPL \
--prefix=/opt/code_saturne-3.1.0

最後に、以下の様に表示されたら、インストール設定が完了です。これよりMakefileが生成されます。
The package has been configured. Type: make make install
To generate and install the Code_Saturne kernel

それでは指示に従って、コンパイルとインストールを進めます。まずはコンパイル。
$ make
暫く待ちます。エラーがなく「make[1]: ディレクトリ `/home/dexcs/Downloads/code_saturne-3.1.0' から出ます」と表示されたら成功です。

次にインストールを行います。
$ make install
暫く待ちます。エラーがなく「make[1]: ディレクトリ `/home/dexcs/Downloads/code_saturne-3.1.0' から出ます」と表示されたら成功です。

それでは、インストールの結果を以下の手順で確認します。code_saturneが完成したプログラムです。
$ cd /opt/code_saturne-3.1.0/bin; ls -l

■ Code_Saturneの起動の準備

まず最初に、この状態ではCode_SaturneをSalome-Mecaのモジュールとして起動した場合、モジュールが少ないのでモジュールを追加しておきます。
以下の手順で/opt/code_saturne-3.1.0/lib/python2.6/site-packages/code_saturne/cs_salome.py を開き、82行目を書き換える。

変更前 : default_modules = "GEOM,SMESH,MED,CFDSTUDY,PARAVIS,VISU"
変更後 : default_modules = "GEOM,SMESH,MED,CFDSTUDY,PARAVIS,VISU,JOBMANAGER,YACS,EFICAS,ASTER,EUROPLEXUS,HEXABLOCK"
$ cd /opt/code_saturne-3.1.0/lib/python2.6/site-packages/code_saturne
$ vi cs_salome.py

次にCode_SaturneをSalome-Mecaと連携して起動する設定にしてあるので、起動時にSalome-Mecaのライブラリのパスを、以下の手順で設定しておきます。
$ cd /opt/code_saturne-3.1.0/bin
$ vi CodeSaturne
内容:
#!/bin/bash
source /opt/salome/appli_V6_6_0/env.d/envProducts.sh
/opt/code_saturne-3.1.0/bin/code_saturne $*
$ chmod a+x CodeSaturne

動作確認を、以下の様にしてみます。
$ ./CodeSaturn ⇒ Code_Saturneの利用方法が表示されます。
$ ./CodeSaturn gui ⇒ SaturneGUIが起動されます。
$ ./CodeSaturn salome ⇒ Salomeが起動して、モジュールにはCFDSTUDYがあります。

ちなみに、上記で起動されるSalomeは、Salome-Mecaと起動方法が異なるため、日本語化はされていません。

インストール先は、/opt/code_saturne-3.1.0です。この中のbinに、CodeSaturne, code_saturne ple-configがあり、「CodeSaturne」が起動用スクリプトになります。

以下の記述を最後に追加して、コマンド実行パスを設定しておきます。
$ cd ~
$ vi .bashrc
$ source .bashrc

===== .bashrc =====
# code_saturne
export PATH=/opt/code_saturne-3.1.0/bin:$PATH
===================

■ 文書と例題の移動

インストールが完了したら、文書:docsと例題:examplesを、Code_Saturneのファイル保存用ディレクトリ~/CodeSaturneFilesに移動しておきます。
$ cd ~
$ mkdir CodeSaturneFiles
$ cd ~/Downloads/code_saturne-3.1.0
$ cp -r docs examples ~/CodeSaturneFiles
$ cd ~/CodeSaturneFiles; ls

他のファイルは実行に必要ないので、ここでは削除します。以下の手順で行います。
$ cd ~/Downloads
$ rm -r code_saturne-3.1.0 code_saturne-3.1.0.tar.gz

はお、上記の例題を実行するとき、Installerで構築した場合には、code_saturne createでケースファイルを生成して作られたSaturneGUIではなく、上記のCodeSaturne guiとしてツールを起動します。


DEXCS2012-Salomeの有効活用:物理シミュレーションの導入手順(1)

2013年07月07日 09時40分40秒 | OpenCAE活用
ここでは少し趣を変えて、物理シミュレーションを試してみます。これまでSalome-Mecaなどで、定量的な分析を目的とした数値シミュレーションを進めてきました。一方で、定性的な現象を表現することに注目して、3次元CGなどの分野では、物理シミュレーションによるアニメーション作成が可能です。ここでは、DEXCSのAdventureやOpenFOAMの形状モデリングツールとして利用したBlenderを活用して、物理シミュレーションを実現する環境を構築します。

ここでは、あくまでBlenderを物理シミュレーションの演算エンジンとして利用するため、マウス操作などは一切省いて、入力スクリプトから動画ファイルを生成する方法を説明します。実は、この手順は以下の「まるちゃんブログ:Blenderの物理シミュレーションをpythonスクリプトで作成」を参考にしてDEXCS(Ubuntu)用に書き換えました。
http://d.hatena.ne.jp/cflat-inc/20130630/1372568992

ところで、DEXCS-Salomeはオープンソース構造解析Salome-Mecaを中心に構築された、オールインワンのオープンCAEシステムですが、要はUbuntu12.04LTS-64/32の共通のベースシステムとして、様々な活用が可能です。このブログでも色々な活用方法を紹介しています。実は、方針もなく適当に取り組んでいるのではなく、様々な構造物の最終段階の崩壊性状を知りたいという願望に従って進めています。

■ 3D-CGツールBlenderの導入

今回は、3次元CGツールのBlenderを用いて、物理シミュレーション機能を用いた定性的な崩壊の様子を動画として表現することを目標とします。まず、いつものようにSynapticを用いて、Blenderを導入します。そこで、アプリケーション→システムツール→システム管理→Synapticパッケージマネージャを利用します。最初に利用者のパスワードを入力して起動したら、左上の再読込を押してパッケージ情報を最新にします。

以下の条件で検索すると、バージョン2.62-1のblenderが見つかります。しかし物理シミュレーションは、なるべく最新版を使った方が良く、以下の入力スクリプトもバージョン2.66以上を前提としているようです。
検索:blender 結果:blender blender-dbg バージョン2.62-1

そこで、以下のBlender公式ダウンロードサイトから、最新版バージョン2.67bを入手してインストールしてみます。以下のサイトの、Linux-x86-64の項目から、「Blender 2.67b (73 MB)」をダウンロードします。
http://www.blender.org/download/get-blender/

入手したファイルは、~/Downloadsの中の、blender-2.67b-linux-glibc211-x86_64.tar.bz2です。以下の手順で確認して展開します。
$ cd ~/Downloads; ls
$ bzip2 -d blender-2.67b-linux-glibc211-x86_64.tar.bz2
$ tar xvf blender-2.67b-linux-glibc211-x86_64.tar
$ cd blender-2.67b-linux-glibc211-x86_64; ls

色々なファイルがありますが、readme.htmlがあるので、メニューバーの場所→ホームフォルダーから、このファイルを選択してブラウザで内容を確認します。Installationの項目を見ると、Linux,FreeBSDでは展開すれば実行形式が実行可能となります。コンパイルなどは不要なので、/optに移動して、以下の手順でそのまま実行するようにします。
$ cd ..
$ mv blender-2.67b-linux-glibc211-x86_64 /opt/blender

■ 物理シミュレーションの準備

端末を開いてアプリケーション→アクセサリ→端末を開いて、Blenderを物理シミュレーションツールとして利用するための設定を行います。と言っても、要は3D-CGツールの画面を出さずに、入力スクリプトを読み込んで動作するようにします。

$ vi ~/.bashrc で設定ファイルを開いて、最後に以下を追加したら、sourceで設定を有効にする。
  # blender-simulator
  alias blender-simulator='/opt/blender/blender --background --python'
$ source ~/.bashrc

■ 入力スクリプトの準備

実はBlenderでは、内部の処理がpythonで構築されているため、pythonスクリプトを用意することで、マウスなどの操作を一切行わずに画像生成を進めることができます。以下では、上記のブログに示された例題について、その内容を解説します。

入力スクリプトは、~/BlenderWorkに作ることにします。ファイルsim00.pyとして、viでファイルを開いて、以下の内容をマウスでコピーして作ります。
$ cd ~
$ mkdir BlenderWork
$ cd BlenderWork
$ vi sim00.py

=====入力スクリプト:sim00.py=====
# -*- coding: utf-8 -*-

import os
import bpy
import math

#デフォルトで存在しているCubeを削除
bpy.ops.object.delete()

#Cube作成
N = 10
for x in range(0, N):
for y in range(0, N):
for z in range(0, N):
bpy.ops.mesh.primitive_cube_add(location=(x*2, y*2, z*2))
bpy.ops.rigidbody.object_add()

#平面作成
bpy.ops.mesh.primitive_plane_add(location=(N-1, N-1, -10))
bpy.ops.rigidbody.object_add(type='PASSIVE')
bpy.data.objects["Plane"].scale = (N+10, N+10, 1)

#カメラ
bpy.data.objects["Camera"].location = (N+20, N+20, N+20)
bpy.data.objects["Camera"].rotation_euler = (math.pi/6, 0, math.pi*3/4)
bpy.data.cameras["Camera"].lens = 10

#照明
bpy.data.objects["Lamp"].location = (0, 0, N+10)
bpy.data.lamps["Lamp"].type = 'SUN'

# 物理シミュレーション
bpy.ops.ptcache.bake_all()

# 動画作成
bpy.context.scene.render.resolution_x = 400
bpy.context.scene.render.resolution_y = 300
bpy.context.scene.render.resolution_percentage = 100
bpy.context.scene.render.image_settings.file_format = 'AVI_JPEG'
bpy.data.scenes["Scene"].render.filepath = "test.avi"
bpy.context.scene.frame_start = 0
bpy.context.scene.frame_end = 200
bpy.ops.render.render(animation=True)

# 保存
savePath = os.path.abspath(os.path.dirname(__file__))
bpy.path.relpath(savePath)
bpy.ops.wm.save_as_mainfile(filepath="test.blend", relative_remap=True)
======================

■ 物理シミュレーションの実行

先に設定したツールを用いて、以下のように実行します。色々なメッセージが表示されながら処理が進みます。
$ blender-simulator sim00.py

暫く待つと、「Append frame 200 Time: 00:00.27 (Saving: 00:00.05) Blender quit」が表示されたら完了です。結果を確認します。
$ ls
sim00.py:用意した入力スクリプト
test.avi:生成された動画ファイル
test.blend:Blender用の入力ファイル

さてお待ちかねの動画ファイルを確認してみます。AVIの動画ファイルは以下のコマンドで表示できます。小さなブロックで作られた大きな立方体が下の板に向かって重力落下して、バラバラに崩れ散る様子が分かると思います。
$ totem test.avi

■ 入力スクリプトの解説

この入力スクリプトは、Python言語のスクリプトなので、記述方法などもPythonに従っています。スクリプトを理解するために必要な情報を、各記述に対応してまとめておきます。

======================
⇒ # -*- coding: utf-8 -*-
スクリプトのファイルの漢字コードを指定します。ここでは、UTF-8を用いています。これがお決まりの呪文です。

⇒ import os
⇒ import bpy
⇒ import math
スクリプトで用いるライブラリを組み込みます。osはオペレーティングシステムの機能であるファイルの生成などのため、bpyはこのスクリプトで中心となるBlender用Pythonライブラリ利用のため、mathは数学関数の利用のためです。

⇒ #デフォルトで存在しているCubeを削除
⇒ bpy.ops.object.delete()
Blenderは標準の初期状態で、中央に立方体が生成されているので、まずはモデルの中のオブジェクト(物体)を全て削除しておきます。


======================

#Cube作成
N = 10
for x in range(0, N):
for y in range(0, N):
for z in range(0, N):
bpy.ops.mesh.primitive_cube_add(location=(x*2, y*2, z*2))
bpy.ops.rigidbody.object_add()

#平面作成
bpy.ops.mesh.primitive_plane_add(location=(N-1, N-1, -10))
bpy.ops.rigidbody.object_add(type='PASSIVE')
bpy.data.objects["Plane"].scale = (N+10, N+10, 1)

#カメラ
bpy.data.objects["Camera"].location = (N+20, N+20, N+20)
bpy.data.objects["Camera"].rotation_euler = (math.pi/6, 0, math.pi*3/4)
bpy.data.cameras["Camera"].lens = 10

#照明
bpy.data.objects["Lamp"].location = (0, 0, N+10)
bpy.data.lamps["Lamp"].type = 'SUN'

# 物理シミュレーション
bpy.ops.ptcache.bake_all()

# 動画作成
bpy.context.scene.render.resolution_x = 400
bpy.context.scene.render.resolution_y = 300
bpy.context.scene.render.resolution_percentage = 100
bpy.context.scene.render.image_settings.file_format = 'AVI_JPEG'
bpy.data.scenes["Scene"].render.filepath = "test.avi"
bpy.context.scene.frame_start = 0
bpy.context.scene.frame_end = 200
bpy.ops.render.render(animation=True)

# 保存
savePath = os.path.abspath(os.path.dirname(__file__))
bpy.path.relpath(savePath)
bpy.ops.wm.save_as_mainfile(filepath="test.blend", relative_remap=True)

DEXCS2012-Salomeの有効活用:骨組解析OpenSeesの導入手順(1)

2013年07月05日 11時50分23秒 | OpenCAE活用
DEXCS-Salomeを利用する人は、多くが機械系CAEの利用者だと思うのですが、今後は建設系CAEも展開することを期待して、建築物などの骨組構造の地震応答解析を実現するOpenSeesの導入方法をまとめます。
実は以前にWindows版バイナリを用いてRC梁の弾塑性解析の検証を行ったことがあり、その時の情報を以下にまとめています。今回は研究開発での大規模高精度解析への展開を狙って、Ubuntu上でのソースコンパイルに挑戦してみます。
http://opencae.gifu-nct.ac.jp/pukiwiki/index.php

まず今回導入する骨組解析OpenSeesの公式サイトを以下に示します。並列処理による大規模解析や高度な構造工学問題への対応などが展開しており、継続的な研究開発が行われています。ちなみにバイナリのダウンロードではユーザー登録が必要ですが、ソースの入手は不要のようです。
http://opensees.berkeley.edu/
実はこの手順については、以下の資料を参考にしています。ここではUbuntuだけでなく、CentOSでの情報もまとめられています。後で調べると、OpennSeesは、相当に多様な環境で構築や動作が出来るようです。お手軽にWindowsでバイナリですぐに動作させることも出来るわけです。
http://y.dyndns.org/OpenCAE/index.php?OpenSees

ベースはDEXCS2012-Salome-D1-B1-64を用います。通常の手順で、DEXCS-Salomeを準備したら、ネットワークを有効にして、システムのアップデートを済ませておきます。もし以前に他のシステムの追加の構築などを行っている場合、以下の手順の中で不要な部分があると思います。

■ ソースプログラムの入手

ここでは、OpenSeesのソースプログラムを、subversionと言うソース管理システムを用いて入手します。そこで、アプリケーション→システムツール→システム管理→Synapticパッケージマネージャを利用します。最初に利用者のパスワードを入力して起動したら、左上の再読込を押してパッケージ情報を最新にします。以下の条件でインストールします。
検索:subversion インストール指定:subversion 適用:15個の新規パッケージを導入

アプリケーション→アクセサリから端末を起動して、ソースプログラムの入手作業を以下の手順で進めます。ここでは、ホームディレクトリにOpenSeesディレクトリを作って、そこにソースプログラムを保存します。
$ cd ~
$ svn co svn://opensees.berkeley.edu/usr/local/svn/OpenSees/trunk OpenSees

暫く待って、「…チェックアウトしました」と表示されたら終了です。中身を確認してみます。
$ cd ~/OpenSees; ls

先ずはREADMEを読んでみますが、要約すると以下の通りです。
・Makefileが、UNIX系システムにおいてmakeの設定になる
・この詳細な設定は、Makefile.defに指定することが必要
・なおインストールには、事前にTcl/Tkが必要であること
(多分多くのLinuxでは入っている。このUbuntuもそう)
・実際にmakeするまえに、~/bin, ~/libを作っておくこと
(ここでは$(HOME)として~(/home/dexcs)を設定してる)
・MAKEの中にMakefile.defの色々な例があるので選択する

それで、MAKEの中身を確認してみます。
$ cd MAKES; ls
色々あるのですが、今回のUbuntuに関連ありそうで、詳しい説明のあるMakefile.def.EC2-UBUNTUを用いることにするので、以下の様に、インストール用ディレクトリ~/OpenSeesにコピーします。
$ cp Makefile.def.EC2-UBUNTU ../Makefile.def

■ インストールの準備

まず忘れないうちに、先のREADMEにある準備をしておきます。このインストールの前提は以下の通りです。
インストールは、ユーザーのホームディレクトリ:/home/dexcs (~) → これをHOMEに設定する
ホームディレクトリのインストール先:~/bin  ホームディレクトリのライブラリ用:~/lib
$ cd ~
$ mkdir bin lib

構築環境の準備で、先に用意したMakefile.defを確認します。
$ cd ~/OpenSees
$ vi Makefile.def (任意のエディタで確認する)

まず、OpenSees, bin, libのあるディレクトリ(ホーム)を指定します。
HOME  = /home/dexcs (自分のホームディレクトリは、$ cd;pwdで確認)

次に、構築の前提となるツールを確認すると、初めの方で、apt-getで導入するツールが列挙されています。この中で追加が必要となるのはなくて、DEXCS2012-Salomeでは既に導入してあります。
※gcc,g++,gfortranなどの確認追記※

■ コンパイルの実行

準備が出来たので、実際にmakeでコンパイルを実行します。
$ cd ~/OpenSees
$ make
始めにライブラリを構築して、~/libに保存してから、コンパイルが進みます。結構な時間がかかるので待ちます。警告が沢山出ますが、取り敢えず気にしません。

エラーが表示されずに、「LIBRARIES BUILT ... NOW LINKING OpenSees PROGRAM」のメッセージが出たら、コンパイルは成功しています。作成された実行形式を確認します。「OpenSees」が完成しています。
$ cd ~/bin; ls

■ OpenSeesの動作の確認

骨組解析システムのOpenSeesは、建築物の地震応答の数値解析を目的に開発されており、非常に多彩で高度な機能を持っていますが、ここではインストール用のソースファイルの中にある簡単な例題を用いて、動作検証を行います。例題を確認します。
$ cd ~/OpenSees/EXAMPLES; ls

色々あるのですが、難しいものばかりなので、取り敢えずの動作確認を、verrificationにあるPlanarTruss.tclを用いて行います。OpenSeesの作業用ディレクトリOpenSeesWorkを作って準備します。
$ cd ~
$ mkdir OpenSeesWork
$ cd OpenSeesWork
$ cp ~/OpenSees/EXAMPLES/verification/PlanarTruss.tcl .

現時点では検証としてPATHは設定せずに、直接に実行してみます。
$ ~/bin/OpenSees PlanarTruss.tcl

直接に解析結果が表示されて、「PASSED Verification Test PlanarTruss.tcl 」として実行が終了します。具体的な例題の意味な活用については、また続きで…

DEXCS2012-Salomeの有効活用:衝突解析Impactの導入手順(1)

2013年07月04日 05時22分37秒 | OpenCAE活用
構造解析では基本となる弾性解析から発展し、実践的な目標として衝突解析を目指される方が多いです。本開発に活用しているSalome-Mecaも接触解析は可能ですが、衝突解析となると未確認です。
やはり衝突解析の専用システムが必要になりますが、商用システムは高度な機能を有するだけあって、それなりに高価です。そこでオープンCAEで何とかならないか検討しました。

今回は、以下の公式サイトで公開されているオープンCAEの衝突解析システムImpactを検証してみようと思います。まだバージョンが0.7ですから、未完成かと思いきや解説文書や検証例題なども充実しています。また並列処理も可能なようです。
さらにシステムがJavaで作られているので、様々なシステムで動作することも特徴です。なのですが、予備解析を簡単にWindowsで進めようとしたらJavaがすぐに落ちてしまい、先に進めませんでした。何か工夫が必要なのかもです。
http://www.impact-fem.org/

ベースはDEXCS2012-Salome-D1-B1-64を用います。先の述べたようにWindowsでは不安定だったので、Ubuntu12.04-64でやってみたら、正常に動作確認が出来ました。基本的には、Java SDK, Java3D が動作する環境ならどこでも動くようです。
DEXCS-Salomeを準備したら、ネットワークを有効にして、システムのアップデートを済ませておきます。なおImpaceはJava環境で動作するので、他のシステムとの影響は無いので、既存の環境へのImpactの追加は問題ないです。

ところで、JavaはVMと言う仮想マシンで動作するので、計算速度が心配です。厳密な比較はしてないですが、感覚的にはそれなりです。ただしマルチコアCPUを活用して並列処理するので、ベースの仮想マシンでは複数CPUコアを利用可能にします。

■ 解析実行環境の準備

まずは、Impactの衝突解析の実行環境を準備します。以下のページを参照して進めます。ここでは、Ubuntuのパッケージ管理ツールSynapticを用いて準備します。以下のウエブの最初の段落に「Installation Prerequisites」にUbuntuに対する補足説明もありますので、その通りに進めます。
http://www.impact-fem.org/intro_install_en

アプリケーション→システムツール→システム管理→Synapticパッケージマネージャを起動します。最初に利用者のパスワードが確認されることがあります。起動したら、左上の再読込を押してパッケージの最新情報に更新します。

・Java engine:これはJavaの実行仮想マシンなどのツールです。
「openjdk」で検索 バージョン6が推奨になっているのですが、最新版7を導入します。以下の9個をインストール指定します。最小限ならばopenjdk-jreだけで良いかもしれませんが、まあ念のため。
openjdk-7の後に、-demo -dgb -doc -jdk -jre -jre-headless -jre-lib -jre-zero -source
適用を押すと、23個の新規パッケージがインストールされます

・Java3D:これはGUIでJavaが3次元表示するためのツールです。
「java3ds」で検索 該当は1つです。以下の1個をインストール指定します。
java3ds-fileloader
適用を押すと、4個の新規パッケージがインストールされます

Synapticを閉じて準備は完了です。Javaなので簡単に出来ますね。

■ ソフトウエアパッケージの入手

先のウエブの2番目の段落に「Impact Installation」の通りに進めます。1のDownloadを押して移動します。以下のダウンロードサイト「Impact Finite Element Program」に行きます。
http://sourceforge.net/projects/impact/

上の方の緑色のダウンロードボタンを押して、暫く待ちます。最新版Impact-0.7.06.039.zipが~/Downloadsに保存されています。

このファイルをホームディレクトリに展開します。以下の様に実行します。(これはDEXCS-Salomeの状態です)ファイルの操作などは端末で行うので、アプリケーション→アクセサリー→端末で起動します。
$ cd ~
$ unzip ~/Downloads/Impact-0.7.06.039.zip
$ mv ~/Download/Impact ~

これでホームディレクトリにImpactディレクトリが出来ました。これで準備は完了です。Javaですからコンパイルも不要で手軽です。

ではImpactディレクトリの中身を確認します。この中でImpactGUI_OGL~.shがUnixシステムでのGUIツール起動スクリプトです。(ImpactGUI_JOGL_OGL~とは別です)
$ cd ~/Impact; ls

色々あって迷いますが、linux用で64bitなのでamd64にします。ちなみにi586は32bit用です。以下の様に起動します。
$ bash ./ImpactGUI_OGL_linux_amd64.sh

少し待つと、Impact Version 0.7.06.039のGUIツールが起動します。スプラッシュまで表示されて高い完成度です。期待できます。確認できたので、左上の×ボタンで終了しておきます。

■ 衝突解析の例題の検証

このInpactには様々な例題が用意してあり、以下のウエブにも紹介され、入力ファイルがダウンロードできます。
http://www.impact-fem.org/sup_example_en
また、ダウンロードしたファイル~/Impactのexamplesにも、その中の一部がありますので、それを使ってみます。

作業用ディレクトリ~/ImpactWorkを作り、そこに例題入力ファイルtracker.inをコピーします。ちなみに、Impactの入力ファイルは、拡張子inの1つだけです。非常に単純で分かりやすいです。
$ cd ~
$ mkdir ~/ImpactWork
$ cd ~/ImpactWork
$ cp ~/Impact/examples/tracker.in .

この入力ファイルを眺めてみると、授業の演習でやるような単純な形式で、節点情報、要素情報、材料情報、解析情報、などが並んで居て、マニュアルも完備されているので、その内容はすぐに理解できます。
http://www.impact-fem.org/doc_fembic_en

た~だ、どこまで実践的な課題に対応できるのか?大規模形状とか複雑な接触条件とか、でもJavaでソース見られるようですし、更新は継続していますし基礎理論のベースもあるようですから、まあ研究開発教育用ツールとしてみれば、十分以上なツールだと思いました。
http://www.impact-fem.org/intro_theory_en

また、以下には開発者用のDevelopment/Programmers Manualもあるので、その気になれば高度な衝突問題も対応できるかも?Javaの計算速度について不安はありますが、先ほど見た起動スクリプトの並びに、ImpactCluserのツールがあって、クラスタの並列処理も可能みたいです。期待は出来ますね。
http://www.impact-fem.org/dev_programmer_en

ウエブの情報だけでなく、インストールしたディレクトリ~/Impactの中にdocディレクトリがあって、そこに大量のウエブドキュメントがあります。DEXCSの上部のツールバーの場所→ホームフォルダーを開き、Impact / doc / index_us.htmlをダブルクリックしてブラウザで開くと、整備された解説文書の全てが確認できます。
良く調べたら、ImpactGUIツールの右端のHelpタブからも閲覧できました。

さて目的に戻って、例題を検証してみます。環境設定などをしない場合は、ImpactGUIはインストールしたディレクトリから起動します。
$ cd ~/Impact
$ bash ./ImpactGUI_OGL_linux_amd64.sh

起動したGUIツールを眺めてみます。詳しい利用法は解説文書を参考にしてください。活用が分かったらまたご報告します。
※なお、DEXCSはVNCなどでリモートデスクトップとして使っていると、GUIの3次元表示が出来ないことがあります。この時は、DEXCS起動時のパネルのGNOMEの足跡マークで、GNOME Classic (No effects)を選択してログインしてください。それでも、Java3Dが正しく表示できないことがあります。

最上段のタブに「Pre Processor」「Processor」「Post Processor」の3つが並んでいます。本来はPre Processorでモデルや条件を設定するのですが、今回は出来上がった例題の入力ファイルを読み込んでみます。Pre Processorタブを選択して進めます。

2段目の左から2つのファイルオープンを選択して、先に用意した~/ImpactWork/tracker.inを開きます。なぜかエラーで読み込めません?まあ気にせずOKで終わらせます。
実はファイルを開くボックスで、ファイルをタイプを選択すると、以下の6つがあります。
 すべてのファイル
 Add STL surface (.stl) 
 Add impact model (.in) to current model
 Add nastran model (.nas, .nastran, .bdf) to current model
 Add Gmsh model (.mesh) to current model
 Add UNV model (.unv) to current model
これらを見るとお馴染みの形状データやメッシュデータなどが読み込めそうです。実践的利用にも適用できそうです。

それでは解析を実行するので、Processorタブを選択します。画面が3つに分かれ、上部はメッセージが表示されて、現在の利用できるCPUコア数が表示されます。

下左のボタンから入力ファイルを読み込みます。作業用ディレクトリ~/ImpactWorkに移動します。ここでファイルのタイプでは、以下の選択肢があります。先に用意したtracker.inを読み込みます。今度は正しく読めたようです。
 すべてのファイル
 Open solver model (.in)

検証と言うことで、取り敢えず、緑色の三角ボタンで実行します。上のメッセージには、予想残時間Remaining timeが表示されています。しばらく待ちます。なおシステムモニターで見ると、確かに利用できる全てのCPUコアを用いて並列処理しています。
最後にSolving took 332167 msなどと表示されたら、解析終了です。この場合、約5分かかりました。

端末から先の作業ディレクトリを見ると、以下の2つのファイルを作られています。いずれもテキストファイルなので、頑張れば変換して他のツールでも使えそうです。
tracker.in.flavia.msh 27KB:形状のメッシュファイル
tracker.in.flavia.res 8.6MB:解析結果のファイル

結果を可視化するので、Post Processorタブを選択して進めます。左端のファイル選択ボタンから作業用ディレクトリ~/ImpactWorkに移動します。ここでファイルのタイプでは、以下の選択肢があります。resultファイルを読み込む選択をして、tracker.in.flavia.resを開きます。読み込むのに少し待ちます。
 すべてのファイル
 Open solver result (.res)

画面に青いメッシュが表示されたら成功です。マウスの操作は以下の通りです。
 左:回転 中:遠近 右:移動

左の欄にTime stepがあり、最初は0.0ですが、形状を良く見ると座屈を誘導する初期不整が確認できます。この時間刻みを選択して、キーボードカーソルで移動させると、アニメーションの様に見えます。

以上で例題の検証は終わりです。相当に可能性を持ったツールだと思いました。




DEXCS2012-Salomeの有効活用:CFD/Code_Saturneの導入手順(3)

2013年06月23日 12時47分11秒 | OpenCAE活用
この検証では、DEXCS2012-Salome-D1-B1-64を用いていますが、要はUbuntu12.04LTS-64bitと言うわけです。高性能を追求するために、様々なツールを組み合わせて、手動でコンパイルすることも有用ですが、極力手間を省いて単にツールとして使いたい要望もあります。

そこで、Ubuntuのベースであるdebianの特徴である、優れたパッケージマネージャーSynapticを用いて、目的を達成する方法を検討します。

■ SynapticによるCode_Saturneの導入手順

・アプリケーション→システムツール→システム管理→Synapticパッケージマネージャを起動します。

・左上の再読込を押して、パッケージ情報を最新にして、右上の検索より「code_saturne」を検索します。

・検索の結果は、code_saturne ver.2.1.0の関連パッケージが5個+syrthesの1個が見つかります。

※バージョンが2.1.0で少し古いのが気になりますが、まあ簡単に導入できますし、公式サイトにはドキュメントなどもあるので、現役システムとして利用することにします。

・導入は、まずcode_saturneパッケージを選択して、インストール指定にします。
 これにより、6つすべてのパッケージがインストール指定になります。
 同時に、gfortranなど非常に多数のツールが連携して導入されます。

・適用を押してインストールを進めます。結果として46個を追加し3個を更新します。
 多数のファイルを処理するので、しばらく待ちます。

・適用が完了したメッセージが出たら、ツールを閉じて終了です。非常に簡単ですね。

■ パッケージ導入したCode_Saturneの検証

・さて本当に導入されているか、確かめてみます。端末を起動して、code_saturneと打ち込むと、
 何と、以前にコンパイルした時と同じようなメッセージが表示されます。バージョンも2.1.0でした。
$ code_saturne
dexcs@dexcs-edf:~$ code_saturne
Usage: /usr/bin/code_saturne <topic>
Topics:
help
autovnv
compile
config
create
gui
info
run
salome
Options:
-h, --help show this help message and exit
$ code_saturne info --version
code_saturne version: 2.1.0

・次にどこに何が導入されたか、調べてみます。次のコマンドで調べてみます。
 なお、最後の 2>/dev/null は、検索できない部分のエラー表示を省略するおまじないです。
$ find / -name code_saturne -print 2>/dev/null
/usr/lib/code_saturne
/usr/lib/python2.7/dist-packages/code_saturne
/usr/share/code_saturne
/usr/share/pyshared/code_saturne
/usr/share/doc/code_saturne
/usr/bin/code_saturne
/usr/include/code_saturne
/etc/bash_completion.d/code_saturne

・残念ながら例題:examplesはありませんが、文書:docsは/usr/share/doc/code_saturneにあるようです。
$ cd /usr/share/doc/code_saturne; ls
autovnv.pdf install.pdf theory.pdf user.pdf
developper.pdf refcard.pdf tutorial.pdf

■ おまけ

最後に、導入が簡単にできたのですが、そもそもCode_Saturneがどんなシステムなのか、Synapticの説明を翻訳することで調べてみます。

=====【Synaptic説明表示より引用】=====
General purpose Computational Fluid Dynamics (CFD) software
汎用数値流体力学(CFD)ソフトウエア「Code_Saturne」

The basic capabilities of Code_Saturne enable the handling of either incompressible or expandable flows with or without heat transfer and turbulence.
Code_Saturneの基本的な機能としては、非圧縮性または膨張性を持つ流体の流れが解析可能であり、この場合には熱伝達や乱流などの考慮の有無に対応しています。

Dedicated modules are available for specific physics such as radiative heat transfer, combustion (gas, coal, heavy fuel oil, ...), magneto-hydrodynamics, compressible flows, two-phase flows (Euler-Lagrange approach with two-way coupling), extensions to specific applications (e.g. Mercure_Saturne for atmospheric environment).
専用の解析モジュールは特定の物理現象に対応しています。例えば、放射熱伝達、燃焼現象(ガス、石炭、重油…)、磁気流体力学、圧縮性流体、二層流現象(2種類の連携に対するオイラーーラグランジェ手法)、特定応用への拡張(例えば、大気環境を対象とするMercure_Saturneなど)

It runs in parallel with MPI on distributed memory machines.
本システムは、分散メモリ並列計算機上でMPIを用いて並列処理で解析します。

Developed since 1997 at EDF R&D, it is based on a co-located Finite Volume approach that accepts meshes with any type of cell (tetrahedral, hexahedral, prismatic, pyramidal, polyhedral...) and any type of grid structure (unstructured, block structured, hybrid, conforming or with hanging nodes, ...).
開発はEDF R&Dにおいて1997より行われ、有限体積法を基本原理におき、様々な要素(四面体、六面体、三角柱、四角錐、多面体…)や、様々な格子構造(非構造格子、構造格子、混合格子、適合また節点依存…)によるメッシュが利用できます。
=====【Synaptic説明表示より引用】=====

■ Salomeとの連携

これまでに説明した方法では、code_saturneにcreateオプションをつけて実行し、流体解析のケースファイルを作ってから、その中に作られたSaturneGUIを実行することで、Code_Saturneを実行していました。なお直接にCode_SaturneのGUIを起動するには、以下の様にオプションguiをつければ起動します。
$ code_saturne gui

次に、構造解析システムSalome-Mecaで利用したCode_AsterのプリポストシステムSalomeを、流体解析Code_Saturneで利用する方法を検討したところ、どうも、本解説で述べたような、Installerを用いる導入、Synapticを用いる導入では、Code_Saturneの導入時にSalomeとの連携が考慮されていないため、そもそも出来ない事のようです。

DEXCS2012-Salomeの有効活用:CFD/Code_Saturneの導入手順(2)

2013年06月18日 21時35分19秒 | OpenCAE活用
先に示した手順で簡単にCode_Saturneが導入できたと思います。小さなインストーラーのみを用いて、自動的にダウンロードして構築するなど、完成度の高いシステムであることが分かります。これよりEDFのCode_Saturne開発への意気込みが、非常に大きと期待されます。

ここでは、インストールしたCode_Saturneの動作確認を、インストールパッケージに入っている例題:examplesを用いて進めたいと思います。その前に、インストール元のディレクトリ~/Downloads/installerの中身を確認しておきます。
$ cd ~/Downloads/installer

ここには、Code_Saturneをインストールするために必要なファイルやオプションパッケージなどがあります。この中で、Code_Saturneのインストールパッケージはcode_saturne-3.0.1.tar.gzで、これを展開したディレクトリがcode_saturne-3.0.1になります。ただし実際にコンパイルにおけるビルドは、code_saturne-3.0.1.buildで行われます。

そこで、code_saturne-3.0.1ディレクトリの内容を確認します。
$ cd code_saturne-3.0.1; ls

インストールに必要なファイルやディレクトリが多数あります。この中で、利用者が取り敢えず直接に必要となるのは、文書:docsと例題:examplesの2つです。他にも有用な情報extras,testsなどがありますが、利用が進んだのちに利用することにします。

なおこのインストールパッケージcode_saturne-3.0.1.tar.gzは、installerからでなく、直接にダウンロードすることもできます。

■ 文書と例題の移動

インストールが完了したら、文書:docsと例題:examplesを、Code_Saturneのファイル保存用ディレクトリ~/CodeSaturneFilesに移動しておきます。
$ cd ~
$ mkdir CodeSaturneFiles
$ cd ~/Downloads/installer/code_saturne-3.0.1
$ cp -r docs examples ~/CodeSaturneFiles
$ cd ~/CodeSaturneFiles; ls

他のファイルは実行に必要ないので、ここでは削除します。以下の手順で行います。
$ cd ~/Downloads
$ sudo rm -r installer installer-3.0.1.tar.gz
(所有者が異なるファイルがあるのでsudoで実行)

■ 文書:docの設定

まずは文書:docsを確認します。
$ cd ~/CodeSaturneFiles/docs; ls

ファイルの名の最後に/があるものが、文書を構成するファイル群を保存した10個のディレクトリです。基本的に文書はTeXで作られており、doxygen, manpages, style などは他の目的の文書です。
Makefile.am autovnv/ doxygen/ manpages/ style/ tutorial/
Makefile.in developer/ install/ refcard/ theory/ user/

以上で示した7つのフォルダのTeXソースを元に、PDF文書が生成されて各ディレクトリ内にあります。同様な文書が、Code_Saturneの公式サイトにも公開されていますが、これらはVer3.0.1に完全に対応しており、ウエブの文書は古い場合もあるので、こちらの利用をお薦めします。
autovnv.pdf developer.pdf install.pdf refcard.pdf theory.pdf tutorial.pdf user.pdf

これらをメニューバーの場所→ホームフォルダーより、ファイルブラウザからダブルクリックして、ドキュメントビューアーよりPDF文書を参照することができます。さらに、code_saturneにはプログラムから、これらの文書を参照する機能があります。これを設定します。

以下の手順で、code_saturneのインストールフォルダに、PDF文書をコピーしておきます。ここでは、例としてrefcard.pdfを行いますが、必要に応じて最後の手順でコピーしてください。
$ cd /opt/salome/code_saturne-3.0.1/share/
$ mkdir -p doc/code_saturne
$ cd doc/code_saturne
$ cp ~/CodeSaturneFiles/docs/refcard/refcard.pdf .

以下のコマンド実行で、指定したPDF文書を、Ubuntuのドキュメントビューアーで表示することができます。
$ code_saturne info -g refcard

■ 例題:examplesの検証

このバージョンのcode_saturneには、以下の4つの例題があります。
1-simple_junction 2-full_domain 3-stratified_junction 4-2Ddisks

これらの説明は、先に移動した文書:doc中のtheory.pdfにあり、以下のように対応しています。

1-simple_junction → P.7 Part II Simple junction testcase
2-full_domain → P.13 Part III Full domain
3-stratified_junction → P.33 Part IV Stratified junction
4-2Ddisks → P.41 Part V Three 2D disks

流体解析では多数のファイルをディレクトリに分けて管理しており、全体を一覧するためにUbuntuのファイルブラウザの一覧表示で見ることができます。ただ様々な操作は端末上で行うので、コマンドよりファイル構成を確認するために、treeコマンドをインストールのときに用いたSynapticを使って導入しておきます。

それでは最初の1番目の例題を検証してみます。フォルダに移動します。
$ cd ~/CodeSaturneFiles/examples/1-simple_junction

そこにはcase1,meshの2つのディレクトリがあり、treeで見ると以下のファイル構成になっています。
$ tree
├── case1
│  └── case1.xml
└── mesh
   └── downcomer.des

1: Code_SaturneのCASEディレクトリを作成する

Code_Saturneは、1つ以上のCASEディレクトリを含むSTUDYディレクトリを作成して、そこに流体解析に必要なファイルを配置します。ここでは、最も単純な形として1-simple_junctionをSTUDYディレクトリとして、この中に1つのCASEディレクトリを作ります。なお以下のようにCASE名を指定しない場合は、CASE1になります。
$ code_saturne create

これよりSTUDYディレクトリは、以下のような構成となります。なお、このCASEディレクトリの準備については、先に用意した/home/dexcs/CodeSaturneFiles/docs/userにあるuser.pdfのP.19 3.3 Case preparerに、詳しい説明があります。

詳しい説明は徐々に進めるとして、概要だけをまとめておきます。まずDATAディレクトリには、REFERENCEディレクトリとSaturneGUIスクリプトがあります。
REFERENCEディレクトリには、様々な物性データが集められており、この情報の名前や内容は変更できません。SaturneGUIスクリプトは、Code_Saturneを活用するためのGUIツールの起動用スクリプトです。
次にSRCディレクトリには、REFERENCEディレクトリとEXAMPLESディレクトリがあります。これらはユーザーサブルーチンの情報がまとめられています。
更にSCRIPTSディレクトリには、Code_Saturneの解析実行スクリプトがあります。なおRESUは結果のディレクトリです。

1-simple_junction
├── CASE1
│  ├── DATA
│  │  ├── REFERENCE
│  │  │  ├── cs_user_scripts.py
│  │  │  …
│  │  │  └── meteo
│  │  └── SaturneGUI
│  ├── RESU
│  ├── SCRIPTS
│  │  └── runcase
│  └── SRC
│     ├── EXAMPLES
│     │  ├── cs_user_boundary_conditions-advanced.f90
│     │  …
│     │  └── cs_user_postprocess-sfc.c
│     └── REFERENCE
│        ├── cs_user_atmospheric_model.f90
│        …
│        └── usvosy.f90
├── case1
│  └── case1.xml
└── mesh
   └── downcomer.des

2: simple_junctionのデータを準備する

例題の1-simple_junctionには、既に必要がファイルが用意されているので、以下の手順で解析設定情報のxmlファイルを、先に作ったCASEディレクトリのDATAディレクトリにコピーします。
$ cd ~/CodeSaturneFiles/examples/1-simple_junction
$ cp case1/case1.xml CASE1/DATA

次に各ケースで共通で利用するメッシュ情報をMESHディレクトリとして、作成したSTUDYディレクトリ1-simple_junctionの中に、CASEディレクトリと並べて、以下のように例題のmeshディレクトリを利用して用意します。
$ cp -r mesh MESH

3: Code_SaturneのGUIツールを起動する

先に用意した起動スクリプトSaturneGUIを用いて、以下のように起動します。
$ cd CASE1/DATA
$ ./SaturneGUI
解析事例の画像を集めた表示のあるCode_Saturne GUI-3.0.1が起動します。
FileメニューからOpenより、先に用意したcase1.xmlを開きます。ツール上に設定情報が表示されます。
Code_Saturneでは、解析の結果を起動時刻で管理しているので、一旦この設定をFile→Saveで保存して現在時刻の情報とします。
念のためFile→Quitで終了して、再度case1.xmlの設定ファイルを読み込みます。

4: Code_Saturneで流体解析を実行する

左下の設定項目の一覧の中で、最後のCalucutation managemnet を開いて、最後のPreparer batch calculationを選択します。
右下のScript fileパネルの下の、Calculation startのStart calculationボタンを押して実行します。

※なお最初の実行のとき、python2.7/site-packageにおいてmesh関連のエラーがログ表示パネルに赤色で表示され、中断する場合があります。この時は一旦終了して、再度StaurneGUIを起動すると正しく実行できることがあります。原因は不明です。

ログ表示パネルには、以下のように実行の進展が表示されます。以下より、code_saturne-3.0.1を1CPUで単独実行して、結果をCAE1のRESUディレクトリ中の2013062201106に保存したことがわかります。
これより、解析結果の保存ディレクトリ名が、解析時刻の分までで決められているので、1分以内に再実行すると正しく進まないようです。

==(抜粋)==
Code_Saturne is running
Version: 3.0.1
Path: /opt/salome/code_saturne-3.0.1
Result directory: /home/dexcs/CodeSaturneFiles/examples/1-simple_junction/CASE1/RESU/20130622-1106
Single processor code_saturne simulation.

****************************
Preparing calculation data
****************************
Preprocessing calculation
****************************
Starting calculation
****************************
Saving calculation results
****************************
==(抜粋)==

確認できたら、OKを押して終了します。GUIツールもFile→Saveで保存してから、File→Quitで終了しておきます。

5: 解析結果をSalome/ParaViSで確認する

指示どおり、RESUディレクトリに結果が出来ているかを確認します。
$ cd ../RESU; ls -l

解析実行毎に、年月日ー時分として20130622-1106のように結果ディレクトリがあります。ここに移動して確認します。
$ cd 20130622-1106

結果として色々なファイルがあるのですが、解析結果はpostprocessingディレクトリにあるので、移動して確認します。
$ cd postprocessing; ls *.case

ここで、Code_Saturneはデフォルトで、EnSight形式の結果ファイルを出力するので、拡張子がcaseとなるため、上記のように確認すると、RESULTS.caseがあります。次に、EnSight形式はSalomeに組み込まれているParaViSモジュールで読み込むことができます。もちろん単独のParaViewでも可能です。

そこでデスクトップにあるSalomeのアイコンから起動して、モジュールをParaViSに切り替えます。ファイル→ParaViewファイルを開く…で、File of type をEnSight Files( *.case *.CASE *.Case )にしてから、RESULTS.caseをディレクトリを移動して探してから開きます。Applyを押すと赤いモデル空間が表示できます。

ここから先は結果の見方になるので、続く記事でまとめようと思います。以上で、例題:examplesを用いて、Code_Saturneの起動が確認できました。



DEXCS2012-Salomeの有効活用:CFD/Code_Saturneの導入手順(1)

2013年06月17日 18時47分29秒 | OpenCAE活用
DEXCS2012-Salomeは、Salome-Mecaによる構造解析を目的とするオープンCAEシステムですが、開発元のEDFでは流体解析ソルバーとしてCode_Saturneを公開しています。これはプリポストシステムのSalomeにおいて、構造解析Code_Asterと流体解析Code_Saturneを統合した連成解析が可能となっているそうなので、非常に期待しています。
http://code-saturne.org/cms/

そこで、DEXCS2012-Salome (Ubuntu-12.04LTS-64)をベースにして、Code_Saturneを導入する手順をまとめます。なおこの手順は、以下のPENGUINITISさんのブログを参考にして、DEXCS2012-Salome用に補足したものです。他のLinuxシステムでも同様な手順ですが、具体的な記述はDEXCS2012-Salome-D1-B1-64をベースにしています。
http://www.geocities.co.jp/SiliconValley-SantaClara/1183/study/Code_Saturne/Code_Saturne_setup.html

Code_Saturneの導入では、以下の"installation guide"に示す手作業で各種のツールを組み込んで、完全で高性能なシステムを構築することも可能ですが、この記事では簡易なインストーラーを用いる方法を説明します。性能向上が必要になった段階で、手作業での高性能システムの構築手順をご紹介する予定です。
http://code-saturne.org/cms/sites/default/files/install-3.0.pdf

■ はじめの注意

インストールではネットワークからダウンロードを行うので、DEXCS2012はインターネットに接続可能にします。
他にCUDAの導入などを行うとツールのバージョンが異なるので、以下はDEXCS2012-Salomeの導入直後を前提とします。
以下に示す導入手順は例題が動作する基本状態の構築までを示しており、並列処理など性能向上にはツールの追加が必要になります。

■ ダウンロードと展開

以下のサイトからCode_Saturneのインストールツールをダウンロードします。2013/06時点での最新の公開版は3.0になるので、ページの最初の行にある"installer"よりダウンロードします。インストールツールなのですぐに終わります。DEXCSでChromiumブラウザを用いた場合は、ホームのDownloadsに、installer-3.0.1.tar.gzが保存されます。
http://code-saturne.org/cms/download/3.0

以下の手順で展開して、~/Downloads/installerでインストール作業を進めます。なお以下の手順ではコマンド入力を基本にしており、Ubuntuの端末を利用します。DEXCSでは上部のバーかアプリケーション→アクセサリ→端末で利用できます。複数起動して目的に応じて使い分けると便利です。
$ cd ~/Downloads
$ tar xvfz installer-3.0.1.tar.gz
$ cd installer; ls -l

ここで3つのファイルが確認できて、README.txtはインストールの説明、install_saturne.pyはインストールスクリプト、setupはインストールの設定ファイルでこれを書き換えてインストールを進めます。

■ インストール環境の準備

DEXCSの状態でインストールを進めるためには、以下のツールの追加が必要です。アプリケーション→システムツール→システム管理→Synapticパッケージマネージャを起動します。ログインユーザーのパスワードを入力してツールが起動したら、再読込を押して最新の状態にしておきます。

g++:検索 g++ (4.6.3) → g++ g++4.6 libstdc++6-4.6-dev (3)
gfortran:検索 gfortran (4.6.3) → gfortran gfortran-4.6 (2)
opnempi:検索 openmpi (1.4.3) → libopenmpi-dbg libopenmpi-dev (2) + 関連ツール(1)
cmake:検索 cmake (2.8.7) → cmake cmake-data cmake-dbg (3) + 関連ツール(2)
PyQt4:検索 pyqt4 (4.9.1) → pyqt4-dev-tools (1)

■ setupファイルの変更

以下の方針に従って設定を変更します。これは動作を確認した設定ですが、インストール先などは他に選択できます。
・インストール先は、Salome-Mecaがインストールされている/opt/salomeとします。このディレクトリを自由に利用できるように、次のコマンドで設定しておきます。
$ cd /opt
$ sudo chmod 777 salome
・数値計算においては、blasが必要になり様々な高性能ツールがありますが、ここではDEXCSにあるlibblas3gfをそのまま利用します。将来はOpenBLAS、IntelMKLなどの交換が可能です。
・並列処理においては、metis, scotchなどの高性能ツールがありますが、ここではインストールせずデフォルトの機能を利用します。手作業の完全インストールでは、これらを導入できます。
・オプショナルパッケージの cgns, hdf5, med, libxm2 はインストールが必要で、mpiは/usrにインストールされたツールを流用します。これらはインストーラーが自動的にインストールします。

以上を踏まえて、設定ファイルsetupをインストール条件に合わせて変更するので、エディタviなどでsetupを開きます。
$ cd ~/Downloads/installer
$ vi setup

・prefix ~/opt → prefix /opt/salome
・mpi None yes yes → mpi /usr yes no
・libxml2 None auto no  → libxml2 None yes yes

■ コンパイルの実行

先のsetupに従って、以下のコマンドでコンパイルを実行します。
$ ./install_saturne.py

オプショナルパッケージやCode_Saturneなどはインターネットからダウンロードして自動にインストールまで進めてくれます。インストール作業ディレクトリ~/Download/installerの状態を、lsで確認すると様子が分かります。
インストールは、自動的にインストールパッケージをダウンロードし展開して設定して、コンパイルとインストールまで完全自動で進みます。非常に完成度の高いシステムです。インストールは、以下の順序で進みます。
HDF5 (Hierarchical Data Format):version: 1.8.9
CGNS (CFD General Notation System):version: 3.1.3
MED (Model for Exchange of Data):version: 3.0.6
libxml2 (XML library):version: 2.7.8
Code_Saturne (Code_Saturne CFD tool):version: 3.0.1

エラーが無く、最後に「Thank you for choosing Code_Saturne!」と表示されたら、コンパイルは完了です。なお途中でエラーで中断した場合には、install_saturune.logの最後にエラーの詳細があるので、これを参考に対処します。

インストール先は、/opt/salome/code_saturne-3.0.1です。この中のbinに、code_saturne ple-configがあり、「code_saturne」が実行形式になります。以下のコマンドで、実行時のオプションが表示されます。
$ /opt/salome/code_saturne-3.0.1/bin/code_saturne

以下の記述を最後に追加して、コマンド実行パスを設定しておきます。
$ cd ~
$ vi .bashrc
$ source .bashrc

===== .bashrc =====
# code_saturne
export PATH=/opt/salome/code_saturne-3.0.1/bin:$PATH
===================

DEXCS2012-Salomeの有効活用:CUDA5によるGPGPU環境構築(1)

2013年06月05日 11時38分11秒 | OpenCAE活用
ここではアプリケーションとしてのCAEから発展して、CUDA5.0を用いたGPGPUプログラミング環境を構築して、超並列数値解析によるCAEの可能性を検証したいと思います。

ベースとなるシステムは、DEXCS2012-Salome-D1-B1-64を利用します。平成25年5月末に公式サイトから公開しています。これはベースとしてはUbuntu12.04-LTS-64になるので、DEXCSでなくても同様な構築は可能だと思うので、パッケージの追加などはそれぞれの環境で確認してください。

まずはDEXCS2012-Salome-D1-B1-64.isoを用いてベースの環境を構築します。目的はGPGPUによるCUDAプログラミングなのでGPUの活用が前提です。しかし現時点では仮想マシンからはGPUが利用できないと思うので、CUDA5.0に対応したGPUが搭載されたPCに直接にDEXCSをインストールすることになります。

ISOファイルからDEXCSインストール用DVDを作成したら、このDVDから起動して以下の手順に従ってベースの環境の構築を進めてください。なおネットワークからソフトウエアをダウンロードする方法で進めるので、ネットワークは必須になります。またGPUも利用可能な状態であることが前提です。
(インストール手順は作成中:基本的にはインストーラ「Custom12.04のインストール」の指示どおり)

なおベースのUbuntu12.04では、アップデートマネージャーでシステムを最新の状態にしておきます。

■ CUDAドライバのインストール

NVIDIAのGPUデバイスを利用するためには、ドライバをインストールする必要があります。この方法には色々ありますが、4つほど紹介します。簡単に実行するお勧めは2の方法です。

1:CUDAのインストールパッケージを用いて、ToolkitとSamplesと同時にドライバを導入することもできますが、GUIの停止や再開などの手間が必要になる場合があります。また設定ツールのインストールなども面倒になります。

2:Ubuntuの場合にはシステムの標準的な方法が、メニューのアプリケーション→システムツール→システム設定→追加のドライバーにあります。デスクトップPCでシステムがGPUを認識すれば、この方法が最も確実な方法になります。

3:上記のNVIDIAのダウンロードページから、利用するGPUを選択してLinux64bit-Japaneseの条件で検索し、NVIDIA-Linux-x86_64-319.23.runをダウンロード出来ました。これを用いてGPUドライバを導入する方法です。

実は検証用のノートPCでは、GeForce GT555Mが搭載されているのですが、Ubuntuの追加のドライバーでは認識できず、確実な2の方法が実行できません。そこで、NVIDIAのサイトからダウンロードする3の方法がありますが、これも1と同じような難しい手順が必要です。
http://www.nvidia.co.jp/Download/index.aspx?lang=jp

最後に、UbuntuのSynapticパッケージマネージャを利用する4の方法があります。これはノートPCなどで、CPUとGPUのグラフィック機能が両方あって、目的に応じて使い分ける「NVIDIA OPTIMUS」により制御する場合に対応する方法です。Linux上でnvidia optimus機能に対応するために、bumblebeeを用います。
http://bumblebee-project.org/

4:DEXCS2012-SalomeにはSynapticが既に導入してあるので、アプリケーション→システムツール→システム管理→Synapticパッケージマネージャを起動します。

(0) bumblebeeを導入する準備として、端末より以下のコマンドを入力しておきます。続いてSynapticの再読み込みで最新のパッケージ情報にしておきます。
$ sudo add-apt-repository ppa:bumblebee/stable

(1) Synapticの検索よりbumblebeeを探します。以下の3つが見つかるので、インストール指定して関連ツールも導入します。
bumblebee, bumblebee-dbg, bumblebee-nvidia

(2) 適用を実行して、インストールを進めます。これによってnvidia-currentのドライバもインストールされます。Synapticの検索でnvidiaより探して確認しておきます。

(3) これまで使われていたnvidia-gpu用の汎用ドライバNouveau display driverを削除するため、Synapticでnouveauを検索して、xserver-xorg-video-nouveauを完全削除します。

(4) ここで導入したGPU用のドライバなどを有効にするために、再起動します。

(5) ドライバの導入を確認するために、端末よりCPU動作のglxspheresとGPU動作のoptirun glxsperesで画像の生成の状態や結果出力よりnvidia-gpuの動作を確認できます。

以上の手順で導入されたnvidia-currentのドライバは、Synapticで確認すると304.88です。次に導入するCUDA-5.0では304.54より新しいドライバが必要なので、一応大丈夫です。

■ CUDAシステムの構築環境準備

以下の手順では、全てSynapticを用いて導入して、リンクの調整などを端末でコマンド入力により進めます。

・glutの導入: glutで検索
freeglut3, freeglut3-dbg, freeglut3-dev の3つが導入された状態にする。関連する追加パッケージも導入する。
以下のコマンドでリンクを張る。
$ sudo ln -s /usr/lib/x86_64-linux-gnu/libglut.so /usr/lib/libglut.so

・g++の導入: g++で検索
g++, g++-4.6, libstdc++6-4.6-dev の3つが導入された状態にする。

・OpneMPIの導入: openmpiで検索
最新版としてver1.5が必要なので、openmpi1.5-bin, openmpi1.5-checkpoint, openmpi1.5-common, openmpi1.5-doc の4つと、
libopenmpi1.5-2, libopenmpi1.5-dbg, libopenmpi1.5-dev の3つが 導入された状態にする。関連する追加パッケージも導入する。

ただしDEXCS-Salomeとしても利用する場合で、Gmshのメッシュツールを動作させるには、OpenMPI-1.4.3が前提になるので、上記の導入によりGmshは動作しなくなるので、上部パネルからも削除しておく。

・Xiの導入: xiで検索
libxi-dev, libxi6, libxi-dbg の3つが導入された状態にする。

・Xmuの導入: xmuで検索
libxmu6, libxmu-dev, libxmu-headers, libxmu-dbg 4つが 導入された状態にする。

以上で準備は終わりです。

■ CUDAシステムのインストール

ドライバを導入してベースシステムが出来たので、次はCUDAのプログラミング環境を準備します。以下のNVIDIAサイトからUbuntu12.04-64bitに対応したCUDA-5.0システムをダウンロードします。「LINUX: CUDA 5.0 Production Release」のUbuntu11.10-64bitを選択します。
https://developer.nvidia.com/cuda-toolkit-50-archive

最新版CUDA-5.5のダウンロードは、以下より可能ですが、これはDriver-319以上が必要になり、上記の手順では304.88なので、導入には面倒な手順が必要になります。
https://developer.nvidia.com/cuda-downloads

・準備作業
現時点で最新の「cuda_5.0.35_linux_64_ubuntu11.10-1.run」をダウンロードしたら、端末を開いて、CUDA作業用フォルダ~/CUDAworkを作って、そこにファイルを移動して、準備を進めます。
$ cd ~
$ mkdir CUDAwork
$ mv ~/Downloads/cuda_5.0.35_linux_64_ubuntu11.10-1.run ~/CUDAwork/
$ cd CUDAwork
$ chmod a+x cuda_5.0.35_linux_64_ubuntu11.10-1.run

・構築手順
それでは、CUDA-5.0の導入を進めます。このインストールファイルはCUDA-5.0の、Driver, Toolkit, Samples、3つをインストール出来ますが、先にnvidia-currentで304.88のCUDA対応のGPUドライバをインストールしているので、Toolkit,Samplesのみを導入します。
$ sudo ./cuda_5.0.35_linux_64_ubuntu11.10-1.run で実行者のパスワードを入力し、インストールファイルを実行します。

英文でライセンスや利用条件などが出力されますが、確認しながらスペースバーで最後まで進めます。

最後に、Do you accept the previously read EULA? (accept/decline/quit): に対して、acceptで進めます。

Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 304.54? ((y)es/(n)o/(q)uit): に対しては先に述べたように不要なので、noで進めます。

Install the CUDA 5.0 Toolkit? ((y)es/(n)o/(q)uit): に対しては必要なので、yesで進めます。

Enter Toolkit Location [ default is /usr/local/cuda-5.0 ]: に対してはデフォルトにするので、Enterで進めます。

Install the CUDA 5.0 Samples? ((y)es/(n)o/(q)uit): に対しては必要なので、yesで進めます。

Enter CUDA Samples Location [ default is /usr/local/cuda-5.0/samples ]: に対してはデフォルトにするので、Enterで進めます。

Installing the CUDA Toolkit in /usr/local/cuda-5.0 ... と表示されてインストールが進みます。しばらくかかります。

インストールの結果が以下の様に示されます。
===========
= Summary =
===========
Driver: Not Selected
Toolkit: Installed in /usr/local/cuda-5.0
Samples: Installed in /usr/local/cuda-5.0/samples (pristine) and /home/dexcs/NVIDIA_CUDA-5.0_Samples (writable)

最後に以下の警告が出ますが、取り敢えず動作するので先に進めます。
***WARNING: Incomplete installation! This installation did not install the CUDA Driver. A driver of version at least 304.54 is required for CUDA 5.0 functionality to work.

・環境変数など

続いて以下の手順に示されたように、プログラミングに関する環境変数などを設定します。
* Please make sure your PATH includes /usr/local/cuda-5.0/bin
* for 64-bit Linux distributions add /usr/local/cuda-5.0/lib64 and /lib to /etc/ld.so.conf and run ldconfig as root

$ vi ~/.bashrc でファイルの最後に以下を追加します。
# cuda
export PATH=/usr/local/cuda-5.0/bin:${PATH}
端末を閉じて新しい端末を開いてから、printenv | grep PATH で設定を確認します。

$ sudo vi /etc/ld.so.conf でファイルの最後に以下を追加します。
/usr/local/cuda-5.0/lib64
/usr/local/cuda-5.0/lib
/usr/lib/nvidia-current
設定したら、sudo ldconfig してから、ldconfig -p | grep cuda で設定を確認します。なお、nvidia-currentの場所は導入したドライバによって異なっています。

・ライブラリの設定

本当ならこれで環境構築は完了なのですが、Samplesをコンパイルするときに、libcuda.soが無いとエラーが出るので、応急的に以下のコマンドでリンクを作っておきます。
$ sudo ln -s /usr/lib/nvidia-current/libcuda.so /usr/local/cuda-5.0/lib64/libcuda.so

■ CUDA Samplesのコンパイル

上記のインストールにより、/home/dexcs/NVIDIA_CUDA-5.0_Samples が作られているので、そこでコンパイルを以下の様に実行します。
$ cd /home/dexcs/NVIDIA_CUDA-5.0_Samples
$ make

相当に時間がかかりますが、終わるまで暫く待ちます。ここでエラーなどで停止した場合には、準備作業が不完全か、バージョンの不一致などですので、メッセージを良く見て対応します。

エラー無く以下のメッセージが出たらコンパイルが全て完了です。
Finished building CUDA samples

■ CUDA Samplesの実行

上記のコンパイルで作られた実行形式は、~/NVIDIA_CUDA-5.0_Samples/bin/linux/release に作られるので、移動します。
$ cd ~/NVIDIA_CUDA-5.0_Samples/bin/linux/release

ここでそのまま ./deviceQuery と実行しても、以下の様に実行できません。NVIDIA Optimusが制御出来ないからです。
./deviceQuery Starting...
CUDA Device Query (Runtime API) version (CUDART static linking)
cudaGetDeviceCount returned 38
-> no CUDA-capable device is detected

そこで、optirun ./deviceQuery と実行すると、以下の様に正しく実行できます。これでCUDA-5.0が動作することが確かめられました。ただしoptirunよる実行では、最初に切り替え時間がかかるようです。
./deviceQuery Starting...
CUDA Device Query (Runtime API) version (CUDART static linking)
Detected 1 CUDA Capable device(s)
Device 0: "GeForce GT 555M"
CUDA Driver Version / Runtime Version 5.0 / 5.0
CUDA Capability Major/Minor version number: 2.1
……
< Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) >
deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 5.0, CUDA Runtime Version = 5.0, NumDevs = 1, Device0 = GeForce GT 555M

それでは、画像生成による例として nbody を試してみます。
$ optirun ./nbody とすると、GPUにより高速に天体の多体問題の計算が進みます。30GFLOPSぐらい出ています。
$ oprirun ./nbody -cpu とすると、 非常に低速な処理になることが実感できます。0.5GFLOPSがやっとこですね。


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コアの場合とほぼ同じでした。並列処理の効果がなかなか確認できません。