SlideShare a Scribd company logo
V. AdvSolid-1.2 の概要
第 6 回 ADVENTURE 定期セミナー
ADVENTURE_Solid Ver. 1.2 の概要
九州大学 荻野正雄
2008 年 9 月 29 日 ( 月 )
V. AdvSolid-1.2 の概要
第 6 回 ADVENTURE 定期セミナー
目的
• 領域分割法のアルゴリズムを理解することによ
り , AdvSolid で重要となるプログラム部分を見
つけることができるようになる .
• Ver.1.2 から導入した線形代数関数群 advlas に
ついて学ぶことで , AdvSolid を高速化するカス
タマイズを行えるようになる .
• 数値実験例を通じて , 希望する AdvSolid シミュ
レーションに適した最新パソコンを選択できる
ようになる .
V. AdvSolid-1.2 の概要
第 6 回 ADVENTURE 定期セミナー
内容
• 領域分割法について
– DDM のアルゴリズム
– DDM の実装
– DDM のデータ
– DDM のプログラム - 部分領域 FEM における関数
• 線形代数関数群 advlas
– advlas の使い方
– Ver.1.2 における高速化手法
• 数値実験例
– 最近のパソコン上における演算性能評価
V. AdvSolid-1.2 の概要
第 6 回 ADVENTURE 定期セミナー
ADVENTURE_Solid Ver.1.2 の概要
リリース日
2007 年 11 月 20 日
更新内容
標準のソルバオプションを bdd-diag に変更
HDDM ソルバおよび BDD 系ソルバの高速化・省メモリ
化
– 計算時間を 50% 程度短縮,メモリ使用量を 40% 程度
削減
V. AdvSolid-1.2 の概要
第 6 回 ADVENTURE 定期セミナー
領域分割法について
領域分割法 (Domain Decomposition Method: DDM)
• 解析領域 ( 離散化された有限要素モデル ) を空間的にサ
ブ領域 ( 部分領域 ) に分割することで , 演算を部分領域
の独立領域と部分領域間の袖領域に分けて行う手法 .
有限要素モデル
領域分割モデル
有限要素 節点 領域独立節点 袖領域節点
領域分割は要素ベース
で行い , 部分領域で要
素の重なりはない
V. AdvSolid-1.2 の概要
第 6 回 ADVENTURE 定期セミナー
DDM アルゴリズム - 領域の分
割
fKu =
・解くべき式
orgiven vect:ctor,unknown ve:
SPDmateix,stiffness:
fu
K
NΩΩΩ ,...,1→・ N 個に領域分割
∑∑
==
===
N
i
i
T
i
N
i
ii
T
iii fRfRKRKuRu
11
,,
自由度制限行列 Ri
全体自由度から領域 i 自由度へ
 
全体領域
部分領域 i
Ri
V. AdvSolid-1.2 の概要
第 6 回 ADVENTURE 定期セミナー
  領域内部自由度 (I)
  領域間境界上自由度 (B)
DDM アルゴリズム - 自由度の分
割
・部分領域の自由度を領域内部 (I) と領域間境界 (B) に分割






=





=





=





=
iB
iI
i
iB
iI
i
BB
T
iIB
iIBiII
i
iB
iI
i
R
R
R
f
f
f
KK
KK
K
u
u
u
0
0
,,,
領域分割モデル
RIi
RBi
V. AdvSolid-1.2 の概要
第 6 回 ADVENTURE 定期セミナー
DDM アルゴリズム - 式の分割














=




























∑ B
NI
iI
B
NI
I
iBiBB
T
iB
T
NIB
T
NB
T
IB
T
B
NBNIBNII
BIBII
f
f
f
u
u
u
RKRKRKR
RKK
RKK



1
11
111
0
0
( ) NiuRKfKu BiBiIBiIiIIiI ,...,1,
1
=−=
−
( )∑
=
−
−=
N
i
iIiII
T
iIBiB
T
iB fKKfRg
1
1
部分領域内部と領域間境界に式を分割
(1) 領域間境界上自由度に関する式 ( インターフェース問題 )
(2) 部分領域内部自由度に関する式
gSuB = iIBiII
T
iIBiBBi
N
i iBi
T
iB KKKKSRSRS
1
1
,
−
=
−== ∑
・ (I),(B) で自由度を並び替えた式
(1) を解き , 求まっ
た uB を用いて (2)
を解き , 全体の解 u
V. AdvSolid-1.2 の概要
第 6 回 ADVENTURE 定期セミナー
DDM の実装 - 基本方針
• インターフェース問題は反復法 ( 共役勾配法 ) で解く
– 全体自由度に応じて問題規模が増加のため
– 係数行列を陽に作成するのは困難のため
– 係数行列 - ベクトル積に既存の FEM コードが利用可能
のため
• 領域内部自由度問題は直接法で解く
– 全体自由度に依らず問題規模を制御可能のため
– 右辺問題を何度も解く必要性のため
( ) NiuRKfKu BiBiIBiIiIIiI ,...,1,
1
=−=
−
gSuB =
V. AdvSolid-1.2 の概要
第 6 回 ADVENTURE 定期セミナー
DDM の実装 - CG 法アルゴリ
ズム
kkkk
T
kk
T
kk
kk
kkkk
kkkBkB
k
T
kk
T
kk
kk
pzp
zrzr
rMz
qrr
puu
qpzr
Spq
k
β
β
α
α
α
+=
=
=
−=
−=
=
=
=
++
++
+
−
+
+
+
11
11
1
1
1
1
1
/
ˆˆ
/
0,1,2,...for
00
0
1
0
00
0
ˆ
guessinitial:ˆ
zp
rMz
guSr
u
B
B
=
=
−=
−
1
ˆ
−
M
p
z
r
u
k
k
k
kB : k-th approximate solution vector
: residual vector
: preconditioned residual vector
: search direction vector
: preconditioning matrix
初期化 CG 反復
V. AdvSolid-1.2 の概要
第 6 回 ADVENTURE 定期セミナー
DDM の実装 - 行列ベクトル積
• 係数行列 - ベクトル積 → 等価な領域単位の処理に置き換
える






−






=






⋅ pRKK
KKx
iBiBB
T
iIB
iIBiIIi
0






⋅






=






⋅
−
iiIIi x
I
Kw
1
0
0












=





 ⋅
pR
w
KK
KK
y iB
i
iBB
T
iIB
iIBiII
i
∑=
=
N
i
i
T
iB yRy
1
( ) pRKKKKRSpy
N
i iBiIBiII
T
iIBiBB
T
iB∑ =
−
−== 1
1
(1) 領域間境界を基本
境界として処理
(2) 連立方程式の求解
(3) 領域間境界上の
反力計算
(4) 領域間境界上で
重ね合わせ
Dirichlet 境界
Neumann 境界
領域間境界
Dirichlet 自由度
未知自由度
V. AdvSolid-1.2 の概要
第 6 回 ADVENTURE 定期セミナー
DDM の実装 - 行列ベクトル積










−










=










⋅
⋅
0
0
pR
KKK
KKK
KKKx
iB
i
T
iB
T
iI
iBiBB
T
iIB
iIiIBiIIi
DDDD
D
D
ΓΓΓΓ
Γ
Γ










⋅
⋅










=










⋅
⋅
−
iiIIi x
I
I
Kw
1
00
00
00
∑=
=
N
i
i
T
iB yRy
1
領域 i における元の基本境界を D とし ,




















=










⋅
⋅
0
pR
w
KKK
KKK
KKK
y iB
i
i
T
iB
T
iI
iBiBB
T
iIB
iIiIBiII
i
DDDD
D
D
ΓΓΓΓ
Γ
Γ
全体自由度を
(I): 領域内部
(B): 領域間境界上
(ΓD): 元の基本境界上
に分けて考える
V. AdvSolid-1.2 の概要
第 6 回 ADVENTURE 定期セミナー
DDM の実装 - 初期残差










−
−










=










⋅
⋅
i
BiB
i
T
iB
T
iI
iBiBB
T
iIB
iIiIBiIIi
DDDDD
D
D
u
uR
KKK
KKK
KKKx
ΓΓΓΓΓ
Γ
Γ
0
ˆ
0










⋅
⋅
+










=










⋅
⋅
−
iIiiIIi xf
I
I
Kw
1
00
00
00
( )∑
=
−=
N
i
Bii
T
iB fyRr
1
0




















=










⋅
⋅
i
BiB
i
i
T
iB
T
iI
iBiBB
T
iIB
iIiIBiII
i
DDDDD
D
D
u
uR
w
KKK
KKK
KKK
y
ΓΓΓΓΓ
Γ
Γ
0
ˆ
元の基本境界 D 上の変位境界条件値を   とすると ,iD
uΓ
初期残差計算時には
元の境界条件 ( 変位
拘束 , 表面力 , 体積
力 ) を
考慮すればよい
Dirichlet 境界
Neumann 境界
領域間境界
V. AdvSolid-1.2 の概要
第 6 回 ADVENTURE 定期セミナー
DDM の実装 - 内部自由度解










−
−










=










⋅
⋅
i
BiB
i
T
iB
T
iI
iBiBB
T
iIB
iIiIBiIIi
DDDDD
D
D
u
uR
KKK
KKK
KKKx
ΓΓΓΓΓ
Γ
Γ 0










⋅
⋅
+










=










⋅
⋅
−
iIiiIIIi xf
I
I
Ku
1
00
00
00
CG 法により求めた領域間境界上の解を   とすると ,Bu
内部自由度解計算時
にも元の境界条件を
考慮し忘れないよう
に
する
V. AdvSolid-1.2 の概要
第 6 回 ADVENTURE 定期セミナー
DDM データ - 有限要素モデル
Dirichlet 境界
Neumann 境界
有限要素モデル情報
Element
- 要素数 16
- 要素節点コネクティビティ
Node
- 節点数 25
- 節点座標値
FEGA:ForcedDisplacement
- 変位拘束条件数 10 (5 節点 x2 方向 )
- 変位拘束条件
FEGA:Load
- 荷重条件数 10 (5 節点 x2 方向 )
- 荷重条件
FEGA:YoungModulus,PoissonRatio
- 材料物性値
簡単のため , 2 次元 4 節
点 4 角形要素で説明を
行う
V. AdvSolid-1.2 の概要
第 6 回 ADVENTURE 定期セミナー
DDM データ - 領域分割モデル
Dirichlet 境界
Neumann 境界
領域間境界
領域分割モデル情報
HDDM_Element
- 要素数
- 要素節点コネクティビティ
Node
- 節点数
- 節点座標値
HDDMFEGA:ForcedDisplacement
- 変位拘束条件数
- 変位拘束条件
HDDMFEGA:Load
- 荷重条件数
- 荷重条件
HDDM_FEGA:InterfaceDOF
- 領域間境界条件数
- 領域間境界条件
HDDM_FEGA:YoungModulus,PoissonRati
o
Ω0
Ω1 Ω2
Ω3
4 4 4 4
Ω0 Ω1 Ω2 Ω3
9 9 9 9
Ω0 Ω1 Ω2 Ω3
6 0 0 6
Ω0 Ω1 Ω2 Ω3
0 6 4 0
Ω0 Ω1 Ω2 Ω3
8 10 10 8
Ω0 Ω1 Ω2 Ω3
V. AdvSolid-1.2 の概要
第 6 回 ADVENTURE 定期セミナー
DDM プログラム - 領域メッシュ用構造体
DomMeshDomMesh
  定義 : hddm_types.h
  機能 : 1 つの Subdomain のメッシュデータや境界条件を格納する.
  メンバー変数 :
