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秒で並列処理の方が遅くなっています。