int domid; Subdomain の属する Part 内でのローカル ID
int elms; Subdomain 内の要素数
int nd_elm; 要素を構成する節点数
int* nop; Subdomain 内の要素コネクティビティを格納する int 配列
int nodes; Subdomain 内の節点数  
int node_dim; 節点の次元数
int* ndindex; Subdomain 内節点の Part ローカル節点番号を格納する int 配列
double* crd; Subdomain 内の節点座標値を格納する double 配列
int ndisp; 基本境界条件数
Bcnd* bcdisp; 基本境界条件を格納する Bcnd 配列
int nload; 荷重境界条件数
Bcnd* bcload; 荷重境界条件を格納する Bcnd 配列
int ninbd; 他 Subdomain と共有する Interface 自由度数
Inbc* inbd; 他 Subdomain との共有 Interface 自由度情報を格納する Inbc 配列
int with_matid; 材料物性値 ID を持つかどうか ( 複数材料モデルかどうか )
int* matid; Subdomain 内要素の材料物性値 ID を格納する int 配列
一部のメンバー変数は省略
この 2 つを合わせたものが
DDM における基本境界条件
V. AdvSolid-1.2 の概要
第 6 回 ADVENTURE 定期セミナー
DDM プログラム - spartsolv()
void spartsolv() {
DomMesh dmesh;
HDDM_SkylineMat hddmmat;
for (i = 0; i < pmesh.n_domain; i++) {
/* 領域メッシュと境界条件情報を設定 */
dmesh = SetDom4CG(optsw, sw_cg, i, pmesh, pfield, cgvec, sw_kpmat);
/* 係数行列 , LDLt 分解 , 体積力ベクトルを作成 */
hddmmat = MkNewHDDM_SkylineMat(optsw, cgoption, dmesh, dfield);
/* 初期残差 , 係数行列ベクトル積 , or 領域内部解を計算 */
domsolve(sw_cg, optsw, dmesh, dfield, hddmmat);
/* 計算結果をインターフェース自由度ベクトルに重ね合わせ */
put_domvec_to_cgvec(dmesh, dfield.reac, cgvec.a_w);
/* 領域メッシュ情報を解放 */
UnsetDom4CG(pmesh, &dmesh);
}
} インターフェース問題の初期残差
や行列ベクトル積を計算 ( 一部省
略 )
入力データが pmesh->dom[i]
(DomMesh 型 ) に格納されてい
る
CG 初期 , 反復 , 収束後に応じて境界
条件を変更した DomMesh 変数
V. AdvSolid-1.2 の概要
第 6 回 ADVENTURE 定期セミナー
DDM プログラム - dom_setdisp_for_cg()
void dom_setdisp_for_cg() {
dmesh.ndisp += dmesh.ninbd;
dmesh.bcdisp = (Bcnd *) Calloc(sizeof(Bcnd), dmesh.ndisp);
if (sw_cg != SWCG_ITER) {
for (i = 0; i < pmesh.dom[idom].ndisp; i++) {
dmesh.bcdisp[i].node = pmesh.dom[idom].bcdisp[i].node;
dmesh.bcdisp[i].co = pmesh.dom[idom].bcdisp[i].co;
dmesh.bcdisp[i].val = pmesh.dom[idom].bcdisp[i].val;
}
} else {
for (i = 0; i < pmesh.dom[idom].ndisp; i++) {
dmesh.bcdisp[i].node = pmesh.dom[idom].bcdisp[i].node;
dmesh.bcdisp[i].co = pmesh.dom[idom].bcdisp[i].co;
dmesh.bcdisp[i].val = 0.0;
}
}
for (i=0; i< pmesh.dom[idom].ninbd; i++) {
dmesh.bcdisp[ndisp + i].node = pmesh.dom[idom].inbd[i].node;
dmesh.bcdisp[ndisp + i].co = pmesh.dom[idom].inbd[i].co;
dmesh.bcdisp[ndisp + i].val =
cgvec.w[pmesh.dom[idom].inbd[i].mypart_ibid];
}
}
初期残差計算と領
域内部解計算時は
元の境界条件値
CG 反復中は値は 0
インターフェースを基本境界条件に加える
V. AdvSolid-1.2 の概要
第 6 回 ADVENTURE 定期セミナー
DDM プログラム - dom_setload_for_cg()
void dom_setload_for_cg() {
if (sw_cg != SWCG_ITER) {
dmesh.nload += pmesh.dom[idom].nload;
dmesh.bcload = (Bcnd *) Calloc(sizeof(Bcnd), dmesh.nload);
for (i = 0; i < pmesh.dom[idom].nload; i++) {
dmesh.bcload[i].node = pmesh.dom[idom].bcload[i].node;
dmesh.bcload[i].co = pmesh.dom[idom].bcload[i].co;
dmesh.bcload[i].val = pmesh.dom[idom].bcload[i].val;
}
} else {
dmesh.nload = 0;
dmesh.bcload = NULL;
}
}
初期残差計算と領域内
部解計算時は元の境界
条件値
CG 反復中は荷重境界条
件なし
V. AdvSolid-1.2 の概要
第 6 回 ADVENTURE 定期セミナー
DDM プログラム - domsolve()
void domsolve() {
if (sw_cg != SWCG_ITER) {
set_load_to_rhs(force, matdim, dmesh.nload, dmesh.bcload);
for(i=0;i<matdim;i++) force[i] += hddmmat.force[i];
}
for (i=0;i<matdim;i++) disp[i] = force[i];
for (i=0;i<matdim;i++) reac[i] = 0.0;
put_neg_bcdisp_to_vec(dmesh.ndisp, dmesh.node_dim, dmesh.bcdisp, reac);
advlas_matmult_vec_add(hddmmat.gk, reac, disp);
advlas_ldl_solve(hddmmat.gk_inv, disp);
put_bcdisp_to_vec(dmesh.ndisp, dmesh.node_dim, dmesh.bcdisp, disp);
for (i=0;i<matdim;i++) reac[i] = 0.0;
advlas_matmult_vec_add(hddmmat.gk, disp, reac);
if (sw_cg == SWCG_FIRST)
for (i=0;i<matdim;i++) reac[i] -= force[i];
}
初期残差計算と領域内
部解計算時は右辺項に
外力と体積力を加える
Dirichlet 境界条件処理
( 行列ベクトル積を含む )
連立方程式求解
反力計算
( 行列ベクトル積を含む )
初期残差計算時は残差計算
V. AdvSolid-1.2 の概要
第 6 回 ADVENTURE 定期セミナー
領域分割法のまとめ
• 領域間境界上に縮約されたインターフェース問
題を反復法で解き , その後領域内部問題を解く
• インターフェース問題への CG 法では , 係数行
列ベクトル演算は部分領域 FEM 解析と見なせる
• 部分領域 FEM 解析では , 領域間境界を基本境界
条件として取り扱う .
• 境界条件値は CG 法のどの過程かで異なる
V. AdvSolid-1.2 の概要
第 6 回 ADVENTURE 定期セミナー
DDM に必要な演算のまとめ
• 部分領域毎の FEM 解析
– 基本境界条件処理のために行列ベクトル積
– 領域内部自由度解を求める連立方程式求解
– 反力を求める行列ベクトル積
⇒ 領域数 ×(CG 反復回数 +1)
• インターフェース問題の CG 反復処理
– インターフェース自由度をもつベクトル演算
⇒ CG 反復回数
ここの ( 線形代数 ) 演算を高
速化することが全体の高速
化にとって重要
V. AdvSolid-1.2 の概要
第 6 回 ADVENTURE 定期セミナー
Ver. 1.2 の開発
• 目的
– 線形代数処理 ( 行列ベクトル積 , 連立一次方程式求
解 )
の高速化
– 同処理関数群のメンテナンス性改善
100 万自由度問題をメモリ 1GB 上で 1 分で解きたい
Ver.1.1 の性能 : 約 100 万自由度規模弾性問題
Cmd: mpirun -n 2 advsolid-p -solver bdd-diag
Iterations: 66
Time: 145.7 sec
Memory: 2.3 GB
CPU: Intel Core2Duo E6600 [2.4GHz/L2 4MB]
Memory: DDR2-SDRAM 1GB x 4
OS: openSUSE 10.2 x86_64
CC: gcc-4.1.2 -O3 -m64 -march=nocona
MPI: mpich2-1.0.7
V. AdvSolid-1.2 の概要
第 6 回 ADVENTURE 定期セミナー
線形代数関数群 advlas
• 正式名称
– ADVenture Linear Algebra Systems
• 機能
– Ver.1.1 以前が持つ行列演算関数群を独立
– 従来のスカイライン形式に加えて , 非零形式をサ
ポート
• 別紙資料 1
– 環境変数 , 構造体 , 変数リファレンスマニュアル
V. AdvSolid-1.2 の概要
第 6 回 ADVENTURE 定期セミナー
advlas - 行列用構造体 DMatrix
DMatrix
定義 : advlas_matop.h
機能 : 行列のインデックスや値などを格納する.メンバー変数 type
の設定値によって行列の格納方式が異なる.
メンバー変数 :
int type; 行列の対称性や格納方式
int ndim; 行列の次元数
int nlen; 1 次元化した行列を格納する配列 mat の大きさ
int* idx1; インデックス用配列
int* idx2; インデックス用配列
double* mat; 1 次元化された行列の値を格納する配列
p.4
V. AdvSolid-1.2 の概要
第 6 回 ADVENTURE 定期セミナー
advlas - 対応する行列形式
• MATRIX_SKYLINE_SYMMETRIC
– 実対称行列 , スカイライン形式
• MATRIX_NONZERO_SYMMETRIC
– 実対称行列 , 非零形式
• MATRIX_SKYLINE_ASYMMETRIC
• MATRIX_NONZERO_ASYMMETRIC
– 実非対称版 , 現バージョンでは非対応
















908
76
504
32
1
{ }22000 { }64310
{ }90876504321
{ }975310 { }423220100
{ }987654321
idx1 idx2
idx1 idx2
mat
mat
p.3
p.3
p.14
p.15
V. AdvSolid-1.2 の概要
第 6 回 ADVENTURE 定期セミナー
advlas - 使い方の例
#include "hddm_types.h"
#include "advlas.h"
DMatrix gk, gk_inv;
double* work;
/* K_i の作成 */
gk = NewDMatrix(ndim, MATRIX_NONZERO_SYMMETRIC);
advlas_mkindex(dmesh, &gk);
gk.mat = (double *) Calloc(sizeof(double), gk.nlen);
for (ielm = 0; ielm < dmesh.elms; ielm++) {
fe_make_elm_k(ek, elm_crd, &state_var, &fe_material, &(optsw.feopt));
advlas_assemble_elmk(ek, nop, nd_elm, node_dim, gk);
}
/* {K_{II}}_i^{-1} の作成 */
gk_inv = NewDMatrix(ndim, MATRIX_SKYLINE_SYMMETRIC);
work = (double *) Calloc(sizeof(double), matdim);
advlas_mkreducedindex(optsw.solver_type, bcdisp_table, gk, &gk_inv);
gk_inv.mat = (double *) Calloc(sizeof(double), gk_inv.nlen);
advlas_copy_gk2inv(optsw.solver_type, dmesh, bcdisp_table, gk, gk_inv);
advlas_ldl_decomposite(gk_inv, work);
p.5
p.5
p.5
p.6
p.6
p.7
V. AdvSolid-1.2 の概要
第 6 回 ADVENTURE 定期セミナー
部分領域 FEM 解析の改良
• 部分領域毎の FEM 解析
– 基本境界条件処理のために行列ベクトル積
– 領域内部自由度解を求める連立方程式求解
– 反力を求める行列ベクトル積






=
iBB
T
iIB
iIBiII
i
KK
KK
K
1
1
0
0
−
−






=
I
K
K iII
iII
剛性行列の記憶形式
ver.1.1: スカイライン形式 → ver.1.2: 非零形式
領域内部自由度解析のための LDLt 分解行列
ver.1.1:      → ver.1.2:1−
iIIK
1−
iIIK
V. AdvSolid-1.2 の概要
第 6 回 ADVENTURE 定期セミナー
計算性能の改善
CPU: Intel Core2Duo E6600 [2.4GHz/L2 4MB]
Memory: DDR2-SDRAM 1GB x 4
OS: openSUSE 10.2 x86_64
CC: gcc-4.1.2 -O3 -m64 -march=nocona
MPI: mpich2-1.0.7
底面を拘束
上面に下向き荷重
有限要素モデル 領域分割モデル
要素数 242,322 部分数 2
節点数 375,257 領域分割数 1,876
基本境界条件数 7,398 Interface 自由
度数
31,203
総自由度数 1,118,373
Ver.1.1 Ver.1.2
Iterations 66 65
Time (s) 145.7 65.2 55%↓
Mem. (GB) 2.3 1.3 43%↓
V. AdvSolid-1.2 の概要
第 6 回 ADVENTURE 定期セミナー
AdvSolid-1.2 のまとめ
• 基本である DDM において計算負荷の高い部分を
改良することにより , 計算時間を 50% 程度短縮 .
同時に使用メモリを 40% 削減することに成功 .
• 上記部分プログラムを線形代数関数群 advlas と
して整理することで , メンテナンス性が向上 .
  外部の線形代数ライブラリへの置き換えも容
易に
V. AdvSolid-1.2 の概要
第 6 回 ADVENTURE 定期セミナー
AdvSolid-1.2 による数値実験例
• Dual Core (DC) マシン ( 九州大学計算力学研究室 )
– CPU: Intel Core2Duo E6600 [2.4GHz/L2 4MB]
– Memory: DDR2-SDRAM 1GB x 4
– OS: openSUSE 10.2 x86_64
– CC: gcc-4.1.2, icc-10.1.015
– MPI: mpich2-1.0.7
• Quad Core (QC) マシン ( 東京大学吉村研究室 )
– CPU: Intel Core2Quad Q6600 [2.4GHz/L2 8MB]
– Memory: DDR2-SDRAM 2GB x 4
– OS: openSUSE 11.0 x86_64
– CC: gcc-4.3.1
– MPI: mpich2-1.0.7
V. AdvSolid-1.2 の概要
第 6 回 ADVENTURE 定期セミナー
使用ソフトウェア
ソフトウェア
• IO モジュール AdvIO-1.2
• 領域分割モジュール AdvMetis-1.1
• 弾性解析モジュール AdvSolid-1.2
コンパイルオプション
• DC: -O3 -m46 -march=nocona
• QC: -O3 -m64 -march=core2
V. AdvSolid-1.2 の概要
第 6 回 ADVENTURE 定期セミナー
数値実験例
DOFs Dom D/Q CPU Core Iter. Time Mem (GB)
1M 2K DC 1 1 45 82.9s 1.3
1M 2K DC 1 2 45 51.3s 1.3
1M 2K QC 1 1 43 73.6s 1.3
1M 2K QC 1 2 49 47.9s 1.3
1M 2K QC 1 4 46 31.8s 1.3
12M 20K DC 4 8 137 13.1m 14.4
12M 20K DC 8 8 137 10.5m 14.4
12M 20K DC 6 12 150 8.5m 14.2
12M 20K QC 2 8 130 14.6m 14.5
12M 20K QC 3 12 154 9.9m 14.2
35M 60K DC 12 12 358 58.9m 42.7
35M 60K DC 12 24 236 24.4m 41.2
35M 60K DC 24 24 236 22.1m 41.2
35M 60K DC 24 48 207 13.6m 40.1
V. AdvSolid-1.2 の概要
第 6 回 ADVENTURE 定期セミナー
Ver.1.2 の性能の考察
• 100 万自由度問題規模 : メモリは 2GB 未満
– Core2Duo E6600/2GB x 1 で 1 分
– Core2Quad Q6600/2GB x 1 で 30 秒
• 1,200 万自由度問題規模 : メモリは 16GB 未満
– Core2Duo E6600/4GB x 4 で 13 分
– Core2Quad Q6600/8GB x 2 で 15 分
• 3,500 万自由度問題規模 : メモリは 48GB 未満
– Core2Duo E6600/4GB x 12 で 25 分
V. AdvSolid-1.2 の概要
第 6 回 ADVENTURE 定期セミナー
A. 開発中の省メモリ版プレビ
ュー
DOF Dom D/Q CC CPU Core Iter. Time(m) Mem(MB)
1M 3K DC icc 1 1 42 4.8 536
1M 3K DC icc 1 2 42 2.7 534
1M 3K QC gcc 1 1 40 6.2 543
1M 3K QC gcc 1 2 40 3.2 530
1M 3K QC gcc 1 4 43 2.0 575
12M 30K DC icc 4 8 135 36.1 7.0
12M 30K QC gcc 2 8 135 41.2 6.8
35M 90K DC icc 6 12 125 1.5h 19.1
35M 90K DC icc 12 24 221 1.1h 18.3
35M 90K QC gcc 3 12 215 2.5h 19.2
100M 1M DC icc 24 48 485 6.46h 70.0
V. AdvSolid-1.2 の概要
第 6 回 ADVENTURE 定期セミナー
…開発中省メモリ版だと
• 100 万自由度問題規模 : メモリは 400MB 未満 (v1.2:
2GB)
– Core2Duo E6600/1GB x 1 で 3 分 (v1.2: 1 分 )
– Core2Quad Q6600/1GB x 1 で 2 分 (v1.2: 30 秒 )
• 1,200 万自由度問題規模 : メモリは 6GB 未満 (v1.2:
16GB)
– Core2Duo E6600/2GB x 4 で 36 分 (v1.2: 13 分 )
– Core2Quad Q6600/4GB x 2 で 41 分 (v1.2: 15 分 )
• 3,500 万自由度問題規模 : メモリは 16GB 未満 (v1.2:
48GB)
– Core2Duo E6600/2GB x 12 で 1.5 時間 (v1.2: 25 分 )
– Core2Quad Q6600/8GB x 3 で 2.5 時間
• 1 億自由時問題規模 : メモリは 70GB (v1.2: 140GB)
V. AdvSolid-1.2 の概要
第 6 回 ADVENTURE 定期セミナー
今後のロードマップ
• AdvSolid-2.0 に向けて
– 動的弾性 / 弾塑性問題解析の追加
– 大変形解析機能の改善
– 線形拘束条件式の考慮
• Ver.2.0 以降
– 弾塑性構成式の追加
– 硬化則の追加
– 他の非定常解析モジュールとの連成機能強化
– 接触問題解析機能の追加
– 固有値問題解析機能の追加

More Related Content

What's hot

[DL輪読会]Efficient Video Generation on Complex Datasets
[DL輪読会]Efficient Video Generation on Complex Datasets[DL輪読会]Efficient Video Generation on Complex Datasets
[DL輪読会]Efficient Video Generation on Complex Datasets
Deep Learning JP
 
強化学習その3
強化学習その3強化学習その3
強化学習その3
nishio
 
[Dl輪読会]A simple neural network module for relational reasoning
[Dl輪読会]A simple neural network module for relational reasoning[Dl輪読会]A simple neural network module for relational reasoning
[Dl輪読会]A simple neural network module for relational reasoning
Deep Learning JP
 
東京都市大学 データ解析入門 8 クラスタリングと分類分析 1
東京都市大学 データ解析入門 8 クラスタリングと分類分析 1東京都市大学 データ解析入門 8 クラスタリングと分類分析 1
東京都市大学 データ解析入門 8 クラスタリングと分類分析 1
hirokazutanaka
 
アルゴリズムイントロダクション15章 動的計画法
アルゴリズムイントロダクション15章 動的計画法アルゴリズムイントロダクション15章 動的計画法
アルゴリズムイントロダクション15章 動的計画法
nitoyon
 
Category Profit Management
Category Profit ManagementCategory Profit Management
Category Profit Management
Hiroyuki Mita
 
[DL輪読会]`強化学習のための状態表現学習 -より良い「世界モデル」の獲得に向けて-
[DL輪読会]`強化学習のための状態表現学習 -より良い「世界モデル」の獲得に向けて-[DL輪読会]`強化学習のための状態表現学習 -より良い「世界モデル」の獲得に向けて-
[DL輪読会]`強化学習のための状態表現学習 -より良い「世界モデル」の獲得に向けて-
Deep Learning JP
 
Android/iOS端末におけるエッジ推論のチューニング
Android/iOS端末におけるエッジ推論のチューニングAndroid/iOS端末におけるエッジ推論のチューニング
Android/iOS端末におけるエッジ推論のチューニング
Deep Learning Lab(ディープラーニング・ラボ)
 
強化学習エージェントの内発的動機付けによる探索とその応用(第4回 統計・機械学習若手シンポジウム 招待公演)
強化学習エージェントの内発的動機付けによる探索とその応用(第4回 統計・機械学習若手シンポジウム 招待公演)強化学習エージェントの内発的動機付けによる探索とその応用(第4回 統計・機械学習若手シンポジウム 招待公演)
強化学習エージェントの内発的動機付けによる探索とその応用(第4回 統計・機械学習若手シンポジウム 招待公演)
Shota Imai
 
公平性を保証したAI/機械学習
アルゴリズムの最新理論
公平性を保証したAI/機械学習
アルゴリズムの最新理論公平性を保証したAI/機械学習
アルゴリズムの最新理論
公平性を保証したAI/機械学習
アルゴリズムの最新理論
Kazuto Fukuchi
 
カメラ間人物照合サーベイ
カメラ間人物照合サーベイカメラ間人物照合サーベイ
カメラ間人物照合サーベイYoshihisa Ijiri
 
[DL輪読会]“Spatial Attention Point Network for Deep-learning-based Robust Autono...
[DL輪読会]“Spatial Attention Point Network for Deep-learning-based Robust Autono...[DL輪読会]“Spatial Attention Point Network for Deep-learning-based Robust Autono...
[DL輪読会]“Spatial Attention Point Network for Deep-learning-based Robust Autono...
Deep Learning JP
 
【CVPR 2019】DeepSDF: Learning Continuous Signed Distance Functions for Shape R...
【CVPR 2019】DeepSDF: Learning Continuous Signed Distance Functions for Shape R...【CVPR 2019】DeepSDF: Learning Continuous Signed Distance Functions for Shape R...
【CVPR 2019】DeepSDF: Learning Continuous Signed Distance Functions for Shape R...
cvpaper. challenge
 
[DL輪読会]SOLAR: Deep Structured Representations for Model-Based Reinforcement L...
[DL輪読会]SOLAR: Deep Structured Representations for Model-Based Reinforcement L...[DL輪読会]SOLAR: Deep Structured Representations for Model-Based Reinforcement L...
[DL輪読会]SOLAR: Deep Structured Representations for Model-Based Reinforcement L...
Deep Learning JP
 
楽天における機械学習アルゴリズムの活用
楽天における機械学習アルゴリズムの活用楽天における機械学習アルゴリズムの活用
楽天における機械学習アルゴリズムの活用
Rakuten Group, Inc.
 
Microsoft Malware Classification Challenge 上位手法の紹介 (in Kaggle Study Meetup)
Microsoft Malware Classification Challenge 上位手法の紹介 (in Kaggle Study Meetup)Microsoft Malware Classification Challenge 上位手法の紹介 (in Kaggle Study Meetup)
Microsoft Malware Classification Challenge 上位手法の紹介 (in Kaggle Study Meetup)
Shotaro Sano
 
物体検出コンペティションOpen Imagesに挑む
物体検出コンペティションOpen Imagesに挑む物体検出コンペティションOpen Imagesに挑む
物体検出コンペティションOpen Imagesに挑む
Hiroto Honda
 
[DL輪読会]EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks
[DL輪読会]EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks[DL輪読会]EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks
[DL輪読会]EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks
Deep Learning JP
 
CNN-SLAMざっくり
CNN-SLAMざっくりCNN-SLAMざっくり
CNN-SLAMざっくり
EndoYuuki
 

What's hot (20)

[DL輪読会]Efficient Video Generation on Complex Datasets
[DL輪読会]Efficient Video Generation on Complex Datasets[DL輪読会]Efficient Video Generation on Complex Datasets
[DL輪読会]Efficient Video Generation on Complex Datasets
 
強化学習その3
強化学習その3強化学習その3
強化学習その3
 
[Dl輪読会]A simple neural network module for relational reasoning
[Dl輪読会]A simple neural network module for relational reasoning[Dl輪読会]A simple neural network module for relational reasoning
[Dl輪読会]A simple neural network module for relational reasoning
 
PCL
PCLPCL
PCL
 
東京都市大学 データ解析入門 8 クラスタリングと分類分析 1
東京都市大学 データ解析入門 8 クラスタリングと分類分析 1東京都市大学 データ解析入門 8 クラスタリングと分類分析 1
東京都市大学 データ解析入門 8 クラスタリングと分類分析 1
 
アルゴリズムイントロダクション15章 動的計画法
アルゴリズムイントロダクション15章 動的計画法アルゴリズムイントロダクション15章 動的計画法
アルゴリズムイントロダクション15章 動的計画法
 
Category Profit Management
Category Profit ManagementCategory Profit Management
Category Profit Management
 
[DL輪読会]`強化学習のための状態表現学習 -より良い「世界モデル」の獲得に向けて-
[DL輪読会]`強化学習のための状態表現学習 -より良い「世界モデル」の獲得に向けて-[DL輪読会]`強化学習のための状態表現学習 -より良い「世界モデル」の獲得に向けて-
[DL輪読会]`強化学習のための状態表現学習 -より良い「世界モデル」の獲得に向けて-
 
Android/iOS端末におけるエッジ推論のチューニング
Android/iOS端末におけるエッジ推論のチューニングAndroid/iOS端末におけるエッジ推論のチューニング
Android/iOS端末におけるエッジ推論のチューニング
 
強化学習エージェントの内発的動機付けによる探索とその応用(第4回 統計・機械学習若手シンポジウム 招待公演)
強化学習エージェントの内発的動機付けによる探索とその応用(第4回 統計・機械学習若手シンポジウム 招待公演)強化学習エージェントの内発的動機付けによる探索とその応用(第4回 統計・機械学習若手シンポジウム 招待公演)
強化学習エージェントの内発的動機付けによる探索とその応用(第4回 統計・機械学習若手シンポジウム 招待公演)
 
公平性を保証したAI/機械学習
アルゴリズムの最新理論
公平性を保証したAI/機械学習
アルゴリズムの最新理論公平性を保証したAI/機械学習
アルゴリズムの最新理論
公平性を保証したAI/機械学習
アルゴリズムの最新理論
 
カメラ間人物照合サーベイ
カメラ間人物照合サーベイカメラ間人物照合サーベイ
カメラ間人物照合サーベイ
 
[DL輪読会]“Spatial Attention Point Network for Deep-learning-based Robust Autono...
[DL輪読会]“Spatial Attention Point Network for Deep-learning-based Robust Autono...[DL輪読会]“Spatial Attention Point Network for Deep-learning-based Robust Autono...
[DL輪読会]“Spatial Attention Point Network for Deep-learning-based Robust Autono...
 
【CVPR 2019】DeepSDF: Learning Continuous Signed Distance Functions for Shape R...
【CVPR 2019】DeepSDF: Learning Continuous Signed Distance Functions for Shape R...【CVPR 2019】DeepSDF: Learning Continuous Signed Distance Functions for Shape R...
【CVPR 2019】DeepSDF: Learning Continuous Signed Distance Functions for Shape R...
 
[DL輪読会]SOLAR: Deep Structured Representations for Model-Based Reinforcement L...
[DL輪読会]SOLAR: Deep Structured Representations for Model-Based Reinforcement L...[DL輪読会]SOLAR: Deep Structured Representations for Model-Based Reinforcement L...
[DL輪読会]SOLAR: Deep Structured Representations for Model-Based Reinforcement L...
 
楽天における機械学習アルゴリズムの活用
楽天における機械学習アルゴリズムの活用楽天における機械学習アルゴリズムの活用
楽天における機械学習アルゴリズムの活用
 
Microsoft Malware Classification Challenge 上位手法の紹介 (in Kaggle Study Meetup)
Microsoft Malware Classification Challenge 上位手法の紹介 (in Kaggle Study Meetup)Microsoft Malware Classification Challenge 上位手法の紹介 (in Kaggle Study Meetup)
Microsoft Malware Classification Challenge 上位手法の紹介 (in Kaggle Study Meetup)
 
物体検出コンペティションOpen Imagesに挑む
物体検出コンペティションOpen Imagesに挑む物体検出コンペティションOpen Imagesに挑む
物体検出コンペティションOpen Imagesに挑む
 
[DL輪読会]EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks
[DL輪読会]EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks[DL輪読会]EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks
[DL輪読会]EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks
 
CNN-SLAMざっくり
CNN-SLAMざっくりCNN-SLAMざっくり
CNN-SLAMざっくり
 

Similar to ADVENTURE_Solid Ver.1.2の概要

ADVENTURE_Solidの概要
ADVENTURE_Solidの概要ADVENTURE_Solidの概要
ADVENTURE_Solidの概要
ADVENTURE Project
 
PF部2011年12月勉強会.androidsola
PF部2011年12月勉強会.androidsolaPF部2011年12月勉強会.androidsola
PF部2011年12月勉強会.androidsolaandroid sola
 
Try_to_writecode_practicaltest #atest_hack
Try_to_writecode_practicaltest #atest_hackTry_to_writecode_practicaltest #atest_hack
Try_to_writecode_practicaltest #atest_hack
kimukou_26 Kimukou
 
ADVENTURE_Thermalの概要
ADVENTURE_Thermalの概要ADVENTURE_Thermalの概要
ADVENTURE_Thermalの概要
ADVENTURE Project
 
EWD 3トレーニングコース#19 JavaScriptからGlobalストレジにアクセスする
EWD 3トレーニングコース#19 JavaScriptからGlobalストレジにアクセスするEWD 3トレーニングコース#19 JavaScriptからGlobalストレジにアクセスする
EWD 3トレーニングコース#19 JavaScriptからGlobalストレジにアクセスする
Kiyoshi Sawada
 
浮動小数点(IEEE754)を圧縮したい@dsirnlp#4
浮動小数点(IEEE754)を圧縮したい@dsirnlp#4浮動小数点(IEEE754)を圧縮したい@dsirnlp#4
浮動小数点(IEEE754)を圧縮したい@dsirnlp#4Takeshi Yamamuro
 
Halide による画像処理プログラミング入門
Halide による画像処理プログラミング入門Halide による画像処理プログラミング入門
Halide による画像処理プログラミング入門
Fixstars Corporation
 
TVM の紹介
TVM の紹介TVM の紹介
TVM の紹介
Masahiro Masuda
 
Intel AVX2を使用したailia sdkの最適化
Intel AVX2を使用したailia sdkの最適化Intel AVX2を使用したailia sdkの最適化
Intel AVX2を使用したailia sdkの最適化
HitoshiSHINABE1
 
20180109 titech lecture_ishizaki_public
20180109 titech lecture_ishizaki_public20180109 titech lecture_ishizaki_public
20180109 titech lecture_ishizaki_public
Kazuaki Ishizaki
 
第11回 配信講義 計算科学技術特論B(2022)
第11回 配信講義 計算科学技術特論B(2022)第11回 配信講義 計算科学技術特論B(2022)
第11回 配信講義 計算科学技術特論B(2022)
RCCSRENKEI
 
130710 02
130710 02130710 02
130710 02openrtm
 
怪しいWindowsプログラミング
怪しいWindowsプログラミング怪しいWindowsプログラミング
怪しいWindowsプログラミングnagoya313
 
日本発オープンソース!! スケールアウト型データベース GridDB入門 ~ GitHubからダウンロードして使ってみましょう ~
日本発オープンソース!! スケールアウト型データベース GridDB入門 ~ GitHubからダウンロードして使ってみましょう ~日本発オープンソース!! スケールアウト型データベース GridDB入門 ~ GitHubからダウンロードして使ってみましょう ~
日本発オープンソース!! スケールアウト型データベース GridDB入門 ~ GitHubからダウンロードして使ってみましょう ~
griddb
 
cocos2d-xにおけるBox2Dの利用方法および便利なツール
cocos2d-xにおけるBox2Dの利用方法および便利なツールcocos2d-xにおけるBox2Dの利用方法および便利なツール
cocos2d-xにおけるBox2Dの利用方法および便利なツールTomoaki Shimizu
 
20141224 titech lecture_ishizaki_public
20141224 titech lecture_ishizaki_public20141224 titech lecture_ishizaki_public
20141224 titech lecture_ishizaki_publicKazuaki Ishizaki
 
㉒初期プロジェクトを改造!
㉒初期プロジェクトを改造!㉒初期プロジェクトを改造!
㉒初期プロジェクトを改造!
Nishida Kansuke
 
コンピューティングとJava~なにわTECH道
コンピューティングとJava~なにわTECH道コンピューティングとJava~なにわTECH道
コンピューティングとJava~なにわTECH道
なおき きしだ
 
【TechBuzz】第9回cocos2d-x勉強会「シェーダ書いてますか?」
【TechBuzz】第9回cocos2d-x勉強会「シェーダ書いてますか?」【TechBuzz】第9回cocos2d-x勉強会「シェーダ書いてますか?」
【TechBuzz】第9回cocos2d-x勉強会「シェーダ書いてますか?」
nyagasuki
 

Similar to ADVENTURE_Solid Ver.1.2の概要 (20)

ADVENTURE_Solidの概要
ADVENTURE_Solidの概要ADVENTURE_Solidの概要
ADVENTURE_Solidの概要
 
PF部2011年12月勉強会.androidsola
PF部2011年12月勉強会.androidsolaPF部2011年12月勉強会.androidsola
PF部2011年12月勉強会.androidsola
 
Try_to_writecode_practicaltest #atest_hack
Try_to_writecode_practicaltest #atest_hackTry_to_writecode_practicaltest #atest_hack
Try_to_writecode_practicaltest #atest_hack
 
ADVENTURE_Thermalの概要
ADVENTURE_Thermalの概要ADVENTURE_Thermalの概要
ADVENTURE_Thermalの概要
 
EWD 3トレーニングコース#19 JavaScriptからGlobalストレジにアクセスする
EWD 3トレーニングコース#19 JavaScriptからGlobalストレジにアクセスするEWD 3トレーニングコース#19 JavaScriptからGlobalストレジにアクセスする
EWD 3トレーニングコース#19 JavaScriptからGlobalストレジにアクセスする
 
Cuda
CudaCuda
Cuda
 
浮動小数点(IEEE754)を圧縮したい@dsirnlp#4
浮動小数点(IEEE754)を圧縮したい@dsirnlp#4浮動小数点(IEEE754)を圧縮したい@dsirnlp#4
浮動小数点(IEEE754)を圧縮したい@dsirnlp#4
 
Halide による画像処理プログラミング入門
Halide による画像処理プログラミング入門Halide による画像処理プログラミング入門
Halide による画像処理プログラミング入門
 
TVM の紹介
TVM の紹介TVM の紹介
TVM の紹介
 
Intel AVX2を使用したailia sdkの最適化
Intel AVX2を使用したailia sdkの最適化Intel AVX2を使用したailia sdkの最適化
Intel AVX2を使用したailia sdkの最適化
 
20180109 titech lecture_ishizaki_public
20180109 titech lecture_ishizaki_public20180109 titech lecture_ishizaki_public
20180109 titech lecture_ishizaki_public
 
第11回 配信講義 計算科学技術特論B(2022)
第11回 配信講義 計算科学技術特論B(2022)第11回 配信講義 計算科学技術特論B(2022)
第11回 配信講義 計算科学技術特論B(2022)
 
130710 02
130710 02130710 02
130710 02
 
怪しいWindowsプログラミング
怪しいWindowsプログラミング怪しいWindowsプログラミング
怪しいWindowsプログラミング
 
日本発オープンソース!! スケールアウト型データベース GridDB入門 ~ GitHubからダウンロードして使ってみましょう ~
日本発オープンソース!! スケールアウト型データベース GridDB入門 ~ GitHubからダウンロードして使ってみましょう ~日本発オープンソース!! スケールアウト型データベース GridDB入門 ~ GitHubからダウンロードして使ってみましょう ~
日本発オープンソース!! スケールアウト型データベース GridDB入門 ~ GitHubからダウンロードして使ってみましょう ~
 
cocos2d-xにおけるBox2Dの利用方法および便利なツール
cocos2d-xにおけるBox2Dの利用方法および便利なツールcocos2d-xにおけるBox2Dの利用方法および便利なツール
cocos2d-xにおけるBox2Dの利用方法および便利なツール
 
20141224 titech lecture_ishizaki_public
20141224 titech lecture_ishizaki_public20141224 titech lecture_ishizaki_public
20141224 titech lecture_ishizaki_public
 
㉒初期プロジェクトを改造!
㉒初期プロジェクトを改造!㉒初期プロジェクトを改造!
㉒初期プロジェクトを改造!
 
コンピューティングとJava~なにわTECH道
コンピューティングとJava~なにわTECH道コンピューティングとJava~なにわTECH道
コンピューティングとJava~なにわTECH道
 
【TechBuzz】第9回cocos2d-x勉強会「シェーダ書いてますか?」
【TechBuzz】第9回cocos2d-x勉強会「シェーダ書いてますか?」【TechBuzz】第9回cocos2d-x勉強会「シェーダ書いてますか?」
【TechBuzz】第9回cocos2d-x勉強会「シェーダ書いてますか?」
 

More from ADVENTURE Project

LexADV_WOVis Ver.0.1bの概要
LexADV_WOVis Ver.0.1bの概要LexADV_WOVis Ver.0.1bの概要
LexADV_WOVis Ver.0.1bの概要
ADVENTURE Project
 
LexADV_TryDDM Ver. 0.1bの概要
LexADV_TryDDM Ver. 0.1bの概要LexADV_TryDDM Ver. 0.1bの概要
LexADV_TryDDM Ver. 0.1bの概要
ADVENTURE Project
 
ADVENTURE_Mates Ver. 0.5bの概要
ADVENTURE_Mates Ver. 0.5bの概要ADVENTURE_Mates Ver. 0.5bの概要
ADVENTURE_Mates Ver. 0.5bの概要
ADVENTURE Project
 
ADVENTUREの他のモジュール・関連プロジェクトの紹介
ADVENTUREの他のモジュール・関連プロジェクトの紹介ADVENTUREの他のモジュール・関連プロジェクトの紹介
ADVENTUREの他のモジュール・関連プロジェクトの紹介
ADVENTURE Project
 
ADVENTURE_Mates Ver.0.5b データ生成
ADVENTURE_Mates Ver.0.5b データ生成ADVENTURE_Mates Ver.0.5b データ生成
ADVENTURE_Mates Ver.0.5b データ生成
ADVENTURE Project
 
ADVENTURE_MATES専用ビューア AdvMatesViewerについて
ADVENTURE_MATES専用ビューア AdvMatesViewerについてADVENTURE_MATES専用ビューア AdvMatesViewerについて
ADVENTURE_MATES専用ビューア AdvMatesViewerについて
ADVENTURE Project
 
ADVENTURE_Magnetic Ver.1.5.0の概要
ADVENTURE_Magnetic Ver.1.5.0の概要ADVENTURE_Magnetic Ver.1.5.0の概要
ADVENTURE_Magnetic Ver.1.5.0の概要
ADVENTURE Project
 
ADVENTURE_sFlowの最新動向
ADVENTURE_sFlowの最新動向ADVENTURE_sFlowの最新動向
ADVENTURE_sFlowの最新動向
ADVENTURE Project
 
ADVENTURE_Solid Ver.2.0の概要
ADVENTURE_Solid Ver.2.0の概要ADVENTURE_Solid Ver.2.0の概要
ADVENTURE_Solid Ver.2.0の概要
ADVENTURE Project
 
ADVENTURE_BCtool Ver.2.の概要と実際[デモ]
ADVENTURE_BCtool Ver.2.の概要と実際[デモ]ADVENTURE_BCtool Ver.2.の概要と実際[デモ]
ADVENTURE_BCtool Ver.2.の概要と実際[デモ]
ADVENTURE Project
 
ADVENTUREの他のモジュール・関連プロジェクトの紹介
ADVENTUREの他のモジュール・関連プロジェクトの紹介ADVENTUREの他のモジュール・関連プロジェクトの紹介
ADVENTUREの他のモジュール・関連プロジェクトの紹介
ADVENTURE Project
 
大規模並列解析用可視化モジュール ADVENTURE_POSTtool
大規模並列解析用可視化モジュール ADVENTURE_POSTtool大規模並列解析用可視化モジュール ADVENTURE_POSTtool
大規模並列解析用可視化モジュール ADVENTURE_POSTtool
ADVENTURE Project
 
Linuxにおけるコマンドとエディタの使用方法の紹介
Linuxにおけるコマンドとエディタの使用方法の紹介Linuxにおけるコマンドとエディタの使用方法の紹介
Linuxにおけるコマンドとエディタの使用方法の紹介
ADVENTURE Project
 
ADVENTUREの他のモジュール・関連プロジェクトの紹介
ADVENTUREの他のモジュール・関連プロジェクトの紹介ADVENTUREの他のモジュール・関連プロジェクトの紹介
ADVENTUREの他のモジュール・関連プロジェクトの紹介
ADVENTURE Project
 
ADVENTURE AutoGL 「おてがる」
ADVENTURE AutoGL 「おてがる」ADVENTURE AutoGL 「おてがる」
ADVENTURE AutoGL 「おてがる」
ADVENTURE Project
 
ADVENTURE_Solid-1.2 構造体リファレンスマニュアル
ADVENTURE_Solid-1.2 構造体リファレンスマニュアルADVENTURE_Solid-1.2 構造体リファレンスマニュアル
ADVENTURE_Solid-1.2 構造体リファレンスマニュアル
ADVENTURE Project
 
ADVENTURE_Solid 線形代数関数群 advlasリファレンスマニュアル
ADVENTURE_Solid 線形代数関数群 advlasリファレンスマニュアルADVENTURE_Solid 線形代数関数群 advlasリファレンスマニュアル
ADVENTURE_Solid 線形代数関数群 advlasリファレンスマニュアル
ADVENTURE Project
 
DecisionMaker
DecisionMakerDecisionMaker
DecisionMaker
ADVENTURE Project
 
原子力発電プラントの地震耐力予測シミュレーション
原子力発電プラントの地震耐力予測シミュレーション原子力発電プラントの地震耐力予測シミュレーション
原子力発電プラントの地震耐力予測シミュレーション
ADVENTURE Project
 
ADVENTUREの他のモジュール・関連プロジェクトの紹介
ADVENTUREの他のモジュール・関連プロジェクトの紹介ADVENTUREの他のモジュール・関連プロジェクトの紹介
ADVENTUREの他のモジュール・関連プロジェクトの紹介
ADVENTURE Project
 

More from ADVENTURE Project (20)

LexADV_WOVis Ver.0.1bの概要
LexADV_WOVis Ver.0.1bの概要LexADV_WOVis Ver.0.1bの概要
LexADV_WOVis Ver.0.1bの概要
 
LexADV_TryDDM Ver. 0.1bの概要
LexADV_TryDDM Ver. 0.1bの概要LexADV_TryDDM Ver. 0.1bの概要
LexADV_TryDDM Ver. 0.1bの概要
 
ADVENTURE_Mates Ver. 0.5bの概要
ADVENTURE_Mates Ver. 0.5bの概要ADVENTURE_Mates Ver. 0.5bの概要
ADVENTURE_Mates Ver. 0.5bの概要
 
ADVENTUREの他のモジュール・関連プロジェクトの紹介
ADVENTUREの他のモジュール・関連プロジェクトの紹介ADVENTUREの他のモジュール・関連プロジェクトの紹介
ADVENTUREの他のモジュール・関連プロジェクトの紹介
 
ADVENTURE_Mates Ver.0.5b データ生成
ADVENTURE_Mates Ver.0.5b データ生成ADVENTURE_Mates Ver.0.5b データ生成
ADVENTURE_Mates Ver.0.5b データ生成
 
ADVENTURE_MATES専用ビューア AdvMatesViewerについて
ADVENTURE_MATES専用ビューア AdvMatesViewerについてADVENTURE_MATES専用ビューア AdvMatesViewerについて
ADVENTURE_MATES専用ビューア AdvMatesViewerについて
 
ADVENTURE_Magnetic Ver.1.5.0の概要
ADVENTURE_Magnetic Ver.1.5.0の概要ADVENTURE_Magnetic Ver.1.5.0の概要
ADVENTURE_Magnetic Ver.1.5.0の概要
 
ADVENTURE_sFlowの最新動向
ADVENTURE_sFlowの最新動向ADVENTURE_sFlowの最新動向
ADVENTURE_sFlowの最新動向
 
ADVENTURE_Solid Ver.2.0の概要
ADVENTURE_Solid Ver.2.0の概要ADVENTURE_Solid Ver.2.0の概要
ADVENTURE_Solid Ver.2.0の概要
 
ADVENTURE_BCtool Ver.2.の概要と実際[デモ]
ADVENTURE_BCtool Ver.2.の概要と実際[デモ]ADVENTURE_BCtool Ver.2.の概要と実際[デモ]
ADVENTURE_BCtool Ver.2.の概要と実際[デモ]
 
ADVENTUREの他のモジュール・関連プロジェクトの紹介
ADVENTUREの他のモジュール・関連プロジェクトの紹介ADVENTUREの他のモジュール・関連プロジェクトの紹介
ADVENTUREの他のモジュール・関連プロジェクトの紹介
 
大規模並列解析用可視化モジュール ADVENTURE_POSTtool
大規模並列解析用可視化モジュール ADVENTURE_POSTtool大規模並列解析用可視化モジュール ADVENTURE_POSTtool
大規模並列解析用可視化モジュール ADVENTURE_POSTtool
 
Linuxにおけるコマンドとエディタの使用方法の紹介
Linuxにおけるコマンドとエディタの使用方法の紹介Linuxにおけるコマンドとエディタの使用方法の紹介
Linuxにおけるコマンドとエディタの使用方法の紹介
 
ADVENTUREの他のモジュール・関連プロジェクトの紹介
ADVENTUREの他のモジュール・関連プロジェクトの紹介ADVENTUREの他のモジュール・関連プロジェクトの紹介
ADVENTUREの他のモジュール・関連プロジェクトの紹介
 
ADVENTURE AutoGL 「おてがる」
ADVENTURE AutoGL 「おてがる」ADVENTURE AutoGL 「おてがる」
ADVENTURE AutoGL 「おてがる」
 
ADVENTURE_Solid-1.2 構造体リファレンスマニュアル
ADVENTURE_Solid-1.2 構造体リファレンスマニュアルADVENTURE_Solid-1.2 構造体リファレンスマニュアル
ADVENTURE_Solid-1.2 構造体リファレンスマニュアル
 
ADVENTURE_Solid 線形代数関数群 advlasリファレンスマニュアル
ADVENTURE_Solid 線形代数関数群 advlasリファレンスマニュアルADVENTURE_Solid 線形代数関数群 advlasリファレンスマニュアル
ADVENTURE_Solid 線形代数関数群 advlasリファレンスマニュアル
 
DecisionMaker
DecisionMakerDecisionMaker
DecisionMaker
 
原子力発電プラントの地震耐力予測シミュレーション
原子力発電プラントの地震耐力予測シミュレーション原子力発電プラントの地震耐力予測シミュレーション
原子力発電プラントの地震耐力予測シミュレーション
 
ADVENTUREの他のモジュール・関連プロジェクトの紹介
ADVENTUREの他のモジュール・関連プロジェクトの紹介ADVENTUREの他のモジュール・関連プロジェクトの紹介
ADVENTUREの他のモジュール・関連プロジェクトの紹介
 

ADVENTURE_Solid Ver.1.2の概要

  • 1. V. AdvSolid-1.2 の概要 第 6 回 ADVENTURE 定期セミナー ADVENTURE_Solid Ver. 1.2 の概要 九州大学 荻野正雄 2008 年 9 月 29 日 ( 月 )
  • 2. V. AdvSolid-1.2 の概要 第 6 回 ADVENTURE 定期セミナー 目的 • 領域分割法のアルゴリズムを理解することによ り , AdvSolid で重要となるプログラム部分を見 つけることができるようになる . • Ver.1.2 から導入した線形代数関数群 advlas に ついて学ぶことで , AdvSolid を高速化するカス タマイズを行えるようになる . • 数値実験例を通じて , 希望する AdvSolid シミュ レーションに適した最新パソコンを選択できる ようになる .
  • 3. V. AdvSolid-1.2 の概要 第 6 回 ADVENTURE 定期セミナー 内容 • 領域分割法について – DDM のアルゴリズム – DDM の実装 – DDM のデータ – DDM のプログラム - 部分領域 FEM における関数 • 線形代数関数群 advlas – advlas の使い方 – Ver.1.2 における高速化手法 • 数値実験例 – 最近のパソコン上における演算性能評価
  • 4. V. AdvSolid-1.2 の概要 第 6 回 ADVENTURE 定期セミナー ADVENTURE_Solid Ver.1.2 の概要 リリース日 2007 年 11 月 20 日 更新内容 標準のソルバオプションを bdd-diag に変更 HDDM ソルバおよび BDD 系ソルバの高速化・省メモリ 化 – 計算時間を 50% 程度短縮,メモリ使用量を 40% 程度 削減
  • 5. V. AdvSolid-1.2 の概要 第 6 回 ADVENTURE 定期セミナー 領域分割法について 領域分割法 (Domain Decomposition Method: DDM) • 解析領域 ( 離散化された有限要素モデル ) を空間的にサ ブ領域 ( 部分領域 ) に分割することで , 演算を部分領域 の独立領域と部分領域間の袖領域に分けて行う手法 . 有限要素モデル 領域分割モデル 有限要素 節点 領域独立節点 袖領域節点 領域分割は要素ベース で行い , 部分領域で要 素の重なりはない
  • 6. V. AdvSolid-1.2 の概要 第 6 回 ADVENTURE 定期セミナー DDM アルゴリズム - 領域の分 割 fKu = ・解くべき式 orgiven vect:ctor,unknown ve: SPDmateix,stiffness: fu K NΩΩΩ ,...,1→・ N 個に領域分割 ∑∑ == === N i i T i N i ii T iii fRfRKRKuRu 11 ,, 自由度制限行列 Ri 全体自由度から領域 i 自由度へ   全体領域 部分領域 i Ri
  • 7. V. AdvSolid-1.2 の概要 第 6 回 ADVENTURE 定期セミナー   領域内部自由度 (I)   領域間境界上自由度 (B) DDM アルゴリズム - 自由度の分 割 ・部分領域の自由度を領域内部 (I) と領域間境界 (B) に分割       =      =      =      = iB iI i iB iI i BB T iIB iIBiII i iB iI i R R R f f f KK KK K u u u 0 0 ,,, 領域分割モデル RIi RBi
  • 8. V. AdvSolid-1.2 の概要 第 6 回 ADVENTURE 定期セミナー DDM アルゴリズム - 式の分割               =                             ∑ B NI iI B NI I iBiBB T iB T NIB T NB T IB T B NBNIBNII BIBII f f f u u u RKRKRKR RKK RKK    1 11 111 0 0 ( ) NiuRKfKu BiBiIBiIiIIiI ,...,1, 1 =−= − ( )∑ = − −= N i iIiII T iIBiB T iB fKKfRg 1 1 部分領域内部と領域間境界に式を分割 (1) 領域間境界上自由度に関する式 ( インターフェース問題 ) (2) 部分領域内部自由度に関する式 gSuB = iIBiII T iIBiBBi N i iBi T iB KKKKSRSRS 1 1 , − = −== ∑ ・ (I),(B) で自由度を並び替えた式 (1) を解き , 求まっ た uB を用いて (2) を解き , 全体の解 u
  • 9. V. AdvSolid-1.2 の概要 第 6 回 ADVENTURE 定期セミナー DDM の実装 - 基本方針 • インターフェース問題は反復法 ( 共役勾配法 ) で解く – 全体自由度に応じて問題規模が増加のため – 係数行列を陽に作成するのは困難のため – 係数行列 - ベクトル積に既存の FEM コードが利用可能 のため • 領域内部自由度問題は直接法で解く – 全体自由度に依らず問題規模を制御可能のため – 右辺問題を何度も解く必要性のため ( ) NiuRKfKu BiBiIBiIiIIiI ,...,1, 1 =−= − gSuB =
  • 10. V. AdvSolid-1.2 の概要 第 6 回 ADVENTURE 定期セミナー DDM の実装 - CG 法アルゴリ ズム kkkk T kk T kk kk kkkk kkkBkB k T kk T kk kk pzp zrzr rMz qrr puu qpzr Spq k β β α α α += = = −= −= = = = ++ ++ + − + + + 11 11 1 1 1 1 1 / ˆˆ / 0,1,2,...for 00 0 1 0 00 0 ˆ guessinitial:ˆ zp rMz guSr u B B = = −= − 1 ˆ − M p z r u k k k kB : k-th approximate solution vector : residual vector : preconditioned residual vector : search direction vector : preconditioning matrix 初期化 CG 反復
  • 11. V. AdvSolid-1.2 の概要 第 6 回 ADVENTURE 定期セミナー DDM の実装 - 行列ベクトル積 • 係数行列 - ベクトル積 → 等価な領域単位の処理に置き換 える       −       =       ⋅ pRKK KKx iBiBB T iIB iIBiIIi 0       ⋅       =       ⋅ − iiIIi x I Kw 1 0 0             =       ⋅ pR w KK KK y iB i iBB T iIB iIBiII i ∑= = N i i T iB yRy 1 ( ) pRKKKKRSpy N i iBiIBiII T iIBiBB T iB∑ = − −== 1 1 (1) 領域間境界を基本 境界として処理 (2) 連立方程式の求解 (3) 領域間境界上の 反力計算 (4) 領域間境界上で 重ね合わせ Dirichlet 境界 Neumann 境界 領域間境界 Dirichlet 自由度 未知自由度
  • 12. V. AdvSolid-1.2 の概要 第 6 回 ADVENTURE 定期セミナー DDM の実装 - 行列ベクトル積           −           =           ⋅ ⋅ 0 0 pR KKK KKK KKKx iB i T iB T iI iBiBB T iIB iIiIBiIIi DDDD D D ΓΓΓΓ Γ Γ           ⋅ ⋅           =           ⋅ ⋅ − iiIIi x I I Kw 1 00 00 00 ∑= = N i i T iB yRy 1 領域 i における元の基本境界を D とし ,                     =           ⋅ ⋅ 0 pR w KKK KKK KKK y iB i i T iB T iI iBiBB T iIB iIiIBiII i DDDD D D ΓΓΓΓ Γ Γ 全体自由度を (I): 領域内部 (B): 領域間境界上 (ΓD): 元の基本境界上 に分けて考える
  • 13. V. AdvSolid-1.2 の概要 第 6 回 ADVENTURE 定期セミナー DDM の実装 - 初期残差           − −           =           ⋅ ⋅ i BiB i T iB T iI iBiBB T iIB iIiIBiIIi DDDDD D D u uR KKK KKK KKKx ΓΓΓΓΓ Γ Γ 0 ˆ 0           ⋅ ⋅ +           =           ⋅ ⋅ − iIiiIIi xf I I Kw 1 00 00 00 ( )∑ = −= N i Bii T iB fyRr 1 0                     =           ⋅ ⋅ i BiB i i T iB T iI iBiBB T iIB iIiIBiII i DDDDD D D u uR w KKK KKK KKK y ΓΓΓΓΓ Γ Γ 0 ˆ 元の基本境界 D 上の変位境界条件値を   とすると ,iD uΓ 初期残差計算時には 元の境界条件 ( 変位 拘束 , 表面力 , 体積 力 ) を 考慮すればよい Dirichlet 境界 Neumann 境界 領域間境界
  • 14. V. AdvSolid-1.2 の概要 第 6 回 ADVENTURE 定期セミナー DDM の実装 - 内部自由度解           − −           =           ⋅ ⋅ i BiB i T iB T iI iBiBB T iIB iIiIBiIIi DDDDD D D u uR KKK KKK KKKx ΓΓΓΓΓ Γ Γ 0           ⋅ ⋅ +           =           ⋅ ⋅ − iIiiIIIi xf I I Ku 1 00 00 00 CG 法により求めた領域間境界上の解を   とすると ,Bu 内部自由度解計算時 にも元の境界条件を 考慮し忘れないよう に する
  • 15. V. AdvSolid-1.2 の概要 第 6 回 ADVENTURE 定期セミナー DDM データ - 有限要素モデル Dirichlet 境界 Neumann 境界 有限要素モデル情報 Element - 要素数 16 - 要素節点コネクティビティ Node - 節点数 25 - 節点座標値 FEGA:ForcedDisplacement - 変位拘束条件数 10 (5 節点 x2 方向 ) - 変位拘束条件 FEGA:Load - 荷重条件数 10 (5 節点 x2 方向 ) - 荷重条件 FEGA:YoungModulus,PoissonRatio - 材料物性値 簡単のため , 2 次元 4 節 点 4 角形要素で説明を 行う
  • 16. V. AdvSolid-1.2 の概要 第 6 回 ADVENTURE 定期セミナー DDM データ - 領域分割モデル Dirichlet 境界 Neumann 境界 領域間境界 領域分割モデル情報 HDDM_Element - 要素数 - 要素節点コネクティビティ Node - 節点数 - 節点座標値 HDDMFEGA:ForcedDisplacement - 変位拘束条件数 - 変位拘束条件 HDDMFEGA:Load - 荷重条件数 - 荷重条件 HDDM_FEGA:InterfaceDOF - 領域間境界条件数 - 領域間境界条件 HDDM_FEGA:YoungModulus,PoissonRati o Ω0 Ω1 Ω2 Ω3 4 4 4 4 Ω0 Ω1 Ω2 Ω3 9 9 9 9 Ω0 Ω1 Ω2 Ω3 6 0 0 6 Ω0 Ω1 Ω2 Ω3 0 6 4 0 Ω0 Ω1 Ω2 Ω3 8 10 10 8 Ω0 Ω1 Ω2 Ω3
  • 17. V. AdvSolid-1.2 の概要 第 6 回 ADVENTURE 定期セミナー DDM プログラム - 領域メッシュ用構造体 DomMeshDomMesh   定義 : hddm_types.h   機能 : 1 つの Subdomain のメッシュデータや境界条件を格納する.   メンバー変数 : int domid; Subdomain の属する Part 内でのローカル ID int elms; Subdomain 内の要素数 int nd_elm; 要素を構成する節点数 int* nop; Subdomain 内の要素コネクティビティを格納する int 配列 int nodes; Subdomain 内の節点数   int node_dim; 節点の次元数 int* ndindex; Subdomain 内節点の Part ローカル節点番号を格納する int 配列 double* crd; Subdomain 内の節点座標値を格納する double 配列 int ndisp; 基本境界条件数 Bcnd* bcdisp; 基本境界条件を格納する Bcnd 配列 int nload; 荷重境界条件数 Bcnd* bcload; 荷重境界条件を格納する Bcnd 配列 int ninbd; 他 Subdomain と共有する Interface 自由度数 Inbc* inbd; 他 Subdomain との共有 Interface 自由度情報を格納する Inbc 配列 int with_matid; 材料物性値 ID を持つかどうか ( 複数材料モデルかどうか ) int* matid; Subdomain 内要素の材料物性値 ID を格納する int 配列 一部のメンバー変数は省略 この 2 つを合わせたものが DDM における基本境界条件
  • 18. V. AdvSolid-1.2 の概要 第 6 回 ADVENTURE 定期セミナー DDM プログラム - spartsolv() void spartsolv() { DomMesh dmesh; HDDM_SkylineMat hddmmat; for (i = 0; i < pmesh.n_domain; i++) { /* 領域メッシュと境界条件情報を設定 */ dmesh = SetDom4CG(optsw, sw_cg, i, pmesh, pfield, cgvec, sw_kpmat); /* 係数行列 , LDLt 分解 , 体積力ベクトルを作成 */ hddmmat = MkNewHDDM_SkylineMat(optsw, cgoption, dmesh, dfield); /* 初期残差 , 係数行列ベクトル積 , or 領域内部解を計算 */ domsolve(sw_cg, optsw, dmesh, dfield, hddmmat); /* 計算結果をインターフェース自由度ベクトルに重ね合わせ */ put_domvec_to_cgvec(dmesh, dfield.reac, cgvec.a_w); /* 領域メッシュ情報を解放 */ UnsetDom4CG(pmesh, &dmesh); } } インターフェース問題の初期残差 や行列ベクトル積を計算 ( 一部省 略 ) 入力データが pmesh->dom[i] (DomMesh 型 ) に格納されてい る CG 初期 , 反復 , 収束後に応じて境界 条件を変更した DomMesh 変数
  • 19. V. AdvSolid-1.2 の概要 第 6 回 ADVENTURE 定期セミナー DDM プログラム - dom_setdisp_for_cg() void dom_setdisp_for_cg() { dmesh.ndisp += dmesh.ninbd; dmesh.bcdisp = (Bcnd *) Calloc(sizeof(Bcnd), dmesh.ndisp); if (sw_cg != SWCG_ITER) { for (i = 0; i < pmesh.dom[idom].ndisp; i++) { dmesh.bcdisp[i].node = pmesh.dom[idom].bcdisp[i].node; dmesh.bcdisp[i].co = pmesh.dom[idom].bcdisp[i].co; dmesh.bcdisp[i].val = pmesh.dom[idom].bcdisp[i].val; } } else { for (i = 0; i < pmesh.dom[idom].ndisp; i++) { dmesh.bcdisp[i].node = pmesh.dom[idom].bcdisp[i].node; dmesh.bcdisp[i].co = pmesh.dom[idom].bcdisp[i].co; dmesh.bcdisp[i].val = 0.0; } } for (i=0; i< pmesh.dom[idom].ninbd; i++) { dmesh.bcdisp[ndisp + i].node = pmesh.dom[idom].inbd[i].node; dmesh.bcdisp[ndisp + i].co = pmesh.dom[idom].inbd[i].co; dmesh.bcdisp[ndisp + i].val = cgvec.w[pmesh.dom[idom].inbd[i].mypart_ibid]; } } 初期残差計算と領 域内部解計算時は 元の境界条件値 CG 反復中は値は 0 インターフェースを基本境界条件に加える
  • 20. V. AdvSolid-1.2 の概要 第 6 回 ADVENTURE 定期セミナー DDM プログラム - dom_setload_for_cg() void dom_setload_for_cg() { if (sw_cg != SWCG_ITER) { dmesh.nload += pmesh.dom[idom].nload; dmesh.bcload = (Bcnd *) Calloc(sizeof(Bcnd), dmesh.nload); for (i = 0; i < pmesh.dom[idom].nload; i++) { dmesh.bcload[i].node = pmesh.dom[idom].bcload[i].node; dmesh.bcload[i].co = pmesh.dom[idom].bcload[i].co; dmesh.bcload[i].val = pmesh.dom[idom].bcload[i].val; } } else { dmesh.nload = 0; dmesh.bcload = NULL; } } 初期残差計算と領域内 部解計算時は元の境界 条件値 CG 反復中は荷重境界条 件なし
  • 21. V. AdvSolid-1.2 の概要 第 6 回 ADVENTURE 定期セミナー DDM プログラム - domsolve() void domsolve() { if (sw_cg != SWCG_ITER) { set_load_to_rhs(force, matdim, dmesh.nload, dmesh.bcload); for(i=0;i<matdim;i++) force[i] += hddmmat.force[i]; } for (i=0;i<matdim;i++) disp[i] = force[i]; for (i=0;i<matdim;i++) reac[i] = 0.0; put_neg_bcdisp_to_vec(dmesh.ndisp, dmesh.node_dim, dmesh.bcdisp, reac); advlas_matmult_vec_add(hddmmat.gk, reac, disp); advlas_ldl_solve(hddmmat.gk_inv, disp); put_bcdisp_to_vec(dmesh.ndisp, dmesh.node_dim, dmesh.bcdisp, disp); for (i=0;i<matdim;i++) reac[i] = 0.0; advlas_matmult_vec_add(hddmmat.gk, disp, reac); if (sw_cg == SWCG_FIRST) for (i=0;i<matdim;i++) reac[i] -= force[i]; } 初期残差計算と領域内 部解計算時は右辺項に 外力と体積力を加える Dirichlet 境界条件処理 ( 行列ベクトル積を含む ) 連立方程式求解 反力計算 ( 行列ベクトル積を含む ) 初期残差計算時は残差計算
  • 22. V. AdvSolid-1.2 の概要 第 6 回 ADVENTURE 定期セミナー 領域分割法のまとめ • 領域間境界上に縮約されたインターフェース問 題を反復法で解き , その後領域内部問題を解く • インターフェース問題への CG 法では , 係数行 列ベクトル演算は部分領域 FEM 解析と見なせる • 部分領域 FEM 解析では , 領域間境界を基本境界 条件として取り扱う . • 境界条件値は CG 法のどの過程かで異なる
  • 23. V. AdvSolid-1.2 の概要 第 6 回 ADVENTURE 定期セミナー DDM に必要な演算のまとめ • 部分領域毎の FEM 解析 – 基本境界条件処理のために行列ベクトル積 – 領域内部自由度解を求める連立方程式求解 – 反力を求める行列ベクトル積 ⇒ 領域数 ×(CG 反復回数 +1) • インターフェース問題の CG 反復処理 – インターフェース自由度をもつベクトル演算 ⇒ CG 反復回数 ここの ( 線形代数 ) 演算を高 速化することが全体の高速 化にとって重要
  • 24. V. AdvSolid-1.2 の概要 第 6 回 ADVENTURE 定期セミナー Ver. 1.2 の開発 • 目的 – 線形代数処理 ( 行列ベクトル積 , 連立一次方程式求 解 ) の高速化 – 同処理関数群のメンテナンス性改善 100 万自由度問題をメモリ 1GB 上で 1 分で解きたい Ver.1.1 の性能 : 約 100 万自由度規模弾性問題 Cmd: mpirun -n 2 advsolid-p -solver bdd-diag Iterations: 66 Time: 145.7 sec Memory: 2.3 GB CPU: Intel Core2Duo E6600 [2.4GHz/L2 4MB] Memory: DDR2-SDRAM 1GB x 4 OS: openSUSE 10.2 x86_64 CC: gcc-4.1.2 -O3 -m64 -march=nocona MPI: mpich2-1.0.7
  • 25. V. AdvSolid-1.2 の概要 第 6 回 ADVENTURE 定期セミナー 線形代数関数群 advlas • 正式名称 – ADVenture Linear Algebra Systems • 機能 – Ver.1.1 以前が持つ行列演算関数群を独立 – 従来のスカイライン形式に加えて , 非零形式をサ ポート • 別紙資料 1 – 環境変数 , 構造体 , 変数リファレンスマニュアル
  • 26. V. AdvSolid-1.2 の概要 第 6 回 ADVENTURE 定期セミナー advlas - 行列用構造体 DMatrix DMatrix 定義 : advlas_matop.h 機能 : 行列のインデックスや値などを格納する.メンバー変数 type の設定値によって行列の格納方式が異なる. メンバー変数 : int type; 行列の対称性や格納方式 int ndim; 行列の次元数 int nlen; 1 次元化した行列を格納する配列 mat の大きさ int* idx1; インデックス用配列 int* idx2; インデックス用配列 double* mat; 1 次元化された行列の値を格納する配列 p.4
  • 27. V. AdvSolid-1.2 の概要 第 6 回 ADVENTURE 定期セミナー advlas - 対応する行列形式 • MATRIX_SKYLINE_SYMMETRIC – 実対称行列 , スカイライン形式 • MATRIX_NONZERO_SYMMETRIC – 実対称行列 , 非零形式 • MATRIX_SKYLINE_ASYMMETRIC • MATRIX_NONZERO_ASYMMETRIC – 実非対称版 , 現バージョンでは非対応                 908 76 504 32 1 { }22000 { }64310 { }90876504321 { }975310 { }423220100 { }987654321 idx1 idx2 idx1 idx2 mat mat p.3 p.3 p.14 p.15
  • 28. V. AdvSolid-1.2 の概要 第 6 回 ADVENTURE 定期セミナー advlas - 使い方の例 #include "hddm_types.h" #include "advlas.h" DMatrix gk, gk_inv; double* work; /* K_i の作成 */ gk = NewDMatrix(ndim, MATRIX_NONZERO_SYMMETRIC); advlas_mkindex(dmesh, &gk); gk.mat = (double *) Calloc(sizeof(double), gk.nlen); for (ielm = 0; ielm < dmesh.elms; ielm++) { fe_make_elm_k(ek, elm_crd, &state_var, &fe_material, &(optsw.feopt)); advlas_assemble_elmk(ek, nop, nd_elm, node_dim, gk); } /* {K_{II}}_i^{-1} の作成 */ gk_inv = NewDMatrix(ndim, MATRIX_SKYLINE_SYMMETRIC); work = (double *) Calloc(sizeof(double), matdim); advlas_mkreducedindex(optsw.solver_type, bcdisp_table, gk, &gk_inv); gk_inv.mat = (double *) Calloc(sizeof(double), gk_inv.nlen); advlas_copy_gk2inv(optsw.solver_type, dmesh, bcdisp_table, gk, gk_inv); advlas_ldl_decomposite(gk_inv, work); p.5 p.5 p.5 p.6 p.6 p.7
  • 29. V. AdvSolid-1.2 の概要 第 6 回 ADVENTURE 定期セミナー 部分領域 FEM 解析の改良 • 部分領域毎の FEM 解析 – 基本境界条件処理のために行列ベクトル積 – 領域内部自由度解を求める連立方程式求解 – 反力を求める行列ベクトル積       = iBB T iIB iIBiII i KK KK K 1 1 0 0 − −       = I K K iII iII 剛性行列の記憶形式 ver.1.1: スカイライン形式 → ver.1.2: 非零形式 領域内部自由度解析のための LDLt 分解行列 ver.1.1:      → ver.1.2:1− iIIK 1− iIIK
  • 30. V. AdvSolid-1.2 の概要 第 6 回 ADVENTURE 定期セミナー 計算性能の改善 CPU: Intel Core2Duo E6600 [2.4GHz/L2 4MB] Memory: DDR2-SDRAM 1GB x 4 OS: openSUSE 10.2 x86_64 CC: gcc-4.1.2 -O3 -m64 -march=nocona MPI: mpich2-1.0.7 底面を拘束 上面に下向き荷重 有限要素モデル 領域分割モデル 要素数 242,322 部分数 2 節点数 375,257 領域分割数 1,876 基本境界条件数 7,398 Interface 自由 度数 31,203 総自由度数 1,118,373 Ver.1.1 Ver.1.2 Iterations 66 65 Time (s) 145.7 65.2 55%↓ Mem. (GB) 2.3 1.3 43%↓
  • 31. V. AdvSolid-1.2 の概要 第 6 回 ADVENTURE 定期セミナー AdvSolid-1.2 のまとめ • 基本である DDM において計算負荷の高い部分を 改良することにより , 計算時間を 50% 程度短縮 . 同時に使用メモリを 40% 削減することに成功 . • 上記部分プログラムを線形代数関数群 advlas と して整理することで , メンテナンス性が向上 .   外部の線形代数ライブラリへの置き換えも容 易に
  • 32. V. AdvSolid-1.2 の概要 第 6 回 ADVENTURE 定期セミナー AdvSolid-1.2 による数値実験例 • Dual Core (DC) マシン ( 九州大学計算力学研究室 ) – CPU: Intel Core2Duo E6600 [2.4GHz/L2 4MB] – Memory: DDR2-SDRAM 1GB x 4 – OS: openSUSE 10.2 x86_64 – CC: gcc-4.1.2, icc-10.1.015 – MPI: mpich2-1.0.7 • Quad Core (QC) マシン ( 東京大学吉村研究室 ) – CPU: Intel Core2Quad Q6600 [2.4GHz/L2 8MB] – Memory: DDR2-SDRAM 2GB x 4 – OS: openSUSE 11.0 x86_64 – CC: gcc-4.3.1 – MPI: mpich2-1.0.7
  • 33. V. AdvSolid-1.2 の概要 第 6 回 ADVENTURE 定期セミナー 使用ソフトウェア ソフトウェア • IO モジュール AdvIO-1.2 • 領域分割モジュール AdvMetis-1.1 • 弾性解析モジュール AdvSolid-1.2 コンパイルオプション • DC: -O3 -m46 -march=nocona • QC: -O3 -m64 -march=core2
  • 34. V. AdvSolid-1.2 の概要 第 6 回 ADVENTURE 定期セミナー 数値実験例 DOFs Dom D/Q CPU Core Iter. Time Mem (GB) 1M 2K DC 1 1 45 82.9s 1.3 1M 2K DC 1 2 45 51.3s 1.3 1M 2K QC 1 1 43 73.6s 1.3 1M 2K QC 1 2 49 47.9s 1.3 1M 2K QC 1 4 46 31.8s 1.3 12M 20K DC 4 8 137 13.1m 14.4 12M 20K DC 8 8 137 10.5m 14.4 12M 20K DC 6 12 150 8.5m 14.2 12M 20K QC 2 8 130 14.6m 14.5 12M 20K QC 3 12 154 9.9m 14.2 35M 60K DC 12 12 358 58.9m 42.7 35M 60K DC 12 24 236 24.4m 41.2 35M 60K DC 24 24 236 22.1m 41.2 35M 60K DC 24 48 207 13.6m 40.1
  • 35. V. AdvSolid-1.2 の概要 第 6 回 ADVENTURE 定期セミナー Ver.1.2 の性能の考察 • 100 万自由度問題規模 : メモリは 2GB 未満 – Core2Duo E6600/2GB x 1 で 1 分 – Core2Quad Q6600/2GB x 1 で 30 秒 • 1,200 万自由度問題規模 : メモリは 16GB 未満 – Core2Duo E6600/4GB x 4 で 13 分 – Core2Quad Q6600/8GB x 2 で 15 分 • 3,500 万自由度問題規模 : メモリは 48GB 未満 – Core2Duo E6600/4GB x 12 で 25 分
  • 36. V. AdvSolid-1.2 の概要 第 6 回 ADVENTURE 定期セミナー A. 開発中の省メモリ版プレビ ュー DOF Dom D/Q CC CPU Core Iter. Time(m) Mem(MB) 1M 3K DC icc 1 1 42 4.8 536 1M 3K DC icc 1 2 42 2.7 534 1M 3K QC gcc 1 1 40 6.2 543 1M 3K QC gcc 1 2 40 3.2 530 1M 3K QC gcc 1 4 43 2.0 575 12M 30K DC icc 4 8 135 36.1 7.0 12M 30K QC gcc 2 8 135 41.2 6.8 35M 90K DC icc 6 12 125 1.5h 19.1 35M 90K DC icc 12 24 221 1.1h 18.3 35M 90K QC gcc 3 12 215 2.5h 19.2 100M 1M DC icc 24 48 485 6.46h 70.0
  • 37. V. AdvSolid-1.2 の概要 第 6 回 ADVENTURE 定期セミナー …開発中省メモリ版だと • 100 万自由度問題規模 : メモリは 400MB 未満 (v1.2: 2GB) – Core2Duo E6600/1GB x 1 で 3 分 (v1.2: 1 分 ) – Core2Quad Q6600/1GB x 1 で 2 分 (v1.2: 30 秒 ) • 1,200 万自由度問題規模 : メモリは 6GB 未満 (v1.2: 16GB) – Core2Duo E6600/2GB x 4 で 36 分 (v1.2: 13 分 ) – Core2Quad Q6600/4GB x 2 で 41 分 (v1.2: 15 分 ) • 3,500 万自由度問題規模 : メモリは 16GB 未満 (v1.2: 48GB) – Core2Duo E6600/2GB x 12 で 1.5 時間 (v1.2: 25 分 ) – Core2Quad Q6600/8GB x 3 で 2.5 時間 • 1 億自由時問題規模 : メモリは 70GB (v1.2: 140GB)
  • 38. V. AdvSolid-1.2 の概要 第 6 回 ADVENTURE 定期セミナー 今後のロードマップ • AdvSolid-2.0 に向けて – 動的弾性 / 弾塑性問題解析の追加 – 大変形解析機能の改善 – 線形拘束条件式の考慮 • Ver.2.0 以降 – 弾塑性構成式の追加 – 硬化則の追加 – 他の非定常解析モジュールとの連成機能強化 – 接触問題解析機能の追加 – 固有値問題解析機能の追加