数値計算の基礎 一次元熱伝導方程式の差分法 によ...
TRANSCRIPT
数値計算の基礎一次元熱伝導方程式の差分法
による解法による解法
2011年夏季集中講義
島中島 研吾
並列計算プログラミング(616-2057)・先端計算機演習(616-4009)
2
概 要概 要
次元熱伝導方程式と差分法• 一次元熱伝導方程式と差分法
• 連立一次方程式の解法
• 反復法について
共役勾配法(CG)法– 共役勾配法(CG)法
– 前処理について
• 共役勾配法を使用した一次元熱伝導解析プログ• 共役勾配法を使用した 次元熱伝導解析プログラムについて
3
一次元熱伝導方程式(1/3)一次元熱伝導方程式(1/3)支配方程式:簡単のため熱伝導率=1
2
xxdxdxBF
dxd
max2
2
@0,0@0,0 =====+φφφ
xxBFxBF max2
21
+−=φ
一様体積発熱 BF
φ=0 断熱
実際は以下のような離散化をしているので注意が必要実際は以下のような離散化をしているので注意が必要
断熱となっているのはこの面,しかし温度は計算
φ=0
しかし温度は計算されない
4
一次元熱伝導方程式(2/3)一次元熱伝導方程式(2/3)解析解
断熱となって
xxBFxBF max2
21
+−=φ いるのはこの面,しかし温度は計算されない(X=X )。されない(X Xmax)。
φ=0X=0X=0
Δx=1.d0,メッシュ数=50,とすると,Xmax=49.5,● 点 X座標は49 0となる BF 1 0d0とすると● 温度は
1225598505120049549491 2 +×+φ
●の点のX座標は49.0となる。BF=1.0d0とすると●での温度は:
12255.98505.1200495.49492
=+−=×+−=φ
5
念のため・・・・差分について念のため 差分について
差分法 Finite Difference Method• 差分法:Finite Difference Method• マクロな微分
– 微分係数を数値的に近似する手法
• 以下のような一次元系を考える
φi-1 φi φi+1
Δx Δx
6
直感的・・・というか安易な定義直感的 というか安易な定義
• ×(iとi+1の中点)における微分係数• ×(iとi+1の中点)における微分係数
φi-1 φi φi+1 d ⎞⎛ φφφ
Δx Δx×
xdxd ii
i Δ−
≈⎟⎠⎞
⎜⎝⎛ +
+
φφφ 1
2/1
Δx→0となると微分係数の定義そのもの
• iにおける二階微分係数
11
11
2/12/12 2xxdx
ddxd
d iii
iiii
ii +−=Δ
−−
Δ−
=⎟⎠⎞
⎜⎝⎛−⎟
⎠⎞
⎜⎝⎛
≈⎟⎟⎞
⎜⎜⎛ −+
−+
−+ φφφφφφφφφ
φ22 xxxdx i Δ
=Δ
=Δ
≈⎟⎟⎠
⎜⎜⎝
7
厳密な定義:Taylor展開(1/3)厳密な定義:Taylor展開(1/3)φi-1 φi φi+1
Δx Δx
( ) ( )Kii
xxx ⎟⎟⎞
⎜⎜⎛ ∂Δ
+⎟⎟⎞
⎜⎜⎛ ∂Δ
+⎟⎠⎞
⎜⎝⎛ ∂
Δ+=+ 3
33
2
22
1φφφφφ
iiiii xxx ⎟
⎠⎜⎝ ∂⎟
⎠⎜⎝ ∂
⎟⎠
⎜⎝ ∂+ 321 !3!2
φφ
( ) ( )K
iiiii x
xx
xx
x ⎟⎟⎠
⎞⎜⎜⎝
⎛∂∂Δ
−⎟⎟⎠
⎞⎜⎜⎝
⎛∂∂Δ
+⎟⎠⎞
⎜⎝⎛
∂∂
Δ−=− 3
33
2
22
1 !3!2φφφφφ
iii ⎠⎝⎠⎝⎠⎝
8
厳密な定義:Taylor展開(2/3)厳密な定義:Taylor展開(2/3)φi-1 φi φi+1
Δx Δx( ) ( )xx ⎟
⎞⎜⎛ ∂Δ⎟
⎞⎜⎛ ∂Δ
⎟⎞
⎜⎛ ∂
Δ3322 φφφφφ
前進差分
( ) ( )K
iiiii x
xx
xx
x ⎟⎟⎠
⎞⎜⎜⎝
⎛∂∂Δ
+⎟⎟⎠
⎞⎜⎜⎝
⎛∂∂Δ
+⎟⎠⎞
⎜⎝⎛
∂∂
Δ+=+ 321 !3!2φφφφφ
( ) ( ) ⎞⎛ ∂Δ⎞⎛ ∂Δ⎞⎛ ∂ 322 φφφφφ 打ち切り誤差( ) ( )K
iii
ii
xx
xx
xx ⎟⎟⎠
⎞⎜⎜⎝
⎛∂∂Δ
+⎟⎟⎠
⎞⎜⎜⎝
⎛∂∂Δ
+⎟⎠⎞
⎜⎝⎛
∂∂
=Δ
−+3
32
2
21
!3!2φφφφφ 打ち切り誤差
がΔxのオーダー
( 次精度)
( ) ( )xx ⎟⎞
⎜⎛ ∂Δ⎟
⎞⎜⎛ ∂Δ
⎟⎞
⎜⎛ ∂ 3322 φφφ
(一次精度)
後退差分
( ) ( )K
iiiii x
xx
xx
x ⎟⎟⎠
⎞⎜⎜⎝
⎛∂∂Δ
−⎟⎟⎠
⎞⎜⎜⎝
⎛∂∂Δ
+⎟⎠⎞
⎜⎝⎛
∂∂
Δ−=− 321 !3!2φφφφφ
( ) ( )ii xx ⎟⎞
⎜⎛ ∂Δ⎟
⎞⎜⎛ ∂Δ
⎟⎞
⎜⎛ ∂− 322
1 φφφφφ 打ち切り誤差が( ) ( )K
iii
ii
xx
xx
xx ⎟⎟⎠
⎞⎜⎜⎝
⎛∂∂Δ
+⎟⎟⎠
⎞⎜⎜⎝
⎛∂∂Δ
+⎟⎠⎞
⎜⎝⎛
∂∂
=Δ
−32
1
!3!2φφφφφ 打ち切り誤差が
Δxのオーダー
(一次精度)
9
厳密な定義:Taylor展開(3/3)厳密な定義:Taylor展開(3/3)φi-1 φi φi+1
Δx Δx
( ) ( ) ⎞⎛⎞⎛⎞⎛ 3322
中央差分,中心差分
( ) ( )K
iiiii x
xx
xx
x ⎟⎟⎠
⎞⎜⎜⎝
⎛∂∂Δ
+⎟⎟⎠
⎞⎜⎜⎝
⎛∂∂Δ
+⎟⎠⎞
⎜⎝⎛
∂∂
Δ+=+ 3
33
2
22
1 !3!2φφφφφ
( ) ( )Kii x
xx
xx
x ⎟⎟⎠
⎞⎜⎜⎝
⎛∂∂Δ
−⎟⎟⎠
⎞⎜⎜⎝
⎛∂∂Δ
+⎟⎠⎞
⎜⎝⎛
∂∂
Δ−=− 3
33
2
22
1 !3!2φφφφφ
iii xxx ⎟⎠
⎜⎝ ∂⎟
⎠⎜⎝ ∂⎠⎝ ∂ !3!2
( )x ⎟⎞
⎜⎛ ∂Δ×⎞⎛ ∂ 322 φφφφ 打ち切り誤差が( )
Kii
ii
xx
xx ⎟⎟⎠
⎞⎜⎜⎝
⎛∂∂Δ×
+⎟⎠⎞
⎜⎝⎛
∂∂
=Δ− −+
311
!32
2φφφφ 打ち切り誤差が
(Δx)2のオーダー
(二次精度)
10
安易な定義:実は二次精度だった安易な定義:実は二次精度だったφi-1 φi φi+1
×
Δx Δx
( ) ( ) 3322 2/2/ ⎟⎞
⎜⎛ ∂Δ⎟
⎞⎜⎛ ∂Δ⎞⎛ ∂ xx φφφ
×
( ) ( )K
2/13
2/12
2/12/11 !3
2/!22/2/
+++++ ⎟⎟
⎠
⎞⎜⎜⎝
⎛∂∂Δ
+⎟⎟⎠
⎞⎜⎜⎝
⎛∂∂Δ
+⎟⎠⎞
⎜⎝⎛
∂∂
Δ+=iii
ii xx
xx
xx φφφφφ
⎞⎛⎞⎛( ) ( )K
2/13
33
2/12
22
2/12/1 !3
2/!22/2/
++++ ⎟⎟
⎠
⎞⎜⎜⎝
⎛∂∂Δ
−⎟⎟⎠
⎞⎜⎜⎝
⎛∂∂Δ
+⎟⎠⎞
⎜⎝⎛
∂∂
Δ−=iii
ii xx
xx
xx φφφφφ
( )K3
321
!32/2+
⎟⎟⎠
⎞⎜⎜⎝
⎛∂∂Δ×
+⎟⎠⎞
⎜⎝⎛
∂∂
=Δ
− ii x φφφφ 打ち切り誤差が(Δx)2のオーダー
2/13
2/1 !3++
⎟⎠
⎜⎝ ∂
⎟⎠
⎜⎝ ∂Δ ii xxx
( ) オ ダ
(二次精度)
二点間の中点で二次精度,それ以外の点では一次精度・・・ということもできる。Δxが均一でない場合も同様のことが起こる。
11
一次元熱伝導方程式(3/3)要素単位の線形方程式
• 差分法による離散化
112 2d
ddd
diiii −
−−⎟
⎠⎞
⎜⎝⎛−⎟
⎠⎞
⎜⎝⎛
⎞⎛−+
φφφφφφφφφ
φ
• 差分法による離散化
各要素における線形方程式は以下のような形になる
2112/12/1
2
2 2xx
xxx
dxdxdxd iiiii
i Δ+−
=Δ
ΔΔ=Δ
⎠⎝⎠⎝≈⎟⎟⎠
⎞⎜⎜⎝
⎛ −+−+ φφφφ
• 各要素における線形方程式は以下のような形になる
)1(0)(22
11 NiiBFiii ≤≤=++− −+ φφφ
02
2
=+ BFdxd φ
)1(0)(121
)1(0)(
12212
2
NiiBFxxx
NiiBFx
iii ≤≤=+Δ
+Δ
−Δ
≤≤+Δ
−+ φφφ
11 )1()()()()( NiiBFiAiAiA iRiDiL ≤≤=×+×+× +− φφφ
xxx ΔΔΔ
222
1)(,2)(,1)(x
iAx
iAx
iA RDL Δ=
Δ−=
Δ=
12
連立一次方程式:N=8の場合連立 次方程式 8の場合未知数8,方程式の数8
)2()3()2()2()2()1()2(:2 BFAAAi RDL =×+×+×= φφφ)1()2()1()1()1(:1 BFAAi RD =×+×= φφ
)4()5()4()4()4()3()4(:4)3()4()3()3()3()2()3(:3)2()3()2()2()2()1()2(:2
BFAAAiBFAAAiBFAAAi
RDL
RDL
RDL
=×+×+×==×+×+×=
×+×+×
φφφφφφφφφ
)6()7()6()6()6()5()6(:6)5()6()5()5()5()4()5(:5)()()()()()()(
BFAAAiBFAAAi
RDL
RDL
RDL
=×+×+×==×+×+×=
φφφφφφφφφ
)7()8()7()7()7()6()7(:7 BFAAAi RDL =×+×+×= φφφ
)8()8()8()7()8(:8 BFAAi DL =×+×= φφ
13
連立一次方程式:N=8の場合連立 次方程式 8の場合自分とその周囲のみに非ゼロ成分(各行3つ):疎行列
1 2 3 4 5 6 7 8
AD1 AR1
AL2 AD2 AR2
1 2 3 4 5 6 7 81
2• このような「疎な」行列を係数とする連立一次方程式を解く。AL2 AD2 AR2
AL3 AD3 AR3
AL4 AD4 AR4
3
4
とする連立 次方程式を解く。
[A]{ } {b}AL4 AD4 AR4
AL5 AD5 AR5
AL6 AD6 AR6
4
5
6
[A]{x}={b}
AL6 AD6 AR6
AL7 AD7 AR7
AL8 AD8
6
7
8 AL8 AD88
( )81)()1()()()()1()( iiBFiiAiiAiiA RDL ≤≤=+×+×+−× φφφ
222
1)(,2)(,1)(x
iAx
iAx
iA RDL Δ=
Δ−=
Δ=
14
係数行列は疎行列(Sparse Matrix)p
• 0が多い多
• 非ゼロ成分のみを記憶する方法
Compressed Row Storage CRS(後述)– Compressed Row Storage, CRS(後述)
• 密行列と比較して取り扱いが困難
15
次元熱伝導方程式と差分法• 一次元熱伝導方程式と差分法
• 連立一次方程式の解法
• 反復法について
共役勾配法(CG)法– 共役勾配法(CG)法
– 前処理について
• 共役勾配法を使用した一次元熱伝導解析プログ• 共役勾配法を使用した 次元熱伝導解析プログラムについて
16
科学技術計算における大規模線形方程式の解法
• 多くの科学技術計算は,最終的に大規模線形方程式Ax=bを解くことに帰着される:「線形ソルバー」
– important, expensive• アプリケーションに応じて様々な手法が提案されているアプリケ ションに応じて様々な手法が提案されている
– 疎行列(sparse),密行列(dense)– 直接法(direct) 反復法(iterative)– 直接法(direct),反復法(iterative)
• 本講義・演習では主に,疎行列,反復法について扱う。
• 密行列(dense)• 密行列(dense)– グローバルな相互作用あり:BEM,スペクトル法,MO,MD(気液)
疎行列(sparse)• 疎行列(sparse)– ローカルな相互作用:FEM,FDM,MD(固),高速多重極展開付BEM
17
(密行列)遠隔領域も含め,多数領域との相互作用あり
境界要素法,スペクトル法,MD法
18
(疎行列)近接領域のみとの相互作用
差分法,有限要素法
19
「線形ソルバー」にどう向き合うか ?
• これについてはあとで• これについてはあとで
20
直接法(Direct Method)直接法(Direct Method)• Gaussの消去法,完全LU分解Gaussの消去法,完全LU分解
– 逆行列A-1を直接求める
• 利点– 安定 幅広いアプリケーションに適用可能安定,幅広いアプリケ ションに適用可能
• Partial Pivoting– 疎行列,密行列いずれにも適用可能
• 欠点– 反復法よりもメモリ,計算時間を必要とする反復法よりもメモリ,計算時間を必要とする
• 密行列の場合,O(N3 )の計算量
– 大規模な計算向けではない• O(N2 )の記憶容量,O(N3 )の計算量
LU分解法:完全LU分解法LU分解法:完全LU分解法
直接法の一種
逆行列を直接求める手法逆行列を直接求める手法
「逆行列」に相当するものを保存しておけるので,右辺が変わったときに計算時間を節約できる変わったときに計算時間を節約できる
逆行列を求める際にFill-in(もとの行列では0であったところに値が入る)が生じるろに値が入る)が生じる
21
LU分解による連立一次方程式式の解法
Aがn×n行列のとき、Aを次式のように表すことを(あるいは そのようなLとUそのものを AのLU分解という(あるいは、そのようなLとUそのものを)AのLU分解という.
⎟⎞
⎜⎛
⎟⎞
⎜⎛
⎟⎞
⎜⎛ uuuuaaaa LLL 0001
⎟⎟⎟⎟⎞
⎜⎜⎜⎜⎛
⎟⎟⎟⎟⎞
⎜⎜⎜⎜⎛
=⎟⎟⎟⎟⎞
⎜⎜⎜⎜⎛
n
n
n
n
n
n
uuuuuuuuu
lll
aaaaaaaaaaaa
L
L
L
L
L
L
000
010010001
333
22322
1131211
3231
21
3333231
2232221
1131211
⎟⎟⎟
⎠⎜⎜⎜
⎝⎟⎟⎟
⎠⎜⎜⎜
⎝⎟⎟⎟
⎠⎜⎜⎜
⎝ nnnnnnnnnn ulllaaaa L
MOMMM
L
MOMMM
L
MOMMM
0001321321
LUA =L L t i l t f t i A
22
L:Lower triangular part of matrix AU:Upper triangular part of matrix A
連立一次方程式の行列表現連立 次方程式の行列表現
元の連立 次方程式の 般形n元の連立一次方程式の一般形
nn bxaxaxa =+++ L 11212111
nn
b
bxaxaxa =+++ LM22222121
nnnnnn bxaxaxa =+++ L2211
行列表現行列表現
⎟⎟⎞
⎜⎜⎛
⎟⎟⎞
⎜⎜⎛
⎟⎟⎞
⎜⎜⎛
n
n
bb
xx
aaaaaa
L
L
2
1
2
1
22221
11211
bA⎟⎟⎟⎟
⎠⎜⎜⎜⎜
⎝
=
⎟⎟⎟⎟
⎠⎜⎜⎜⎜
⎝⎟⎟⎟⎟
⎠⎜⎜⎜⎜
⎝ nnnnnn
n
bxaaaMM
L
MOMM22
21
22221 bAx =
23
⎠⎝⎠⎝⎠⎝ nnnnnn 21
A x b
LU分解による解法LU分解による解法
LU分解(エル・ユーブンカイ)
Aがn×n行列のとき Aを次式のように表すことをAがn×n行列のとき、Aを次式のように表すことを(あるいは、そのようなLとUそのものを)AのLU分解という.
⎟⎞
⎜⎛
⎟⎞
⎜⎛
⎟⎞
⎜⎛ uuuuaaaa LLL 0001
⎟⎟⎟⎟⎞
⎜⎜⎜⎜⎛
⎟⎟⎟⎟⎞
⎜⎜⎜⎜⎛
=⎟⎟⎟⎟⎞
⎜⎜⎜⎜⎛
n
n
n
n
n
n
uuuuuuuuu
lll
aaaaaaaaaaaa
L
L
L
L
L
L
000
010010001
333
22322
1131211
3231
21
3333231
2232221
1131211
⎟⎟⎟
⎠⎜⎜⎜
⎝⎟⎟⎟
⎠⎜⎜⎜
⎝⎟⎟⎟
⎠⎜⎜⎜
⎝ nnnnnnnnnn ulllaaaa L
MOMMM
L
MOMMM
L
MOMMM
0001321321
LUA =L L t i l t f t i A
24
L:Lower triangular part of matrix AU:Upper triangular part of matrix A
LU分解を用いたA bの解法LU分解を用いたAx=bの解法
1 LUA = となるAのLU分解LとUを求める
2 bLy = の解yを求める(前進代入)
3 yUx = の解xを求める(後退代入)3 yUx = の解xを求める(後退代入)
この が bAx = の解となるこのxが bAx = の解となる
bLLUA25
bLyLUxAx ===Q
Ly=bの解法Ly bの解法
bLy =⎟⎟⎟⎞
⎜⎜⎜⎛
=⎟⎟⎟⎞
⎜⎜⎜⎛
⎟⎟⎟⎞
⎜⎜⎜⎛
bb
yy
l L
L
2
1
2
1
21 01001
⎟⎟⎟
⎠⎜⎜⎜
⎝
=
⎟⎟⎟
⎠⎜⎜⎜
⎝⎟⎟⎟
⎠⎜⎜⎜
⎝ nnnn byllMM
L
MOMM
21 1
by = 11
byylby
=+=
M22121
11 ylbyy
−= 12122
11
M
nnnn byylyl =+++ L
M
2211 i
n
ininnnnn ylbylylby ∑
−
=
−=−−=1
12211
26
芋づる式に解が求まる:前進代入
Ux=yの解法Ux yの解法
yUx =⎟⎟⎟⎞
⎜⎜⎜⎛
=⎟⎟⎟⎞
⎜⎜⎜⎛
⎟⎟⎟⎞
⎜⎜⎜⎛
n
n
yy
xx
uuuuu
L
L
2
1
2
1
222
11211
0
⎟⎟⎟
⎠⎜⎜⎜
⎝
=
⎟⎟⎟
⎠⎜⎜⎜
⎝⎟⎟⎟
⎠⎜⎜⎜
⎝ nnnn yxuMM
L
MOMM
00
yxu nnnn =/)(
/ uyx nnnn =
1,111,1 yxuxuy
nnnnnnn
nnnn
=+ −−−−−
M
1,1,111 /)( uxuyx nnnnnnn
⎞⎛
−= −−−−−
M
11212111 yxuxuxu nn =+++ L 112
111 / uxuyx j
n
ij ⎟
⎠
⎞⎜⎝
⎛−= ∑
=
27
芋づる式に 解が求まる:後退代入
LU分解の求め方LU分解の求め方
⎟⎟⎟⎞
⎜⎜⎜⎛
⎟⎟⎟⎞
⎜⎜⎜⎛
⎟⎟⎟⎞
⎜⎜⎜⎛
n
n
n
n
uuuuuuu
lllaaaa
aaaaL
L
L
L
L
L
000
010010001
22322
1131211
212232221
1131211
⎟⎟⎟⎟
⎠⎜⎜⎜⎜
⎝⎟⎟⎟⎟
⎠⎜⎜⎜⎜
⎝
=
⎟⎟⎟⎟
⎠⎜⎜⎜⎜
⎝ nn
n
nnnnnnnn
n
u
uu
lll
ll
aaaa
aaaa
L
MOMMM
L
L
MOMMM
L
L
MOMMM
L
000
00
1
01 333
321
3231
321
3333231
⎠⎝⎠⎝⎠⎝ nnnnnnnnnn 321321
28
aij={Lのi行目}×{Uのj列目}aij {Lのi行目}×{Uのj列目}
⎞⎛
⎟⎟⎟⎟⎞
⎜⎜⎜⎜⎛
nj
nj
nj
aaaaaaaaaaaaaaa
LL
LL
LL
33333231
22232221
11131211
=
⎟⎟⎟⎟⎟⎟
⎜⎜⎜⎜⎜⎜
inijiii
j
aaaaaMOLLMMM
LL
MLMOMMM
321
⎟⎟⎟
⎠⎜⎜⎜
⎝ nnnjnnn aaaaa LL
MOMMM
321
⎟⎟⎟⎟⎞
⎜⎜⎜⎜⎛
⎟⎟⎟⎟⎞
⎜⎜⎜⎜⎛
nj
nj
nj
uuuuuuuuuuuu
lll
LL
LL
LL
LL
LL
LL
000
001000100001
3333
222322
11131211
3231
21
⎟⎟⎟⎟⎟
⎜⎜⎜⎜⎜
⎟⎟⎟⎟⎟
⎜⎜⎜⎜⎜
jj
nj
iii ulllMOML
MLL
MLMOMMM
OMLMMM
LL
LMOMMM
000000
0010
3333
321
3231
29
⎟⎟⎟
⎠⎜⎜⎜
⎝⎟⎟⎟
⎠⎜⎜⎜
⎝ nnnnn ulll LL
MOML
LL
OMLMMM
0000000
100
321
LU分解の求め方LU分解の求め方
①
⎟⎟⎟⎞
⎜⎜⎜⎛
⎟⎟⎟⎞
⎜⎜⎜⎛
⎟⎟⎟⎞
⎜⎜⎜⎛
n
n
n
n
uuuuuuu
lllaaaa
aaaaL
L
L
L
L
L
000
010010001
22322
1131211
212232221
1131211
⎟⎟⎟⎟
⎠⎜⎜⎜⎜
⎝⎟⎟⎟⎟
⎠⎜⎜⎜⎜
⎝
=
⎟⎟⎟⎟
⎠⎜⎜⎜⎜
⎝ nn
n
nnnnnnnn
n
u
uu
lll
ll
aaaa
aaaa
L
MOMMM
L
L
MOMMM
L
L
MOMMM
L
000
00
1
01 333
321
3231
321
3333231
⎠⎝⎠⎝⎠⎝ nnnnnnnnnn 321321
ja1 :[L]の第1行と [U]の第 j 列の内積⇒ [U]の第1行のみ残るja1 :[L]の第1行と,[U]の第 j 列の内積⇒ [U]の第1行のみ残る
① nn uauaua 1112121111 ,,, === L nuuu 11211 ,,, L⇒
30
LU分解の求め方LU分解の求め方
①
⎟⎟⎟⎞
⎜⎜⎜⎛
⎟⎟⎟⎞
⎜⎜⎜⎛
⎟⎟⎟⎞
⎜⎜⎜⎛
n
n
n
n
uuuuuuu
lllaaaa
aaaaL
L
L
L
L
L
000
010010001
22322
1131211
212232221
1131211
⎟⎟⎟⎟
⎠⎜⎜⎜⎜
⎝⎟⎟⎟⎟
⎠⎜⎜⎜⎜
⎝
=
⎟⎟⎟⎟
⎠⎜⎜⎜⎜
⎝ nn
n
nnnnnnnn
n
u
uu
lll
ll
aaaa
aaaa
L
MOMMM
L
L
MOMMM
L
L
MOMMM
L
000
00
1
01 333
321
3231
321
3333231
⎠⎝⎠⎝⎠⎝ nnnnnnnnnn 321321
②
第 第 積1ia :[L]の第 i 行と,[U]の第1列の内積
① nn uauaua 1112121111 ,,, === L nuuu 11211 ,,, L⇒
② 1111113131112121 ,,, ulaulaula nn === L 13121 ,,, nlll L⇒
①
31
LU分解の求め方LU分解の求め方
①
⎟⎟⎟⎞
⎜⎜⎜⎛
⎟⎟⎟⎞
⎜⎜⎜⎛
⎟⎟⎟⎞
⎜⎜⎜⎛
n
n
n
n
uuuuuuu
lllaaaa
aaaaL
L
L
L
L
L
000
010010001
22322
1131211
212232221
1131211③
⎟⎟⎟⎟
⎠⎜⎜⎜⎜
⎝⎟⎟⎟⎟
⎠⎜⎜⎜⎜
⎝
=
⎟⎟⎟⎟
⎠⎜⎜⎜⎜
⎝ nn
n
nnnnnnnn
n
u
uu
lll
ll
aaaa
aaaa
L
MOMMM
L
L
MOMMM
L
L
MOMMM
L
000
00
1
01 333
321
3231
321
3333231
⎠⎝⎠⎝⎠⎝ nnnnnnnnnn 321321
②
第 第 積
① nn uauaua 1112121111 ,,, === L nuuu 11211 ,,, L⇒
ja 2 :[L]の第 2行と,[U]の第 j 列の内積
③ ll
② 1111113131112121 ,,, ulaulaula nn === L 13121 ,,, nlll L⇒
① nn 1112121111 ,,, n11211 ,,,
32
③ nnn uulauula 2121222122122 ,, +=+= L nuuu 22322 ,,, L⇒
LU分解の求め方LU分解の求め方
①
⎟⎟⎟⎞
⎜⎜⎜⎛
⎟⎟⎟⎞
⎜⎜⎜⎛
⎟⎟⎟⎞
⎜⎜⎜⎛
n
n
n
n
uuuuuuu
lllaaaa
aaaaL
L
L
L
L
L
000
010010001
22322
1131211
212232221
1131211
③
⎟⎟⎟⎟
⎠⎜⎜⎜⎜
⎝⎟⎟⎟⎟
⎠⎜⎜⎜⎜
⎝
=
⎟⎟⎟⎟
⎠⎜⎜⎜⎜
⎝ nn
n
nnnnnnnn
n
u
uu
lll
ll
aaaa
aaaa
L
MOMMM
L
L
MOMMM
L
L
MOMMM
L
000
00
1
01 333
321
3231
321
3333231
⎠⎝⎠⎝⎠⎝ nnnnnnnnnn 321321
② ④
a :[L]の第 i 行と [U]の第2列の内積
① nn uauaua 1112121111 ,,, === L nuuu 11211 ,,, L⇒
2ia :[L]の第 i 行と,[U]の第2列の内積
③ nnn uulauula 2121222122122 ,, +=+= L nuuu 22322 ,,, L⇒
② 1111113131112121 ,,, ulaulaula nn === L 13121 ,,, nlll L⇒
33
④ L,2232123132 ulula +=
③ nnn uulauula 2121222122122 ,, ++ n22322 ,,,
24232 ,,, nlll L⇒
数値例数値例
⎟⎟⎟⎞
⎜⎜⎜⎛
⎟⎟⎟⎞
⎜⎜⎜⎛
=⎟⎟⎟⎞
⎜⎜⎜⎛
= 242322
14131211
21 00010001
107624321
uuuuuuu
lA
⎟⎟⎟
⎠⎜⎜⎜
⎝⎟⎟⎟
⎠⎜⎜⎜
⎝⎟⎟⎟
⎠⎜⎜⎜
⎝ − 44
3433
434241
3231
00000
101
17407822
uuu
lllll
A
第1行 14131211 4,3,2,1 uuuu ====
第1列 2/222/22 ==⇒===⇒= ulululul第1列
0/002/22,2/22
11411141
1131113111211121
==⇒===⇒===⇒=
ulululululul
第2行 1726 =⇒+==⇒+= uuuluuul第2行
21017,26
24241421
2323132122221221
=⇒+==⇒+==⇒+=
uuuluuuluuul
第2列 2412 −=⇒+=−−=⇒+= lulullulul
34
第2列 24,12 42224212413222321231 =⇒+==⇒+= lulullulul
数値例(続き)数値例(続き)
⎟⎟⎟⎞
⎜⎜⎜⎛
⎟⎟⎟⎞
⎜⎜⎜⎛
=⎟⎟⎟⎞
⎜⎜⎜⎛
= 242322
14131211
21 00010001
107624321
uuuuuuu
lA
⎟⎟⎟
⎠⎜⎜⎜
⎝⎟⎟⎟
⎠⎜⎜⎜
⎝⎟⎟⎟
⎠⎜⎜⎜
⎝ − 44
3433
434241
3231
00000
101
17407822
uuu
lllll
A
第3行
17,38
343424321431
333323321331
=⇒++==⇒++=
uuululuuulul
343424321431
第3列 37 43334323421341 =⇒++= lululul
第4行(第4列) 21 4444344324421441 =⇒+++= uuululul
35
1行、1列、2行、2列、・ ・ ・の順に求める式を作っていく.
数値例(続き)数値例(続き)
結局
⎞⎛⎞⎛⎞⎛
⎟⎟⎟⎞
⎜⎜⎜⎛
⎟⎟⎟⎞
⎜⎜⎜⎛
=⎟⎟⎟⎞
⎜⎜⎜⎛
=130021204321
011200120001
7822107624321
A
⎟⎟⎟
⎠⎜⎜⎜
⎝⎟⎟⎟
⎠⎜⎜⎜
⎝ −−
⎟⎟⎟
⎠⎜⎜⎜
⎝ − 20001300
13200112
17407822
L UL U
36
37
反復法(Iterative Method)反復法(Iterative Method)• 定常(stationary)法定常(stationary)法
– 反復計算中,解ベクトル以外の変数は変化せず
– SOR Gauss-Seidel JacobiなどSOR,Gauss Seidel,Jacobiなど
– 概して遅い
• 非定常(nonstationary)法拘束 最適化条件が加わる– 拘束,最適化条件が加わる
– Krylov部分空間(subspace)への写像を基底として使用するため,Krylov部分空間法とも呼ばれるKrylov部分空間法とも呼ばれる
– CG(Conjugate Gradient:共役勾配法)
BiCGSTAB(Bi Conjugate Gradient Stabilized)– BiCGSTAB(Bi-Conjugate Gradient Stabilized)– GMRES(Generalized Minimal Residual)
38
反復法(Iterative Method)(続き)反復法(Iterative Method)(続き)
• 利点利点– 直接法と比較して,メモリ使用量,計算量が少ない。
– 並列計算には適している。並列計算には適している。
• 欠点欠点– 収束性が,アプリケーション,境界条件の影響を受けやすい。
– 前処理(preconditioning)が重要。前処理(preconditioning)が重要。
39
次元熱伝導方程式と差分法• 一次元熱伝導方程式と差分法
• 連立一次方程式の解法
• 反復法について
共役勾配法(CG)法– 共役勾配法(CG)法
– 前処理について
• 共役勾配法を使用した一次元熱伝導解析プログ• 共役勾配法を使用した 次元熱伝導解析プログラムについて
40
代表的な反復法:共役勾配法
• Conjugate Gradient法,略して「CG」法最も代表的な「非定常」反復法– 最も代表的な「非定常」反復法
• 対称正定値行列(Symmetric Positive Definite:SPD)任意のベクトル{x}に対して{x}T[A]{x}>0– 任意のベクトル{x}に対して{x}T[A]{x}>0
– 全対角成分>0,全固有値>0,全部分行列式>0と同値
– (ガラーキン法)熱伝導 弾性 ねじり:本コードの場合もSPD(ガラ キン法)熱伝導,弾性,ねじり:本コ ドの場合もSPD• アルゴリズム
– 最急降下法(Steepest Descent Method)の変種– 最急降下法(Steepest Descent Method)の変種
– x(i)= x(i-1) + αip(i)
• x(i):反復解,p(i):探索ベクトル,αi:定数)復解,p , i 定数
– 厳密解をyとするとき {x-y}T[A]{x-y}を最小とするような{x}を求める。
– 詳細は参考文献参照
• 例えば:森正武「数値解析(第2版)」(共立出版)
41
共役勾配法のアルゴリズム共役勾配法のアルゴリズム
Compute r(0)= b-[A]x(0)行列ベクトル積
Compute r b [A]xfor i= 1, 2, …
z(i-1)= r(i-1)
ρi-1= r(i-1) z(i-1)
• 行列ベクトル積• ベクトル内積ベクトル定数倍の加減
ρi 1if i=1p(1)= z(0)
else
• ベクトル定数倍の加減
βi-1= ρi-1/ρi-2p(i)= z(i-1) + βi-1 p(i-1)
endifq(i)= [A]p(i)
αi = ρi-1/p(i)q(i)x(i)= x(i-1) + αip(i)(i) (i 1) (i)
x(i) :ベクトルαi :スカラー
r(i)= r(i-1) - αiq(i)
check convergence |r|end
42
共役勾配法のアルゴリズム共役勾配法のアルゴリズム
行列ベクトル積Compute r(0)= b-[A]x(0) • 行列ベクトル積
• ベクトル内積ベクトル定数倍の加減
Compute r b [A]xfor i= 1, 2, …
z(i-1)= r(i-1)
ρi-1= r(i-1) z(i-1) • ベクトル定数倍の加減ρi 1if i=1p(1)= z(0)
elseβi-1= ρi-1/ρi-2p(i)= z(i-1) + βi-1 p(i-1)
endif
x(i) :ベクトルαi :スカラー
q(i)= [A]p(i)
αi = ρi-1/p(i)q(i)x(i)= x(i-1) + αip(i)(i) (i 1) (i)r(i)= r(i-1) - αiq(i)
check convergence |r|end
43
共役勾配法のアルゴリズム共役勾配法のアルゴリズム
行列ベクトル積Compute r(0)= b-[A]x(0) • 行列ベクトル積
• ベクトル内積ベクトル定数倍の加減
Compute r b [A]xfor i= 1, 2, …
z(i-1)= r(i-1)
ρi-1= r(i-1) z(i-1) • ベクトル定数倍の加減ρi-1if i=1p(1)= z(0)
elseβi-1= ρi-1/ρi-2p(i)= z(i-1) + βi-1 p(i-1)
endif
x(i) :ベクトルαi :スカラー
q(i)= [A]p(i)
αi = ρi-1/p(i)q(i)x(i)= x(i-1) + αip(i)(i) (i 1) (i)r(i)= r(i-1) - αiq(i)
check convergence |r|end
44
共役勾配法のアルゴリズム共役勾配法のアルゴリズム
行列ベクトル積Compute r(0)= b-[A]x(0) • 行列ベクトル積
• ベクトル内積ベクトル定数倍の加減
Compute r b [A]xfor i= 1, 2, …
z(i-1)= r(i-1)
ρi-1= r(i-1) z(i-1) • ベクトル定数倍の加減ρi 1if i=1p(1)= z(0)
elseβi-1= ρi-1/ρi-2p(i)= z(i-1) + βi-1 p(i-1)
endif
x(i) :ベクトルαi :スカラー
q(i)= [A]p(i)
αi = ρi-1/p(i)q(i)x(i)= x(i-1) + αip(i)(i) (i 1) (i)r(i)= r(i-1) - αiq(i)check convergence |r|
end
45
共役勾配法のアルゴリズム(1/5)共役勾配法のアルゴリズム(1/5)yを厳密解( Ay=b )とするとき,下式を最小にするxを求める:
( ) [ ]( ) ( ) ( ) ( ) ( )T
( ) [ ]( )yxAyx T −−
y y
( ) [ ]( ) ( ) ( ) ( ) ( )( ) ( ) ( ) ( ) ( ) ( )bybxAxxAyyAyxAxx
AyyAyxAxyAxxyxAyx T
,,2,,,2,,,,,
+−=+−=+−−=−−
定数
従って,下記 f(x) を最小にするxを求めればよい:
( ) ( ) ( )bxAxxxf ,,21
−=
( ) ( ) ( ) ( )AhhbAxhxfhxf ,21, +−+=+ 任意のベクトルh2
46
( ) ( ) ( )bxAxxxf ,,21
−=2
( ) ( ) ( ) ( )AhhbAxhxfhxf ,1, +−+=+ 任意のベクトルh( ) ( ) ( ) ( )AhhbAxhxfhxf ,2
, +++
1( ) ( ) ( )bhxhxAhxhxf
11
,)(,21
+−++=+
( ) ( ) ( ) ( )
( ) ( ) ( ) ( ) ( ) ( )
bhbxAhhxAxhx
1111
,,,21,
21
−−+++=
( ) ( ) ( ) ( ) ( ) ( )
( ) ( ) ( ) ( ) ( )
bhbxAhhAhxAxhAxx
11
,,,21,
21,
21,
21
−−+++=
( ) ( ) ( ) ( ) ( )
( ) ( ) ( )AhhbAhf
AhhbhAxhbxAxx
1
,21,,,,
21
+−+−=
( ) ( ) ( )AhhbAxhxf ,21, +−+=
47
共役勾配法のアルゴリズム(2/5)共役勾配法のアルゴリズム(2/5)CG法は任意の x(0) から始めて,f(x)の最小値を逐次探索する。
)()()1( kk
kk pxx α+=+
f今,k番目の近似値 x(k)と探索方向 p(k)が決まったとすると:
k pxx α+
f(x(k+1)) を最小にするためには:
( ) ( ) ( ) ( ))()()()()(2)()( ,,21 kkk
kkk
kk
kk xfAxbpApppxf +−−=+ ααα
f(x ) を最小にするためには:
( ) ( ) ( ) ( ),,2 kkk fppppf
( ) ( )( )
( )( ))()(
)()(
)()(
)()()()( ,,0 kk
kk
kk
kk
k
kk
k
Arp
AAxbppxf
=−
=⇒=∂+∂ αα
( ) ( ))()()()( ,, kkkkkk AppApp∂α
)()( kk Axbr −= は第k近似に対する残差Axbr −= は第k近似に対する残差
48
共役勾配法のアルゴリズム(3/5)共役勾配法のアルゴリズム(3/5)残差 r(k)も以下の式によって計算できる:
)()()1( kk
kk Aprr α−=+
)0()0()()1()1( prprp kkk =+= ++ β
探索方向を以下の漸化式によって求める:
, prprp k =+= β
本当のところは下記のように(k+1)回目に厳密解 y が求まれば良いのであるが,解がわかっていない場合は困難・・・
)1(1
)1( ++
+ += kk
k pxy α 1+k py
49
共役勾配法のアルゴリズム(4/5)共役勾配法のアルゴリズム(4/5)ところで,下式のような都合の良い直交関係がある:,下式 ような都合 良 直交関係 ある
( ) 0, )1()( =− +kk xyAp
( ) ( ) ( )[ ]( ) ( )
,,,)()()()()()(
)1()()1()()1()(
=+=
−=−=− +++
kkkkkk
kkkkkk
ApAxbppxAbpAxbpAxAypxyAp
αα[ ]( ) ( )( ) ( ) ( ) 0,,,
,,)()()()()()()(
)()()()()()(
=−=−=
−−=+−=kk
kkkk
kkk
kk
ApprpAprp
ApAxbppxAbp
αα
αα
( )( ))()(
)()(
,,
kk
kk
k Apprp
=αQ
従って以下が成立する
( ) ( ) ( ) 00 )()1()1()()1()( ⇒ +++ kkkkkk AAA α
( ), pp
( ) ( ) ( ) 0,0,, )()()(1
)()()( =⇒==− +kkk
kkkk ApppApxyAp α
50
共役勾配法のアルゴリズム(5/5)共役勾配法のアルゴリズム(5/5)( ) ( ) ( ) ( ))()()()1()()()1()()1( 0,,,, kk
kkkkk
kkkk AppAprApprApp +++ =+=+= ββ( ) ( ) ( ) ( )
( )( ))()(
)()1(
,,
kk
kk
k AppApr +−
=⇒ β ( ), pp
( ) 0, )()1( =+ kk App 勾配ベクトル p(k)がAに関して共役である
勾配ベクトル p(k),残差ベクトル r(k) についても以下の関係が成立(証明略:帰納法)(証明略:帰納法)
( ) ( ) ( ) ( )( ) ( ))()()()(
)()()()( 0,,0,kkkk
jiji jirrjiApp ≠=≠=
( ) ( ))()()()( ,, kkkk rrrp =
N次元空間で互いに直交で一次独立な残差ベクトル r(k) はN個しか存在しない,従って共役勾配法は未知数がN個のときにN回以内に収束する⇒実際は丸め誤差の影響がある
51
αk,βk
実際はαk,βkはもうちょっと簡単な形に変形できる:
( )( )
( )( )
( )( ))()(
)()(
)()(
)()(
)()(
)()( ,,,kk
kk
kk
kk
kk
kk
k Apprr
Apprp
AppAxbp
==−
=α ( ) ( ) ( )( ) ( ))()()()( ,,
,,,kkkk rrrp
AppAppApp=Q
( )( )
( )( )kk
kk
kk
kk
k rrrr
AppAprβ )()(
)1()1(
)()(
)()1(
,,
,, +++
=−
= ( ) ( )( ) ( ) ( )kkkkk
kk rrrrrApr
pp
αα
)1()1()1()()1()()1( ,,,
,,++++
+ −=−
=Qkk αα
52
共役勾配法のアルゴリズム共役勾配法のアルゴリズム
Compute r(0)= b-[A]x(0)行列ベクトル積
Compute r b [A]xfor i= 1, 2, …
z(i-1)= r(i-1)
ρi-1= r(i-1) z(i-1)
• 行列ベクトル積• ベクトル内積ベクトル定数倍の加減
ρi 1if i=1p(1)= z(0)
else
• ベクトル定数倍の加減
βi-1= ρi-1/ρi-2p(i)= z(i-1) + βi-1 p(i-1)
endifq(i)= [A]p(i)
αi = ρi-1/p(i)q(i)x(i)= x(i-1) + αip(i)(i) (i 1) (i)
x(i) :ベクトルαi :スカラー
r(i)= r(i-1) - αiq(i)
check convergence |r|end
53
前処理(preconditioning)とは?前処理(preconditioning)とは?• 反復法の収束は係数行列の固有値分布に依存• 反復法の収束は係数行列の固有値分布に依存
– 固有値分布が少なく,かつ1に近いほど収束が早い(単位行列)
– 条件数(condition number)(対称正定)=最大最小固有値の比– 条件数(condition number)(対称正定)=最大最小固有値の比• 条件数が1に近いほど収束しやすい
• もとの係数行列[A]に良く似た前処理行列[M]を適用することもとの係数行列[A]に良く似た前処理行列[M]を適用すること
によって固有値分布を改善する。– 前処理行列[M]によって元の方程式[A]{x}={b}を前処理行列[M]によって元の方程式[A]{x} {b}を[A’]{x’}={b’}へと変換する。ここで[A’]=[M]-1[A],{b’}=[M]-1{b}である。
– [A’]=[M]-1[A]が単位行列に近ければ良い,ということになる。
• 「前処理」は密行列,疎行列ともに使用するが,普通は疎行列前処理」は密行列,疎行列ともに使用するが,普通は疎行列を対象にすることが多い。
54
前処理付共役勾配法Preconditioned Conjugate Gradient Method (PCG)
Compute r(0)= b-[A]x(0) 実際にやるべき計算はCompute r b [A]xfor i= 1, 2, …
solve [M]z(i-1)= r(i-1)
ρi-1= r(i-1) z(i-1)
実際にやるべき計算は:
{ } [ ] { }rMz 1−=ρi 1if i=1p(1)= z(0)
else
{ } [ ] { }rMz
「近似逆行列」の計算が必要:βi-1= ρi-1/ρi-2p(i)= z(i-1) + βi-1 z(i-1)
endif[ ] [ ] [ ] [ ]AMAM ≈≈ −− ,11
q(i)= [A]p(i)
αi = ρi-1/p(i)q(i)x(i)= x(i-1) + αip(i)(i) (i 1) (i)
究極の前処理:本当の逆行列
[ ] [ ] [ ] [ ]AMAM == −− 11r(i)= r(i-1) - αiq(i)
check convergence |r|end 対角スケーリング:簡単=弱い
[ ] [ ] [ ] [ ]11
[ ] [ ] [ ] [ ]AMAM ,
[ ] [ ] [ ] [ ]DMDM == −− ,11
55
ILU(0), IC(0)ILU(0), IC(0)• 最もよく使用されている前処理(疎行列用)最もよく使用され る前処理(疎行列用)
– 不完全LU分解• Incomplete LU Factorization
– 不完全コレスキー分解• Incomplete Cholesky Factorization(対称行列)
• 不完全な直接法– もとの行列が疎でも,逆行列は疎とは限らない。
– fill-in– もとの行列と同じ非ゼロパターン(fill-in無し)を持っているのが
ILU(0),IC(0)
56
ILU(0), IC(0)ILU(0), IC(0)• 最もよく使用されている前処理(疎行列用)
– Incomplete LU Factorization– Incomplete Cholesky Factorization(対称行列)
ILU(0) : keep non-zero pattern of the original coefficient matrix
• 不完全な直接法
もとの行列が疎でも 逆行do i= 2, ndo k= 1, i-1
if ((i,k)∈ NonZero(A)) thenif ((i,k)∈ NonZero(A)) then//
– もとの行列が疎でも,逆行列は疎とは限らない。
– fill-inaaik ik := a:= aikik/a/akkkk
endifendifdo j= k+1, n
if ((i j)∈ N Z (A)) thif ((i j)∈ N Z (A)) th
fill in– もとの行列と同じ非ゼロパターン(fill-in無し)を持って
if ((i,j)∈ NonZero(A)) thenif ((i,j)∈ NonZero(A)) thenaaij ij := a:= aijij -- aaikik*a*akjkj
endifendifenddo
いるのがILU(0),IC(0)
enddoenddo
enddo
LU分解法:完全LU分解法LU分解法:完全LU分解法
直接法の一種
逆行列を直接求める手法逆行列を直接求める手法
「逆行列」に相当するものを保存しておけるので,右辺が変わったときに計算時間を節約できる変わったときに計算時間を節約できる
逆行列を求める際にFill-in(もとの行列では0であったところに値が入る)が生じるろに値が入る)が生じる
不完全LU分解法
Fill i の発生を制限して 前処理に使う手法Fill-inの発生を制限して,前処理に使う手法
不完全な逆行列,少し弱い直接法
57
58
実例:差分法による熱伝導等5点差分
1 10 11 12
23 7 8 93
45
4 5 667
1 2 389
101011
12
59
実例:差分法による熱伝導等5点差分
1 10 11 12
23 7 8 93
45
4 5 667
1 2 389
101011
12
60
実例:係数マトリクス数0.00
3.00
10.00
6.00 -1.00 0.00 -1.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
-1.00 6.00 -1.00 0.00 -1.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
0.00 -1.00 6.00 0.00 0.00 -1.00 0.00 0.00 0.00 0.00 0.00 0.00
=X11.00
10.00
19.00
20.00
-1.00 0.00 0.00 6.00 -1.00 0.00 -1.00 0.00 0.00 0.00 0.00 0.00
0.00 -1.00 0.00 -1.00 6.00 -1.00 0.00 -1.00 0.00 0.00 0.00 0.00
0.00 0.00 -1.00 0.00 -1.00 6.00 0.00 0.00 -1.00 0.00 0.00 0.00
0.00 0.00 0.00 -1.00 0.00 0.00 6.00 -1.00 0.00 -1.00 0.00 0.00
16.00
28.00
42.00
36.00
52 00
0.00 0.00 0.00 0.00 -1.00 0.00 -1.00 6.00 -1.00 0.00 -1.00 0.00
0.00 0.00 0.00 0.00 0.00 -1.00 0.00 -1.00 6.00 0.00 0.00 -1.00
0.00 0.00 0.00 0.00 0.00 0.00 -1.00 0.00 0.00 6.00 -1.00 0.00
0.00 0.00 0.00 0.00 0.00 0.00 0.00 -1.00 0.00 -1.00 6.00 -1.00
0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 1 00 0 00 1 00 6 00
10 11 1212
52.000.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 -1.00 0.00 -1.00 6.00
7 8 9
23
45
6
4 5 6
67
89
1 2 3
1011
12
61
実例:解
0.00
3.00
6.00 -1.00 0.00 -1.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
-1.00 6.00 -1.00 0.00 -1.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
1.00
2.00
=
10.00
11.00
10.00
19.00
0.00 -1.00 6.00 0.00 0.00 -1.00 0.00 0.00 0.00 0.00 0.00 0.00
-1.00 0.00 0.00 6.00 -1.00 0.00 -1.00 0.00 0.00 0.00 0.00 0.00
0.00 -1.00 0.00 -1.00 6.00 -1.00 0.00 -1.00 0.00 0.00 0.00 0.00
0.00 0.00 -1.00 0.00 -1.00 6.00 0.00 0.00 -1.00 0.00 0.00 0.00
3.00
4.00
5.00
6.00 = 20.00
16.00
28.00
42.00
36 00
0.00 0.00 0.00 -1.00 0.00 0.00 6.00 -1.00 0.00 -1.00 0.00 0.00
0.00 0.00 0.00 0.00 -1.00 0.00 -1.00 6.00 -1.00 0.00 -1.00 0.00
0.00 0.00 0.00 0.00 0.00 -1.00 0.00 -1.00 6.00 0.00 0.00 -1.00
0.00 0.00 0.00 0.00 0.00 0.00 -1.00 0.00 0.00 6.00 -1.00 0.00
7.00
8.00
9.00
10.00
11 00
10 11 1212
36.00
52.00
0.00 0.00 0.00 0.00 0.00 0.00 0.00 -1.00 0.00 -1.00 6.00 -1.00
0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 -1.00 0.00 -1.00 6.00
11.00
12.00
7 8 9
23
45
6
4 5 6
67
89
1 2 3
1011
12
62
ECCS2008ログイン,ディレクトリ作成グイン,ディレクトリ作成
ディレクトリ作成>$ d D t この下に作る>$ cd Documents この下に作る>$ mkdir EPSsummer (好きな名前でよい)>$ cd EPSsummer
このディレクトリを本講義では <$E-EPS> と呼ぶ基本的にファイル類はこのディレクトリにコピー,解凍する
この下に課題番号に応じて S1, S2, S1-ref などのディレクトリを作る<$S1> = <$E-EPS>/S1<$S2> = <$E-EPS>/S2<$S2> = <$E EPS>/S2
T2K <$T-EPS>
63
ファイルコピーファイル一次元熱伝導方程式
>$ cd <$E-EPS>>$ cp /home03/skengon/Documents/class/EPSsummer/intro.tar .>$ tar xvf intro.tar$>$ cd intro
64
(完全)LU分解 不完全LU分解(完全)LU分解,不完全LU分解
>$ cd <$E-EPS>/intro
lu1.f 完全LU分解によるプログラム(FORTRAN)
lu2.f 不完全LU分解(fill-in無し)によるプログラム(FORTRAN)
lu1 lu1.f をコンパイル,リンクしたものを ン イル,リンクしたもの
lu2 lu2.f をコンパイル,リンクしたもの
CユーザーもFORTRANでお願いします
65
完全LU分解したマトリクス./lu1 とタイプ
もとのマトリクス6.00 -1.00 0.00 -1.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
1 00 6 00 1 00 0 00 1 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00もとのマトリクス -1.00 6.00 -1.00 0.00 -1.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
0.00 -1.00 6.00 0.00 0.00 -1.00 0.00 0.00 0.00 0.00 0.00 0.00
-1.00 0.00 0.00 6.00 -1.00 0.00 -1.00 0.00 0.00 0.00 0.00 0.00
0.00 -1.00 0.00 -1.00 6.00 -1.00 0.00 -1.00 0.00 0.00 0.00 0.00
0 00 0 00 1 00 0 00 1 00 6 00 0 00 0 00 1 00 0 00 0 00 0 000.00 0.00 -1.00 0.00 -1.00 6.00 0.00 0.00 -1.00 0.00 0.00 0.00
0.00 0.00 0.00 -1.00 0.00 0.00 6.00 -1.00 0.00 -1.00 0.00 0.00
0.00 0.00 0.00 0.00 -1.00 0.00 -1.00 6.00 -1.00 0.00 -1.00 0.00
0.00 0.00 0.00 0.00 0.00 -1.00 0.00 -1.00 6.00 0.00 0.00 -1.00
0 00 0 00 0 00 0 00 0 00 0 00 -1 00 0 00 0 00 6 00 -1 00 0 00
解600 1 00 0 00 1 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00
0.00 0.00 0.00 0.00 0.00 0.00 1.00 0.00 0.00 6.00 1.00 0.00
0.00 0.00 0.00 0.00 0.00 0.00 0.00 -1.00 0.00 -1.00 6.00 -1.00
0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 -1.00 0.00 -1.00 6.00
LU分解したマトリクス[L][U]同時に表示[L]対角成分(=1)省略
6.00 -1.00 0.00 -1.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
-0.17 5.83 -1.00 -0.17 -1.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
0.00 -0.17 5.83 -0.03 -0.17 -1.00 0.00 0.00 0.00 0.00 0.00 0.00
-0.17 -0.03 0.00 5.83 -1.03 0.00 -1.00 0.00 0.00 0.00 0.00 0.00
0 00 0 17 0 03 0 18 5 64 1 03 0 18 1 00 0 00 0 00 0 00 0 00[L]対角成分( 1)省略
(fill-inが生じている。もともと0だった成分が非ゼ な る)
0.00 -0.17 -0.03 -0.18 5.64 -1.03 -0.18 -1.00 0.00 0.00 0.00 0.00
0.00 0.00 -0.17 0.00 -0.18 5.64 -0.03 -0.18 -1.00 0.00 0.00 0.00
0.00 0.00 0.00 -0.17 -0.03 -0.01 5.82 -1.03 -0.01 -1.00 0.00 0.00
0.00 0.00 0.00 0.00 -0.18 -0.03 -0.18 5.63 -1.03 -0.18 -1.00 0.00
0 00 0 00 0 00 0 00 0 00 -0 18 0 00 -0 18 5 63 -0 03 -0 18 -1 00
ゼロになっている)0.00 0.00 0.00 0.00 0.00 0.18 0.00 0.18 5.63 0.03 0.18 1.00
0.00 0.00 0.00 0.00 0.00 0.00 -0.17 -0.03 -0.01 5.82 -1.03 -0.01
0.00 0.00 0.00 0.00 0.00 0.00 0.00 -0.18 -0.03 -0.18 5.63 -1.03
0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 -0.18 0.00 -0.18 5.63
66
不完全LU分解したマトリクス(fill-in無し)./lu2 とタイプ
不完全LU分解した6.00 -1.00 0.00 -1.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
-0.17 5.83 -1.00 0.00 -1.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00不完全LU分解したマトリクス(fill-in無し)[L][U]同時に表示[L]対角成分( 1)省略
0.00 -0.17 5.83 0.00 0.00 -1.00 0.00 0.00 0.00 0.00 0.00 0.00
-0.17 0.00 0.00 5.83 -1.00 0.00 -1.00 0.00 0.00 0.00 0.00 0.00
0.00 -0.17 0.00 -0.17 5.66 -1.00 0.00 -1.00 0.00 0.00 0.00 0.00
0.00 0.00 -0.17 0.00 -0.18 5.65 0.00 0.00 -1.00 0.00 0.00 0.00
[L]対角成分(=1)省略 0.00 0.00 0.00 -0.17 0.00 0.00 5.83 -1.00 0.00 -1.00 0.00 0.00
0.00 0.00 0.00 0.00 -0.18 0.00 -0.17 5.65 -1.00 0.00 -1.00 0.00
0.00 0.00 0.00 0.00 0.00 -0.18 0.00 -0.18 5.65 0.00 0.00 -1.00
0.00 0.00 0.00 0.00 0.00 0.00 -0.17 0.00 0.00 5.83 -1.00 0.00
完全 分解 た
0.00 0.00 0.00 0.00 0.00 0.00 0.00 -0.18 0.00 -0.17 5.65 -1.00
0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 -0.18 0.00 -0.18 5.65
6 00 1 00 0 00 1 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00完全LU分解したマトリクス[L][U]同時に表示
6.00 -1.00 0.00 -1.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
-0.17 5.83 -1.00 -0.17 -1.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
0.00 -0.17 5.83 -0.03 -0.17 -1.00 0.00 0.00 0.00 0.00 0.00 0.00
-0.17 -0.03 0.00 5.83 -1.03 0.00 -1.00 0.00 0.00 0.00 0.00 0.00
0 00 -0 17 -0 03 -0 18 5 64 -1 03 -0 18 -1 00 0 00 0 00 0 00 0 00[L][U]同時に表示[L]対角成分(=1)省略
(fill-inが生じている。もともと だ た成分が非
0.00 -0.17 -0.03 -0.18 5.64 -1.03 -0.18 -1.00 0.00 0.00 0.00 0.00
0.00 0.00 -0.17 0.00 -0.18 5.64 -0.03 -0.18 -1.00 0.00 0.00 0.00
0.00 0.00 0.00 -0.17 -0.03 -0.01 5.82 -1.03 -0.01 -1.00 0.00 0.00
0.00 0.00 0.00 0.00 -0.18 -0.03 -0.18 5.63 -1.03 -0.18 -1.00 0.00
0 00 0 00 0 00 0 00 0 00 -0 18 0 00 -0 18 5 63 -0 03 -0 18 -1 00
ともと0だった成分が非ゼロになっている)
0.00 0.00 0.00 0.00 0.00 0.18 0.00 0.18 5.63 0.03 0.18 1.00
0.00 0.00 0.00 0.00 0.00 0.00 -0.17 -0.03 -0.01 5.82 -1.03 -0.01
0.00 0.00 0.00 0.00 0.00 0.00 0.00 -0.18 -0.03 -0.18 5.63 -1.03
0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 -0.18 0.00 -0.18 5.63
67
解の比較:ちょっと違う解の比較:ちょっと違う
不完全LU分解0.92
1.75
2 76
6.00 -1.00 0.00 -1.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
-0.17 5.83 -1.00 0.00 -1.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
0 00 -0 17 5 83 0 00 0 00 -1 00 0 00 0 00 0 00 0 00 0 00 0 00 2.76
3.79
4.46
5.57
6.66
0.00 0.17 5.83 0.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00
-0.17 0.00 0.00 5.83 -1.00 0.00 -1.00 0.00 0.00 0.00 0.00 0.00
0.00 -0.17 0.00 -0.17 5.66 -1.00 0.00 -1.00 0.00 0.00 0.00 0.00
0.00 0.00 -0.17 0.00 -0.18 5.65 0.00 0.00 -1.00 0.00 0.00 0.00
0.00 0.00 0.00 -0.17 0.00 0.00 5.83 -1.00 0.00 -1.00 0.00 0.00
7.25
8.46
9.66
10.54
0.00 0.00 0.00 0.00 -0.18 0.00 -0.17 5.65 -1.00 0.00 -1.00 0.00
0.00 0.00 0.00 0.00 0.00 -0.18 0.00 -0.18 5.65 0.00 0.00 -1.00
0.00 0.00 0.00 0.00 0.00 0.00 -0.17 0.00 0.00 5.83 -1.00 0.00
0.00 0.00 0.00 0.00 0.00 0.00 0.00 -0.18 0.00 -0.17 5.65 -1.00
完全LU分解
11.83
1.00
0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 -0.18 0.00 -0.18 5.65
6.00 -1.00 0.00 -1.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
完全LU分解 2.00
3.00
4.00
5.00
6 00
-0.17 5.83 -1.00 -0.17 -1.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
0.00 -0.17 5.83 -0.03 -0.17 -1.00 0.00 0.00 0.00 0.00 0.00 0.00
-0.17 -0.03 0.00 5.83 -1.03 0.00 -1.00 0.00 0.00 0.00 0.00 0.00
0.00 -0.17 -0.03 -0.18 5.64 -1.03 -0.18 -1.00 0.00 0.00 0.00 0.00
0 00 0 00 0 17 0 00 0 18 5 64 0 03 0 18 1 00 0 00 0 00 0 00 6.00
7.00
8.00
9.00
10 00
0.00 0.00 -0.17 0.00 -0.18 5.64 -0.03 -0.18 -1.00 0.00 0.00 0.00
0.00 0.00 0.00 -0.17 -0.03 -0.01 5.82 -1.03 -0.01 -1.00 0.00 0.00
0.00 0.00 0.00 0.00 -0.18 -0.03 -0.18 5.63 -1.03 -0.18 -1.00 0.00
0.00 0.00 0.00 0.00 0.00 -0.18 0.00 -0.18 5.63 -0.03 -0.18 -1.00
0 00 0 00 0 00 0 00 0 00 0 00 -0 17 -0 03 -0 01 5 82 -1 03 -0 01 10.00
11.00
12.00
0.00 0.00 0.00 0.00 0.00 0.00 -0.17 -0.03 -0.01 5.82 -1.03 -0.01
0.00 0.00 0.00 0.00 0.00 0.00 0.00 -0.18 -0.03 -0.18 5.63 -1.03
0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 -0.18 0.00 -0.18 5.63
68
ILU(0) IC(0) 前処理ILU(0), IC(0) 前処理
を全く考慮 な 「 完全な 分解• Fill-inを全く考慮しない「不完全な」分解
– 記憶容量,計算量削減
• これを解くと「不完全な」解が得られるが,本来の解とそれほどずれているわけではない
– 問題に依存する
69
大規模線形ソルバーの動向
• 反復法がより広く使用されるようになりつつあるを超 る うな大規模並 直接法 並 性能が– 100コアを超えるような大規模並列システムでは直接法は並列性能が
出ない:逆にそれより小さければ直接法でもOKということになる。
密行列も反復法で解くような試みがなされている– 密行列も反復法で解くような試みがなされている。
• 密行列を使わないで済ませられるようなアルゴリズムの開発高速多重極展開( )– 高速多重極展開(Fast Multipole)
– 遠方からの効果をクラスタリング,あるいは無視
密行列– 密行列• メモリースケーラブルではない
前処理付き反復法(preconditioned iterative solvers)• 前処理付き反復法(preconditioned iterative solvers)– 安定した前処理の必要性
安定した前処理は概して「並列化」が困難– 安定した前処理は概して「並列化」が困難
• 詳しくはCE13で
70
次元熱伝導方程式と差分法• 一次元熱伝導方程式と差分法
• 連立一次方程式の解法
• 反復法について
共役勾配法(CG)法– 共役勾配法(CG)法
– 前処理について
• 共役勾配法を使用した一次元熱伝導解析プログ• 共役勾配法を使用した 次元熱伝導解析プログラムについて
71
再び一次元熱伝導方程式(1/3)再び一次元熱伝導方程式(1/3)支配方程式:熱伝導率=1(一様)
2
xxdxdxBF
dxd
max2
2
@0,0@0,0 =====+φφφ
xxBFxBF max2
21
+−=φ
一様体積発熱 BF
φ=0 断熱
以下のような離散化(要素中心で従属変数を定義)をしているので注意が必要以下のような離散化(要素中心で従属変数を定義)をしているので注意が必要
断熱となっているのはこの面,しかし温度は計算
φ=0
しかし温度は計算されない
72
一次元熱伝導方程式(2/3)一次元熱伝導方程式(2/3)解析解
断熱となって
xxBFxBF max2
21
+−=φ いるのはこの面,しかし温度は計算されない(X=X )。されない(X Xmax)。
T=0X=0X=0
Δx=1.d0,メッシュ数=50,とすると,Xmax=49.5,● 点 X座標は49 0となる BF 1 0d0とすると● 温度は
1225598505120049549491 2 +×+φ
●の点のX座標は49.0となる。BF=1.0d0とすると●での温度は:
12255.98505.1200495.49492
=+−=×+−=φ
73
一次元熱伝導方程式(3/3)連立一次方程式
• 差分法による離散化
11
11
2/12/12 2xxdx
ddxd
d iii
iiii
ii +−Δ−
−Δ
−⎟⎠⎞
⎜⎝⎛−⎟
⎠⎞
⎜⎝⎛
⎟⎟⎞
⎜⎜⎛ −+
−+
−+ φφφφφφφφφ
φ
• 各要素における線形方程式は以下のような形になる
2112/12/1
2 xxxx
xdxiiiii
i Δ=
ΔΔΔ=
Δ⎠⎝⎠⎝≈⎟⎟
⎠⎜⎜⎝
−+−+ φφφφ
各要素における線形方程式は以下のような形になる
– これを共役勾配法(Conjugate Gradient法)で解く
)1(0)(2 11 NiiBFiii ≤≤+−+ φφφ
02
2
=+ BFdxd φ
)1(0)(121
)1(0)(
11
211
NiiBF
NiiBFx
iii
iii
≤≤=++−
≤≤=+Δ
−+
φφφ
φφφ
11 )1()()()()( NiiBFiAiAiA iRiDiL ≤≤=×+×+× +− φφφ
)1(0)(12212 NiiBFxxx iii ≤≤+
Δ+
ΔΔ −+ φφφ
222
1)(,2)(,1)(x
iAx
iAx
iA RDL Δ=
Δ−=
Δ=
74
係数行列の格納形式係数行列の格納形式
AD1 AR1
1 2 3 4 5 6 7 81 AD1 AR1
1 2 3 4 5 6 7 81
各要素における線形方程式
11 )1()()()()( NiiBFiAiAiA iRiDiL ≤≤=×+×+× +φφφ
AD1 AR1
AL2 AD2 AR2
AL3 AD3 AR3
1
2
3
AD1 AR1
AL2 AD2 AR2
AL3 AD3 AR3
1
2
3
222
11
1)(,2)(,1)(
)1()()()()(
xiA
xiA
xiA
NiiBFiAiAiA
RDL
iRiDiL
Δ=
Δ−=
Δ=
≤≤++ +− φφφAL4 AD4 AR4
AL5 AD5 AR5
AL6 AD6 AR6
4
5
6
AL4 AD4 AR4
AL5 AD5 AR5
AL6 AD6 AR6
4
5
6
より 般的な形で格納すると
AL6 AD6 AR6
AL7 AD7 AR7
AL8 AD8
6
7
8
AL6 AD6 AR6
AL7 AD7 AR7
AL8 AD8
6
7
8
[ ] ),,1(),())(()()()()(
NiiRHSkITEMPHIkAMATiPHIiDIAGiINDEX
K==×+× ∑
より一般的な形で格納すると・・・
[ ] ),,1(),())(()()()(1)1(
NiiRHSkITEMPHIkAMATiPHIiDIAGiINDEXk
K+ ∑+−=
対角成分 非対角成分
75
N=8の場合:連立一次方程式自分とその周囲のみに非ゼロ成分:疎行列
1 2 3 4 5 6 7 8
AD(1) AR(1)
1 2 3 4 5 6 7 81
2 AL(2) AD(2) AR(2)
)1()2()1()1()1( BFAA RD =×+× φφφ(1)
φ(2)
BF(1)
BF(2) )2()3()2()2()2()1()2( BFAAA RDL =×+×+× φφφ
3
4
L( ) D( ) R( )
AL(3) AD(3) AR(3)
AL(4) AD(4) AR(4)
φ( )
φ(3)
φ(4)
BF(3)
BF(4)
RDL
)3()4()3()3()3()2()3( BFAAA RDL =×+×+× φφφ
)4()5()4()4()4()3()4( BFAAA RDL =×+×+× φφφ
5
6
L( ) D( ) R( )
AL(5) AD(5) AR(5)
AL(6) AD(6) AR(6)
φ( )
φ(5)
φ(6)
BF(5)
BF(6)
× =)()()()()()()( RDL φφφ
)5()6()5()5()5()4()5( BFAAA RDL =×+×+× φφφ
)6()7()6()6()6()5()6( BFAAA RDL =×+×+× φφφ
7
8
L( ) D( ) R( )
AL(7) AD(7) AR(7)
AL(8) AD(8)
φ( )
φ(7)
φ(8)
BF(7)
BF(8)
)()()()()()()( RDL φφφ
)7()8()7()7()7()6()7( BFAAA RDL =×+×+× φφφ
)8()8()8()7()8( BFAA DL =×+× φφL( ) D( ) φ( ) ( ) )()()()()( DL φφ
[ ] )1()())(()()()()(
NiiRHSkITEMPHIkAMATiPHIiDIAGiINDEX
+ ∑[ ] ),,1(),())(()()()(1)1(
NiiRHSkITEMPHIkAMATiPHIiDIAGiINDEXk
K==×+× ∑+−=
対角成分 非対角成分
76
密行列・疎行列
• 未知数:N個とすると
– 密行列:N2個の成分を記憶する必要あり
– 疎行列:非ゼロの部分だけ記憶すれば 一– 疎行列:非ゼロの部分だけ記憶すれば,次元問題の場合3N個の成分で済む
• N=106としたときの必要記憶容量
– 密行列
• 8×106×106=8×1012= 8TB– 疎行列(後掲のINDEX,ITEMも含む)
• 8×3×106+4×3×106= 36×106= 36MB• 8×3×10 +4×3×10 = 36×10 = 36MB
77
Compressed Row Storage (CRS)p g ( )一般的な形
⎤⎡ 000230042111 2 3 4 5 6 7 8
⎥⎥⎥⎤
⎢⎢⎢⎡
1.907.305.206.33.40002.3004.21.11
2
⎥⎥⎥
⎢⎢⎢
007.25.28.901.4001.305.107.5003
4
⎥⎥⎥⎥
⎢⎢⎢⎢
05.94.12005.60003.405.1104.105.91.35
6
⎥⎥⎥⎥
⎦⎢⎢⎢⎢
⎣ 351013069315901.131.234.1005.24.607
8 ⎥⎦⎢⎣ 3.5101.306.93.15.908
78
係数行列の格納形式(1/8)非ゼロ成分のみを格納,疎行列向け方法
Compressed Row Storage (CRS)Compressed Row Storage (CRS)
1 2 3 4 5 6 7 8)()( iPHIiDIAG +×AD(1) AR(1)1
2 AL(2) AD(2) AR(2)[ ]))(()(
)()()(
1)1(kITEMPHIkAMAT
iINDEX
iINDEXk=×∑
+−=
DIAG(i) 対角成分(実数 i=1 N)
3
4
AL(3) AD(3) AR(3)
AL(4) AD(4) AR(4)
),,1(),( NiiRHS K=
DIAG(i) 対角成分(実数,i=1,N)INDEX(i) 非対角成分数に関する一次元配列
(整数,i=0,N)ITEM(k) 非対角成分の要素(列)番号
5
6
AL(5) AD(5) AR(5)
AL(6) AD(6) AR(6)ITEM(k) 非対角成分の要素(列)番号
(整数,k=1, INDEX(N))AMAT(k) 非対角成分
(実数,k=1, INDEX(N))
7
8
AL(7) AD(7) AR(7)
AL(8) AD(8)実数 , ( )
79
Compressed Row Storage (CRS)p g ( )1
2 4 3 22 3 4 5 6 7 8
NODE tot= 81 11 2.4②
3.2⑤
4.3①
2.5④
3.7⑥
9.1⑧
2
NODE_tot= 8
対角成分D(1)= 1 1
1.1①
3.6②① ④ ⑥ ⑧
1.5⑤
3.1⑦
4 1 2 5 2 7
3
D(1)= 1.1D(2)= 3.6D(3)= 5.7D(4)= 9.8
②
5.7③
9 84.1②
2.5⑤
2.7⑥
3.1①
9.5②
10.4③
4.3⑦
4
5
D(4) 9.8 D(5)= 11.5 D(6)= 12.4D(7)= 23.1
9.8④
11.5⑤① ② ③ ⑦
6.5③
9.5⑦
6 4 2 5 1 4 13 1
6
( )D(8)= 51.3
⑤
12.4⑥
23 16.4②
2.5③
1.4⑥
13.1⑧
9.5②
1.3③
9.6④
3.1⑥
7
8
23.1⑦
51.3⑧② ③ ④ ⑥ ⑧
80
Compressed Row Storage (CRS)p g ( )1
2 4 3 22 3 4 5 6 7 8
1 11 2.4②
3.2⑤
4.3①
2.5④
3.7⑥
9.1⑧
2
1.1①
3.6② ① ④ ⑥ ⑧
1.5⑤
3.1⑦
4 1 2 5 2 7
3
②
5.7③
9 8 4.1②
2.5⑤
2.7⑥
3.1①
9.5②
10.4③
4.3⑦
4
5
9.8④
11.5⑤ ① ② ③ ⑦
6.5③
9.5⑦
6 4 2 5 1 4 13 1
6
⑤
12.4⑥
23 1 6.4②
2.5③
1.4⑥
13.1⑧
9.5②
1.3③
9.6④
3.1⑥
7
8
23.1⑦
51.3⑧ ② ③ ④ ⑥⑧
81
Compressed Row Storage (CRS)p g ( )
2 4 3 21 1
非対角成分数
index(0)= 0
1
2
2.4②
3.2⑤
4.3①
2.5④
3.7⑥
9.1⑧
1.1①
3.6②
2 index(1)= 2
4 index(2)= 6
3
① ④ ⑥ ⑧
1.5⑤
3.1⑦
4 1 2 5 2 7
②
5.7③
9 8
2 index(3)= 8
4
5
4.1②
2.5⑤
2.7⑥
3.1①
9.5②
10.4③
4.3⑦
9.8④
11.5⑤
3 index(4)= 11
4 index(5)= 15
6
① ② ③ ⑦
6.5③
9.5⑦
6 4 2 5 1 4 13 1
⑤
12.4⑥
23 1
( )
2 index(6)= 17
7
8
6.4②
2.5③
1.4⑥
13.1⑧
9.5②
1.3③
9.6④
3.1⑥
23.1⑦
51.3⑧
4 index(7)= 21
4 index(8)= 25 NPLU= 25② ③ ④ ⑥⑧
( )(=index(N))
index(i-1)+1~index(i)番目がi行目の非対角成分
82
Compressed Row Storage (CRS)p g ( )
2 4 3 21 1
非対角成分数
index(0)= 0
1
2
2.4②,1
3.2⑤,2
4.3① 3
2.5④ 4
3.7⑥ 5
9.1⑧ 6
1.1①
3.6②
2 index(1)= 2
4 index(2)= 6
3
①,3 ④,4 ⑥,5 ⑧,61.5⑤,7
3.1⑦,8
4 1 2 5 2 7
②
5.7③
9 8
2 index(3)= 8
4
5
4.1②,9
2.5⑤,10
2.7⑥,11
3.1① 12
9.5② 13
10.4③ 14
4.3⑦ 15
9.8④
11.5⑤
3 index(4)= 11
4 index(5)= 15
6
①,12 ②,13 ③,14 ⑦,156.5③,16
9.5⑦,17
6 4 2 5 1 4 13 1
⑤
12.4⑥
23 1
( )
2 index(6)= 17
7
8
6.4②,18
2.5③,19
1.4⑥,20
13.1⑧,21
9.5② 22
1.3③ 23
9.6④ 24
3.1⑥ 25
23.1⑦
51.3⑧
4 index(7)= 21
4 index(8)= 25 NPLU= 25②,22 ③,23 ④,24 ⑥,25⑧
( )(=index(N))
index(i-1)+1~index(i)番目がi行目の非対角成分
83
Compressed Row Storage (CRS)p g ( )
1 1 2 4 3 21
2
1.1①
3.6②
例:item( 7)= 5, AMAT( 7)= 1.5
2.4②,1
3.2⑤,2
4.3① 3
2.5④ 4
3.7⑥ 5
9.1⑧ 6
3
②
5.7③
9 8
item( 7) 5, AMAT( 7) 1.5item(19)= 3, AMAT(19)= 2.5
①,3 ④,4 ⑥,5 ⑧,61.5⑤,7
3.1⑦,8
4 1 2 5 2 74
5
9.8④
11.5⑤
4.1②,9
2.5⑤,10
2.7⑥,11
3.1① 12
9.5② 13
10.4③ 14
4.3⑦ 15
6
⑤
12.4⑥
23 1
①,12 ②,13 ③,14 ⑦,156.5③,16
9.5⑦,17
6 4 2 5 1 4 13 17
8
23.1⑦
51.3⑧
6.4②,18
2.5③,19
1.4⑥,20
13.1⑧,21
9.5② 22
1.3③ 23
9.6④ 24
3.1⑥ 25⑧ ②,22 ③,23 ④,24 ⑥,25
84
Compressed Row Storage (CRS)p g ( )
1 1 2 4 3 21
2
D (i) 対角成分(実数,i=1,N)index(i) 非対角成分数に関する一次元配列
(通し番号)(整数 i 0 N)
1.1①
3.6②
2.4②,1
3.2⑤,2
4.3① 3
2.5④ 4
3.7⑥ 5
9.1⑧ 6
3
(通し番号)(整数,i=0,N)item(k) 非対角成分の要素(列)番号
(整数,k=1, index(N))AMAT(k) 非対角成分
②
5.7③
9 8
①,3 ④,4 ⑥,5 ⑧,61.5⑤,7
3.1⑦,8
4 1 2 5 2 74
5 {Y}= [A]{X}
AMAT(k) 非対角成分(実数,k=1, index(N))
9.8④
11.5⑤
4.1②,9
2.5⑤,10
2.7⑥,11
3.1① 12
9.5② 13
10.4③ 14
4.3⑦ 15
6
{ } [ ]{ }
do i= 1, NY(i)= D(i)*X(i)d k i d (i 1) 1 i d (i)
⑤
12.4⑥
23 1
①,12 ②,13 ③,14 ⑦,156.5③,16
9.5⑦,17
6 4 2 5 1 4 13 17
8
do k= index(i-1)+1, index(i)Y(i)= Y(i) + AMAT(k)*X(item(k))
enddoenddo
23.1⑦
51.3⑧
6.4②,18
2.5③,19
1.4⑥,20
13.1⑧,21
9.5② 22
1.3③ 23
9.6④ 24
3.1⑥ 25 enddo⑧ ②,22 ③,23 ④,24 ⑥,25
85
行列ベクトル積:密行列⇒とても簡単行列 ク 積 密行列 簡単
⎥⎤
⎢⎡ − NN aaaa ,11,11211 ...
⎪⎫
⎪⎧
⎪⎫
⎪⎧ yx 11
⎥⎥⎥⎥
⎢⎢⎢⎢
− NN aaaa ,21,22221
.........⎪
⎪⎪⎪
⎬⎪
⎪⎪⎪
⎨=⎪
⎪⎪⎪
⎬⎪
⎪⎪⎪
⎨
yx 22
MM
⎥⎥⎥
⎦⎢⎢⎢
⎣ −
−−−−−
NNNNNN
NNNNNN
aaaaaaaa
,1,2,1,
,11,12,11,1
... ⎪⎪⎪
⎭⎪⎪⎪
⎩⎪⎪⎪
⎭⎪⎪⎪
⎩−−
N
N
N
N
yy
xx 11
{Y}= [A]{X}
do j= 1, NY(j)= 0.d0do i= 1 Ndo i= 1, N
Y(j)= Y(j) + A(i,j)*X(i)enddoddenddo
86
行列ベクトル積への適用行列 ク 積 適用非ゼロ成分のみを格納,疎行列向け方法
DIAG(i) 対角成分(実数 i 1 N) )()( iPHIiDIAG +×DIAG(i) 対角成分(実数,i=1,N)INDEX(i) 非対角成分数に関する一次元配列
(整数,i=0,N)ITEM(k) 非対角成分の要素(列)番号
[ ] ),,1(),())(()(
)()()(
1)1(
NiiRHSkITEMPHIkAMAT
iPHIiDIAGiINDEX
iINDEXk
K==×
+×
∑+−=
ITEM(k) 非対角成分の要素(列)番号(整数,k=1, INDEX(N))
AMAT(k) 非対角成分(実数 k=1, INDEX(N))
AD(1) AR(1)
1 2 3 4 5 6 7 81
2(実数,k 1, INDEX(N))
{Y}= [A]{X}
2
3
4
AL(2) AD(2) AR(2)
AL(3) AD(3) AR(3)
do i= 1, NY(i)= D(i)*X(i)do k= INDEX(i 1)+1 INDEX(i)
4
5
6
AL(4) AD(4) AR(4)
AL(5) AD(5) AR(5)
do k= INDEX(i-1)+1, INDEX(i)Y(i)= Y(i) + AMAT(k)*X(ITEM(k))
enddodd
6
7
AL(6) AD(6) AR(6)
AL(7) AD(7) AR(7)
enddo 8 AL(8) AD(8)
87
係数行列の格納形式(2/8)係数行列の格納形式(2/8)対角成分:DIAG
[ ]))(()(
)()()(
kITEMPHIkAMAT
iPHIiDIAGiINDEX
+×
∑ 11 AR(1)
2 3 4 5 6 7 8
2
[ ]
),,1(),(
))(()(1)1(
NiiRHS
kITEMPHIkAMATiINDEXk
K=
=×∑+−=
AD(1)
DIAG(i) 対角成分(実数,i=1,N)
DIAG(1)= A (1)
2
3
4
AL(2) AR(2)
AL(3) AR(3)
AD(2)
AD(3)
DIAG(1)= AD(1)DIAG(2)= AD(2)DIAG(3)= AD(3)
4
5
6
AL(4) AR(4)
AL(5) AR(5)AD(5)
AD(4)
…DIAG(8)= AD(8)
6
7
AL(6) AR(6)
AL(7) AR(7)
AD(6)
AD(7)
8 AL(8) AD(8)
88
係数行列の格納形式(3/8)係数行列の格納形式(3/8)INDEX, AMATの関係
AD1 11 2 3 4 5 6 7 8
1AD(1) AR(1)
1 2 3 4 5 6 7 81
2 AD2 3AD3
2
3
2
3
AL(2) AD(2) AR(2)
AD(3)AL(3) AR(3) 4 56 AD4 7
8 AD5 94
5
4
5
AL(4) AD(4) AR(4)
AL(5) AD(5) AR(5)
10 AD6 1112 AD7 13
6
7
6
7
AL(6) AD(6) AR(6)
AL(7) AD(7) AR(7)
14 AD888 AL(8) AD(8)
INDEX(2)=3, INDEX(3)=5( ) 3, (3) 5ITEM(4)=2, AMAT(4)= AL(3)ITEM(5)=4, AMAT(5)= AR(3)
89
係数行列の格納形式(3/8)係数行列の格納形式(3/8)INDEX, AMATの関係
AD1 11 2 3 4 5 6 7 8
1AD(1) AR(1)
1 2 3 4 5 6 7 81
2 AD2 3AD3
2
3
2
3
AL(2) AD(2) AR(2)
AD(3)AL(3) AR(3) 4 56 AD4 7
8 AD5 94
5
4
5
AL(4) AD(4) AR(4)
AL(5) AD(5) AR(5)
10 AD6 1112 AD7 13
6
7
6
7
AL(6) AD(6) AR(6)
AL(7) AD(7) AR(7)
14 AD888 AL(8) AD(8)
INDEX(2)=3, INDEX(3)=5( ) 3, (3) 5ITEM(4)=2, AMAT(4)= AL(3)ITEM(5)=4, AMAT(5)= AR(3)
90
係数行列の格納形式(4/8)係数行列の格納形式(4/8)非対角成分: i=1
1 2 3 4 5 6 7 8[ ]))(()(
)()()(
kITEMPHIkAMAT
iPHIiDIAGiINDEX
=×
+×
∑AD1
2 AD2 3
1 2 3 4 5 6 7 81
21
[ ]
),,1(),(
))(()(1)1(
NiiRHS
kITEMPHIkAMATiINDEXk
K=
=×∑+−=
INDEX(i) 非対角成分数に関する一次元配列(整数,i=0,N)
ITEM(k) 非対角成分の要素(列)番号
2 34 AD3 5
6 AD4 73
4(整数,k=1, INDEX(N))
AMAT(k) 非対角成分(実数,k=1, INDEX(N))
6 AD4 78 AD5 9
10 AD6 115
6
INDEX(0)=0INDEX(1)=1
(1) 2 (1) (1)
10 AD6 1112 AD7 13
14 AD8
6
7
8ITEM(1)=2, AMAT(1)= AR(1)
14 AD88
91
係数行列の格納形式(5/8)係数行列の格納形式(5/8)非対角成分:i=2
1 2 3 4 5 6 7 8[ ]))(()(
)()()(
kITEMPHIkAMAT
iPHIiDIAGiINDEX
=×
+×
∑AD1 1
AD2
1 2 3 4 5 6 7 81
2 2 3
[ ]
),,1(),(
))(()(1)1(
NiiRHS
kITEMPHIkAMATiINDEXk
K=
=×∑+−=
INDEX(i) 非対角成分数に関する一次元配列(整数,i=0,N)
ITEM(k) 非対角成分の要素(列)番号
4 AD3 56 AD4 7
3
4
2 3
(整数,k=1, INDEX(N))AMAT(k) 非対角成分
(実数,k=1, INDEX(N))
6 AD4 78 AD5 9
10 AD6 115
6
INDEX(1)=1INDEX(2)=3
(2) 1 (2) (2)
10 AD6 1112 AD7 13
14 AD8
6
7
8ITEM(2)=1, AMAT(2)= AL(2)ITEM(3)=3, AMAT(3)= AR(2)
14 AD88
92
係数行列の格納形式(6/8)係数行列の格納形式(6/8)非対角成分:i=3
1 2 3 4 5 6 7 8[ ]))(()(
)()()(
kITEMPHIkAMAT
iPHIiDIAGiINDEX
=×
+×
∑AD1 12 AD2 3
1 2 3 4 5 6 7 81
2
[ ]
),,1(),(
))(()(1)1(
NiiRHS
kITEMPHIkAMATiINDEXk
K=
=×∑+−=
INDEX(i) 非対角成分数に関する一次元配列(整数,i=0,N)
ITEM(k) 非対角成分の要素(列)番号
2 3AD3
6 AD4 73
44 5
(整数,k=1, INDEX(N))AMAT(k) 非対角成分
(実数,k=1, INDEX(N))
6 AD4 78 AD5 9
10 AD6 115
6
INDEX(2)=3INDEX(3)=5
( ) 2 ( ) (3)
10 AD6 1112 AD7 13
14 AD8
6
7
8ITEM(4)=2, AMAT(4)= AL(3)ITEM(5)=4, AMAT(5)= AR(3)
14 AD88
93
係数行列の格納形式(7/8)係数行列の格納形式(7/8)非対角成分:i=7
1 2 3 4 5 6 7 8[ ]))(()(
)()()(
kITEMPHIkAMAT
iPHIiDIAGiINDEX
=×
+×
∑AD1 12 AD2 3
1 2 3 4 5 6 7 81
2
[ ]
),,1(),(
))(()(1)1(
NiiRHS
kITEMPHIkAMATiINDEXk
K=
=×∑+−=
INDEX(i) 非対角成分数に関する一次元配列(整数,i=0,N)
ITEM(k) 非対角成分の要素(列)番号
2 34 AD3 5
6 AD4 73
4(整数,k=1, INDEX(N))
AMAT(k) 非対角成分(実数,k=1, INDEX(N))
6 AD4 78 AD5 9
10 AD6 115
6
INDEX(6)=11INDEX(7)=13
(12) 6 (12) ( )
10 AD6 11AD7
14 AD8
6
7
812 13
ITEM(12)=6, AMAT(12)= AL(7)ITEM(13)=8, AMAT(13)= AR(7)
14 AD88
94
係数行列の格納形式(8/8)係数行列の格納形式(8/8)非対角成分:i=8
1 2 3 4 5 6 7 8[ ]))(()(
)()()(
kITEMPHIkAMAT
iPHIiDIAGiINDEX
=×
+×
∑AD1 12 AD2 3
1 2 3 4 5 6 7 81
2
[ ]
),,1(),(
))(()(1)1(
NiiRHS
kITEMPHIkAMATiINDEXk
K=
=×∑+−=
INDEX(i) 非対角成分数に関する一次元配列(整数,i=0,N)
ITEM(k) 非対角成分の要素(列)番号
2 34 AD3 5
6 AD4 73
4(整数,k=1, INDEX(N))
AMAT(k) 非対角成分(実数,k=1, INDEX(N))
6 AD4 78 AD5 9
10 AD6 115
6
INDEX(7)=13INDEX(8)=14
(1 ) (1 ) (8)
10 AD6 1112 AD7 13
AD8
6
7
8 14ITEM(14)=7, AMAT(14)= AL(8)AD88 14
95
プログラムのコンパイル 実行法プログラムのコンパイル,実行法
• プログラムのありか
$ cd <$E-EPS>/intro$ ls heat_cg.f
$ cd <$E-EPS>/intro$ ls heat_cg.c
• コンパイル,実行法,実行法
$ cd <$E-EPS>/intro$ g95 heat_cg.f –o cg
$ cd <$E-09S>/intro$ cc heat_cg.c –o cg
input.dat
$ ./cg $ ./cg
input.dat100 N メッシュ数1.d0 1.d0 dx, BF メッシュ幅,体積発熱量5000 ITERmax 最大反復回数最大反復回数1.e-7 EPS 打切誤差
96
CG法による一次元熱伝導方程式CG法による 次元熱伝導方程式計算プログラム
• 前処理付き共役勾配法
Preconditioned Conjugate
Compute r(0)= b-[A]x(0)
for i= 1, 2, …solve [M]z(i-1)= r(i-1)– Preconditioned Conjugate
Gradient Method– 対称正定行列用
solve [M]z(i 1)= r(i 1)
ρi-1= r(i-1) z(i-1)if i=1p(1)= z(0)対称正定行列用
• 対角スケーリング(Diagonal Scaling)
p zelse
βi-1= ρi-1/ρi-2p(i)= z(i-1) + βi 1 p(i-1)Scaling)
– [A]の対角成分のみからなる行列を前処理行列[M]とする
p z βi-1 pendifq(i)= [A]p(i)
αi = ρi-1/p(i)q(i)前処理行列[M]とする。
– 簡単(な問題にしか適用できない)。
点ヤコビ(Point Jacobi)前処理とも
i ρi 1 p qx(i)= x(i-1) + αip(i)
r(i)= r(i-1) - αiq(i)
check convergence |r|– 点ヤコビ(Point Jacobi)前処理とも呼ばれる。
end
97
対角スケーリング 点ヤコビ前処理対角スケ リング,点ヤコビ前処理
• 前処理行列として もとの行列の対角成分のみを取り出した• 前処理行列として,もとの行列の対角成分のみを取り出した行列を前処理行列 [M] とする。
対角スケーリング 点ヤコビ(point Jacobi)前処理– 対角スケーリング,点ヤコビ(point-Jacobi)前処理
⎥⎤
⎢⎡D 00...01
[ ]⎥⎥⎥⎥
⎢⎢⎢⎢
=D
M .........000 2
[ ]
⎥⎥⎥
⎦⎢⎢⎢
⎣−
N
N
DD
0...00000 1
⎦⎣ ND0...00
• solve [M]z(i-1)= r(i-1)という場合に逆行列を簡単に求
めることができる。
98
CG法による一次元熱伝導方程式プログラム概要(1/7)
!C!C 1D Poisson Equation Solver by!C CG (Conjugate Gradient) Method!C!C d/dx(dPHI/dx) + BF = 0!C PHI=0@x=0
input.datN メッシュ数dx BF メッシュ幅 体積発熱量!C 0@ 0
!Cprogram CG_poiimplicit REAL*8 (A-H,O-Z)
integer :: N ITERmax
dx, BF メッシュ幅,体積発熱量ITERmax 最大反復回数EPS 打切誤差
integer :: N, ITERmaxinteger :: R, Z, P, Q, DD
real(kind=8) :: dx, OMEGA, RESID, dPHI, dPHImax, BF, EPSreal(kind=8), dimension(:), allocatable :: PHI, RHS
l(ki d 8) di i ( ) ll t bl DIAG AMATreal(kind=8), dimension(: ), allocatable :: DIAG, AMATreal(kind=8), dimension(:,:), allocatable :: W
integer, dimension(: ), allocatable :: INDEX, ITEM
!C!C-- INIT.
open (11, file='input.dat', status='unknown')read (11,*) Nread (11,*) dX, BFread (11, ) dX, BFread (11,*) ITERmaxread (11,*) EPSclose (11)
99
CG法による一次元熱伝導方程式CG法による 次元熱伝導方程式プログラム概要(2/7)
1 2 3 4 5 6 7 81 2 3 4 5 6 7 8
allocate (PHI(N), DIAG(N), AMAT(2*N-2), RHS(N))allocate (INDEX(0:N), ITEM(2*N-2), W(N,4))PHI= 0.d0AMAT= 1.d0/dX
AD(1) AR(1)
1 2 3 4 5 6 7 81
2
3
AL(2) AD(2) AR(2)
AL(3) AD(3) AR(3)
AD(1) AR(1)
1 2 3 4 5 6 7 81
2
3
AL(2) AD(2) AR(2)AL(2) AD(2) AR(2)
AL(3) AD(3) AR(3)AL(3) AD(3) AR(3)DIAG= -2.d0/dXRHS= -BF * dX 4
5
6
AL(3) AD(3) AR(3)
AL(4) AD(4) AR(4)
AL(5) AD(5) AR(5)
AL(6) AD(6) AR(6)
4
5
6
AL(3) AD(3) AR(3)AL(3) AD(3) AR(3)
AL(4) AD(4) AR(4)AL(4) AD(4) AR(4)
AL(5) AD(5) AR(5)AL(5) AD(5) AR(5)
AL(6) AD(6) AR(6)AL(6) AD(6) AR(6)
max2
2
@0,0@0,0 xxdxdxBF
dxd
=====+φφφ
6
7
8
AL(6) AD(6) AR(6)
AL(7) AD(7) AR(7)
AL(8) AD(8)
6
7
8
AL(6) AD(6) AR(6)AL(6) AD(6) AR(6)
AL(7) AD(7) AR(7)AL(7) AD(7) AR(7)
AL(8) AD(8)
dxdx
022
11 =×+×⎟⎠⎞
⎜⎝⎛
Δ+− −+ VBFV
xiii φφφ
⎠⎝ Δx非対角成分の数は「2」ただし,i=1,i=Nのときは 「1」ただし,i 1,i Nのときは 1」
したがって,非対角成分の総数は「2*N-2」
100
CG法による一次元熱伝導方程式CG法による 次元熱伝導方程式プログラム概要(2/7)
1 2 3 4 5 6 7 81 2 3 4 5 6 7 8
allocate (PHI(N), DIAG(N), AMAT(2*N-2), RHS(N))allocate (INDEX(0:N), ITEM(2*N-2), W(N,4))PHI= 0.d0AMAT= 1.d0/dX
AD(1) AR(1)
1 2 3 4 5 6 7 81
2
3
AL(2) AD(2) AR(2)
AL(3) AD(3) AR(3)
AD(1) AR(1)
1 2 3 4 5 6 7 81
2
3
AL(2) AD(2) AR(2)AL(2) AD(2) AR(2)
AL(3) AD(3) AR(3)AL(3) AD(3) AR(3)DIAG= -2.d0/dXRHS= -BF * dX 4
5
6
AL(3) AD(3) AR(3)
AL(4) AD(4) AR(4)
AL(5) AD(5) AR(5)
AL(6) AD(6) AR(6)
4
5
6
AL(3) AD(3) AR(3)AL(3) AD(3) AR(3)
AL(4) AD(4) AR(4)AL(4) AD(4) AR(4)
AL(5) AD(5) AR(5)AL(5) AD(5) AR(5)
AL(6) AD(6) AR(6)AL(6) AD(6) AR(6)
022
11 =×+×⎟⎠⎞
⎜⎝⎛
Δ+− −+ VBFV
xiii φφφ
6
7
8
AL(6) AD(6) AR(6)
AL(7) AD(7) AR(7)
AL(8) AD(8)
6
7
8
AL(6) AD(6) AR(6)AL(6) AD(6) AR(6)
AL(7) AD(7) AR(7)AL(7) AD(7) AR(7)
AL(8) AD(8)
022
11 =Δ×+Δ×⎟⎠⎞
⎜⎝⎛
Δ+−
⎠⎝
−+ xBFxx
iii φφφ⎠⎝ Δx
非対角成分の数は「2」ただし,i=1,i=Nのときは 「1」ただし,i 1,i Nのときは 1」
したがって,非対角成分の総数は「2*N-2」
101
CG法による一次元熱伝導方程式CG法による 次元熱伝導方程式プログラム概要(2/7)
1 2 3 4 5 6 7 81 2 3 4 5 6 7 8
allocate (PHI(N), DIAG(N), AMAT(2*N-2), RHS(N))allocate (INDEX(0:N), ITEM(2*N-2), W(N,4))PHI= 0.d0AMAT= 1.d0/dX
AD(1) AR(1)
1 2 3 4 5 6 7 81
2
3
AL(2) AD(2) AR(2)
AL(3) AD(3) AR(3)
AD(1) AR(1)
1 2 3 4 5 6 7 81
2
3
AL(2) AD(2) AR(2)AL(2) AD(2) AR(2)
AL(3) AD(3) AR(3)AL(3) AD(3) AR(3)DIAG= -2.d0/dXRHS= -BF * dX
⎞⎛
4
5
6
AL(3) AD(3) AR(3)
AL(4) AD(4) AR(4)
AL(5) AD(5) AR(5)
AL(6) AD(6) AR(6)
4
5
6
AL(3) AD(3) AR(3)AL(3) AD(3) AR(3)
AL(4) AD(4) AR(4)AL(4) AD(4) AR(4)
AL(5) AD(5) AR(5)AL(5) AD(5) AR(5)
AL(6) AD(6) AR(6)AL(6) AD(6) AR(6)
xBFxx
iii =Δ×+Δ×⎟⎠⎞
⎜⎝⎛
Δ+− −+
211 02 φφφ
6
7
8
AL(6) AD(6) AR(6)
AL(7) AD(7) AR(7)
AL(8) AD(8)
6
7
8
AL(6) AD(6) AR(6)AL(6) AD(6) AR(6)
AL(7) AD(7) AR(7)AL(7) AD(7) AR(7)
AL(8) AD(8)
xBFxxxx iii
iii Δ×−=⎟⎠⎞
⎜⎝⎛
Δ+⎟
⎠⎞
⎜⎝⎛
Δ−⎟
⎠⎞
⎜⎝⎛
Δ=
Δ+−
+−−+
1111 1212 φφφφφφ
A (i) S(i)A (i) (i)AL(i) RHS(i)非対角成分の数は「2」ただし,i=1,i=Nのときは 「1」
AD(i) AR(i)
ただし,i 1,i Nのときは 1」
したがって,非対角成分の総数は「2*N-2」
102
CG法による一次元熱伝導方程式プログラム概要(3/7)プログラム概要(3/7)
INDEX= 2!C!C-- CONNECTIVITY 1 2 3 4 5 6 7 81 2 3 4 5 6 7 8!C-- CONNECTIVITY
INDEX(0)= 0INDEX(1)= 1INDEX(N)= 1
d i 1 N
AD(1) AR(1)
1 2 3 4 5 6 7 81
2
3
AL(2) AD(2) AR(2)
AL(3) AD(3) AR(3)
AD(1) AR(1)
1 2 3 4 5 6 7 81
2
3
AL(2) AD(2) AR(2)AL(2) AD(2) AR(2)
AL(3) AD(3) AR(3)AL(3) AD(3) AR(3)do i= 1, NINDEX(i)= INDEX(i) + INDEX(i-1)
enddo
do i= 1, N 非対角成分の数は「2」
4
5
6
AL(3) AD(3) AR(3)
AL(4) AD(4) AR(4)
AL(5) AD(5) AR(5)
AL(6) AD(6) AR(6)
4
5
6
AL(3) AD(3) AR(3)AL(3) AD(3) AR(3)
AL(4) AD(4) AR(4)AL(4) AD(4) AR(4)
AL(5) AD(5) AR(5)AL(5) AD(5) AR(5)
AL(6) AD(6) AR(6)AL(6) AD(6) AR(6)jS= INDEX(i-1)if (i.eq.1) thenITEM(jS+1)= i+1AMAT(jS+1)= 0.d0DIAG(i )= 1.d0
非対角成分の数は「2」ただし,i=1,i=Nのときは 「1」
このルールに従って「INDEX」
6
7
8
AL(6) AD(6) AR(6)
AL(7) AD(7) AR(7)
AL(8) AD(8)
6
7
8
AL(6) AD(6) AR(6)AL(6) AD(6) AR(6)
AL(7) AD(7) AR(7)AL(7) AD(7) AR(7)
AL(8) AD(8)
DIAG(i ) 1.d0RHS(i )= 0.d0
else if && (i.eq.N) then
ITEM(jS+1)= i-1DIAG(i )= 1 d0/dX
このル ルに従って INDEX」生成
DIAG(i )= -1.d0/dXelseITEM(jS+1)= i-1ITEM(jS+2)= i+1if (i-1.eq.1) then
AMAT(jS+1)= 0.d0endif
endifenddo
103
CG法による一次元熱伝導方程式プログラム概要(3/7)プログラム概要(3/7)
INDEX= 2!C!C-- CONNECTIVITY AD1 1
1 2 3 4 5 6 7 81!C-- CONNECTIVITY
INDEX(0)= 0INDEX(1)= 1INDEX(N)= 1
d i 1 N
AD1 12 AD2 3
4 AD3 56 AD4 7
1
2
3
4do i= 1, NINDEX(i)= INDEX(i) + INDEX(i-1)
enddo
do i= 1, N
6 AD4 78 AD5 9
10 AD6 1112 AD7 13
4
5
6
7jS= INDEX(i-1)if (i.eq.1) thenITEM(jS+1)= i+1AMAT(jS+1)= 0.d0DIAG(i )= 1.d0 INDEX(0)=0
12 AD7 1314 AD8
7
8
DIAG(i ) 1.d0RHS(i )= 0.d0
else if && (i.eq.N) then
ITEM(jS+1)= i-1DIAG(i )= 1 d0/dX
INDEX(1)=1ITEM(1)=2, AMAT(1)= AR1
INDEX(2)=3ITEM(2)=1, AMAT(2)= AL2ITEM(3)=3, AMAT(3)= AR3
DIAG(i )= -1.d0/dXelseITEM(jS+1)= i-1ITEM(jS+2)= i+1if (i-1.eq.1) then
( 1) 0 0
INDEX(3)=5ITEM(4)=2, AMAT(4)= AL3ITEM(5)=4, AMAT(5)= AR3
…INDEX(N-1)= 2*N-3
AMAT(jS+1)= 0.d0endif
endifenddo
ITEM(2*N-4)= N-2, AMAT(2*N-4)= AL(N-1)ITEM(2*N-3)= N , AMAT(2*N-3)= AR(N-1)
INDEX(N) = 2*N-2ITEM(2*N-2)= N-1, AMAT(N*N-2)= AL(N)
104
CG法による一次元熱伝導方程式プログラム概要(3/7)プログラム概要(3/7)
INDEX= 2!C!C-- CONNECTIVITY 1 2 3 4 5 6 7 81 2 3 4 5 6 7 8!C-- CONNECTIVITY
INDEX(0)= 0INDEX(1)= 1INDEX(N)= 1
d i 1 N
AD(1) AR(1)
1 2 3 4 5 6 7 81
2
3
AL(2) AD(2) AR(2)
AL(3) AD(3) AR(3)
AD(1) AR(1)
1 2 3 4 5 6 7 81
2
3
AL(2) AD(2) AR(2)AL(2) AD(2) AR(2)
AL(3) AD(3) AR(3)AL(3) AD(3) AR(3)do i= 1, NINDEX(i)= INDEX(i) + INDEX(i-1)
enddo
do i= 1, N
4
5
6
AL(3) AD(3) AR(3)
AL(4) AD(4) AR(4)
AL(5) AD(5) AR(5)
AL(6) AD(6) AR(6)
4
5
6
AL(3) AD(3) AR(3)AL(3) AD(3) AR(3)
AL(4) AD(4) AR(4)AL(4) AD(4) AR(4)
AL(5) AD(5) AR(5)AL(5) AD(5) AR(5)
AL(6) AD(6) AR(6)AL(6) AD(6) AR(6)jS= INDEX(i-1)if (i.eq.1) thenITEM(jS+1)= i+1AMAT(jS+1)= 0.d0DIAG(i )= 1.d0 境界条件(i=1):後述
6
7
8
AL(6) AD(6) AR(6)
AL(7) AD(7) AR(7)
AL(8) AD(8)
6
7
8
AL(6) AD(6) AR(6)AL(6) AD(6) AR(6)
AL(7) AD(7) AR(7)AL(7) AD(7) AR(7)
AL(8) AD(8)
DIAG(i ) 1.d0RHS(i )= 0.d0
else if && (i.eq.N) then
ITEM(jS+1)= i-1DIAG(i )= 1 d0/dX 境界条件(i=N)DIAG(i )= -1.d0/dXelseITEM(jS+1)= i-1ITEM(jS+2)= i+1if (i-1.eq.1) then
( 1) 0 0
界条件
それ以外
AMAT(jS+1)= 0.d0endif
endifenddo
105
CG法による一次元熱伝導方程式プログラム概要(3/7)プログラム概要(3/7)
INDEX= 2!C!C-- CONNECTIVITY AD(1) AR(1)
1 2 3 4 5 6 7 81 AD(1) AR(1)
1 2 3 4 5 6 7 81!C-- CONNECTIVITY
INDEX(0)= 0INDEX(1)= 1INDEX(N)= 1
d i 1 N
D( ) R( )
2
3
4
AL(2) AD(2) AR(2)
AL(3) AD(3) AR(3)
AL(4) AD(4) AR(4)
D( ) R( )
2
3
4
AL(2) AD(2) AR(2)AL(2) AD(2) AR(2)
AL(3) AD(3) AR(3)AL(3) AD(3) AR(3)
AL(4) AD(4) AR(4)AL(4) AD(4) AR(4)do i= 1, NINDEX(i)= INDEX(i) + INDEX(i-1)
enddo
do i= 1, N
5
6
7
AL(4) AD(4) AR(4)
AL(5) AD(5) AR(5)
AL(6) AD(6) AR(6)
AL(7) AD(7) AR(7)
5
6
7
AL(4) AD(4) AR(4)AL(4) AD(4) AR(4)
AL(5) AD(5) AR(5)AL(5) AD(5) AR(5)
AL(6) AD(6) AR(6)AL(6) AD(6) AR(6)
AL(7) AD(7) AR(7)AL(7) AD(7) AR(7)jS= INDEX(i-1)if (i.eq.1) thenITEM(jS+1)= i+1AMAT(jS+1)= 0.d0DIAG(i )= 1.d0 境界条件(i=1):後述
7
8
AL(7) AD(7) AR(7)
AL(8) AD(8)
7
8
AL(7) AD(7) AR(7)AL(7) AD(7) AR(7)
AL(8) AD(8)
DIAG(i ) 1.d0RHS(i )= 0.d0
else if && (i.eq.N) then
ITEM(jS+1)= i-1DIAG(i )= 1 d0/dX 境界条件(i=N)DIAG(i )= -1.d0/dXelseITEM(jS+1)= i-1ITEM(jS+2)= i+1if (i-1.eq.1) then
( 1) 0 0
それ以外
固定境界条件が指定されている点を
界条件
AMAT(jS+1)= 0.d0endif
endifenddo
固定境界条件が指定されている点を非対角成分として持っている場合非対角成分をゼロクリアする。
106
境界条件の処理:i=N境界条件の処理i = NjS= INDEX(i-1)
ITEM(jS+1)= i-1AMAT(jS+1)= +1.d0/dx デフォルト値DIAG(i )= -1.d0/dX
xxx
dxd NN =
Δ−
⇒== +1max 0@0 φφφ
xBFxx
NNN =Δ×+Δ×⎟⎠⎞
⎜⎝⎛
Δ+− −+
211 02 φφφ
i=N i=N+1
xBFxx
NN =Δ×+Δ×⎟⎠⎞
⎜⎝⎛
Δ+−
⇒
⎠⎝
−2
1 0φφ 境界面で断熱条件が成立するためには,φN+1=φNを
( ) xBFxx
x
NNN Δ×−=⎟⎠⎞
⎜⎝⎛
Δ+⎟
⎠⎞
⎜⎝⎛
Δ−
+⇒
⎠⎝ Δ
−+ 11110 φφφ
満たすような仮想的な要素があると都合が良い
xx ⎠⎝ Δ⎠⎝ ΔDIAG(i) AMAT(jS+1) RHS
107
境界条件の処理:i=1 (1/4)境界条件の処理:i=1 (1/4)ITEM(jS+1)= i+1AMAT(jS+1)= 0.d0AMAT(jS+1) 0.d0DIAG(i )= 1.d0RHS (i )= 0.d0
1 0
1 2 3 4 5 6 7 81
00@0 1 =⇒== φφ x a -2a a
a -2a a
2
3
( ) ( ) ( ) 0010 012 =++⇒ φφφDIAG RHS
a -2a a
a -2a a
4
5
a -2a a
a -2a a
6
7• これでは係数行列が対称となa -a8らないため共役勾配法が使え
ない。a =
1x
aΔ
=
108
境界条件の処理:i=1(2/4)境界条件の処理:i=1(2/4)ITEM(jS+1)= i+1AMAT(jS+1)= 0.d0AMAT(jS+1) 0.d0DIAG(i )= 1.d0RHS (i )= 0.d0
1 0
1 2 3 4 5 6 7 81
00@0 1 =⇒== φφ x -2a a
a -2a a
2
3
a
( ) ( ) ( ) 0010 012 =++⇒ φφφDIAG RHS
a -2a a
a -2a a
4
5
a -2a a
a -2a a
6
7• これでは係数行列が対称となa -a8らないため共役勾配法が使え
ない。a =
1x
aΔ
=
109
境界条件の処理:i=1(3/4)境界条件の処理:i=1(3/4)• i=2における方程式
( ) ( ) ( ) 2123 2 RHSaaa =+−+ φφφ 1 0
1 2 3 4 5 6 7 81
i 2における方程式
a -2a a
a -2a a
2
3• ここでφ1は既知の値 1φ
a -2a a
a -2a a
4
5
a -2a a
a -2a a
6
7
a -a8
a =1x
aΔ
=
110
境界条件の処理:i=1(4/4)境界条件の処理:i=1(4/4)• i=2における方程式
( ) ( ) ( ) 2123 2 RHSaaa =+−+ φφφ 1 0
1 2 3 4 5 6 7 81
i 2における方程式
-2a a
a -2a a
2
3
( ) ( ) ( ) ( )φφφφ
• ここでφ1は既知の値 1φ0
a -2a a
a -2a a
4
5
( ) ( ) ( ) ( ) 12123 02 φφφφ aRHSaa −=+−+
このケ スの場合は であ0φ a -2a a
a -2a a
6
7
• このケースの場合は, であるため,右辺(RHS)の修正は不要である
01 =φ
a -a8
a =1
不要である。
xa
Δ=
111
固定境界条件の処理:消去固定境界条件の処理:消去i=kkの点でPHIxの値に固定されている場合
do i= 1, Nif (i.eq.kk) thenDIAG(i)= 1.d0RHS (i)= PHIxdo j= INDEX(i-1)+1, INDEX(i)
AMAT(j)= 0.d0enddo ゼロクリアenddo
endifendif
do i= 1, Nif (i ne kk) thenif (i.ne.kk) thendo j= INDEX(i-1)+1, INDEX(i)
jj= ITEM(j)if (jj.eq.kk) thenRHS (i)= RHS(i) - AMAT(j)*PHIx
(j) 0 d0AMAT(j)= 0.d0endif
enddoenddo
enddo
112
固定境界条件の処理:消去固定境界条件の処理:消去i=kkの点でPHIxの値に固定されている場合
ゼロクリアdo i= 1, Nif (i.eq.kk) thenDIAG(i)= 1.d0RHS (i)= PHIxdo j= INDEX(i-1)+1, INDEX(i)
AMAT(j)= 0.d0enddoenddo
endifendif
do i= 1, Nif (i ne kk) then
今回の問題ではPHIX(jj)に相当
if (i.ne.kk) thendo j= INDEX(i-1)+1, INDEX(i)
jj= ITEM(j)if (jj.eq.kk) thenRHS (i)= RHS(i) - AMAT(j)*PHIxAMAT(j) 0 d0 今回の問題ではPHIX(jj)に相当
するものが0だったのでこの右辺の処理は不要であった。
AMAT(j)= 0.d0endif
enddoenddo
enddo
113
固定境界条件の処理:具体例固定境界条件の処理 具体例
2 3 4 5 6 7 81
iφφ ~=点「i」で固定境界条件を適用しているものとする
i1
2 3 4 5 6 7 81
2
i
k
i
k 3
4
5
6
77
8i=4, k=2 とすると
RHSAMATAMATDIAG ++ φφφ
474754524244
262642422
RHSAMATAMATAMATDIAGRHSAMATAMATDIAG
=+++=++
φφφφφφφ
114
固定境界条件の処理:具体例固定境界条件の処理 具体例
2 3 4 5 6 7 81
iφφ ~=点「i」で固定境界条件を適用しているものとする
i1
2 3 4 5 6 7 81
2
i
k
i
k 3
4
5
6
77
8i=4, k=2 とすると
RHSAMATAMATDIAG ++ φφφ
~474754524244
262642422
RHSAMATAMATAMATDIAGRHSAMATAMATDIAG
=+++=++
φφφφφφφ
44
424262622~
~
φφ
φφφ
=
−=+ AMATRHSAMADIAG
115
CG法による一次元熱伝導方程式プ グ 概プログラム概要(4/7)
!C!C +---------------+!C | CG iterations |!C +---------------+!C===
R = 1Z = 2Z = 2Q = 2P = 3DD= 4
d i 1 N 対角成分の逆数(前処理用)do i= 1, NW(i,DD)= 1.0D0 / DIAG(i)
enddo!C!C-- {r0}= {b} - [A]{xini} |
対角成分の逆数(前処理用)その都度,除算をすると効率が悪いため,予め配列に格納
do i= 1, NW(i,R) = DIAG(i)*PHI(i)do j= INDEX(i-1)+1, INDEX(i)W(i,R) = W(i,R) + AMAT(j)*PHI(ITEM(j))W(i,R) W(i,R) AMAT(j) PHI(ITEM(j))
enddoenddo
BNRM2= 0.0D0do i= 1 Ndo i= 1, NBNRM2 = BNRM2 + RHS(i) **2W(i,R)= RHS(i) - W(i,R)
enddo!C********************************************************************
116
CG法による一次元熱伝導方程式プ グ 概プログラム概要(4/7)
!C!C +---------------+
0 0!C | CG iterations |!C +---------------+!C===
R = 1Z = 2
Compute r(0)= b-[A]x(0)
for i= 1, 2, …solve [M]z(i-1)= r(i-1)
(i 1) (i 1)Z = 2Q = 2P = 3DD= 4
d i 1 N
ρi-1= r(i-1) z(i-1)if i=1p(1)= z(0)
elsedo i= 1, NW(i,DD)= 1.0D0 / DIAG(i)
enddo
elseβi-1= ρi-1/ρi-2p(i)= z(i-1) + βi-1 p(i-1)
endifW(i 1) W(i R) { }
endifq(i)= [A]p(i)
αi = ρi-1/p(i)q(i)x(i)= x(i-1) + αip(i)
W(i,1)= W(i,R) ⇒ {r}W(i,2)= W(i,Z) ⇒ {z}W(i 2)= W(i Q) ⇒ {q} x x + αip
r(i)= r(i-1) - αiq(i)
check convergence |r|end
W(i,2)= W(i,Q) ⇒ {q}W(i,3)= W(i,P) ⇒ {p}
W(i,4)= W(i,DD) ⇒ 1/DIAG
117
CG法による一次元熱伝導方程式プ グ 概プログラム概要(4/7)
!C!C +---------------+
0 0!C | CG iterations |!C +---------------+!C===
R = 1Z = 2
Compute r(0)= b-[A]x(0)
for i= 1, 2, …solve [M]z(i-1)= r(i-1)
(i 1) (i 1)Z = 2Q = 2P = 3DD= 4
d i 1 N
ρi-1= r(i-1) z(i-1)if i=1p(1)= z(0)
elsedo i= 1, NW(i,DD)= 1.0D0 / DIAG(i)
enddo!C!C-- {r0}= {b} - [A]{xini} |
elseβi-1= ρi-1/ρi-2p(i)= z(i-1) + βi-1 p(i-1)
endifdo i= 1, NW(i,R) = DIAG(i)*PHI(i)do j= INDEX(i-1)+1, INDEX(i)W(i,R) = W(i,R) + AMAT(j)*PHI(ITEM(j))
endifq(i)= [A]p(i)
αi = ρi-1/p(i)q(i)x(i)= x(i-1) + αip(i)W(i,R) W(i,R) + AMAT(j) PHI(ITEM(j))
enddoenddo
BNRM2= 0.0D0do i= 1 N
x x + αipr(i)= r(i-1) - αiq(i)
check convergence |r|enddo i= 1, N
BNRM2 = BNRM2 + RHS(i) **2W(i,R)= RHS(i) - W(i,R)
enddoBNRM2: 収束判定用
118
CG法による一次元熱伝導方程式プ グ 概プログラム概要(5/7)
do iter= 1, ITERmax!C!C-- {z}= [Minv]{r}
do i= 1, NW(i,Z)= W(i,DD) * W(i,R)
enddo
Compute r(0)= b-[A]x(0)
for i= 1, 2, …solve [M]z(i-1)= r(i-1)
(i 1) (i 1)enddo
!C!C-- RHO= {r}{z}
RHO 0 d0
ρi-1= r(i-1) z(i-1)if i=1p(1)= z(0)
elseRHO= 0.d0do i= 1, NRHO= RHO + W(i,R)*W(i,Z)
enddo
elseβi-1= ρi-1/ρi-2p(i)= z(i-1) + βi-1 p(i-1)
endif!C!C-- {p} = {z} if ITER=1!C BETA= RHO / RHO1 otherwise
if ( iter.eq.1 ) then
endifq(i)= [A]p(i)
αi = ρi-1/p(i)q(i)x(i)= x(i-1) + αip(i)if ( iter.eq.1 ) then
do i= 1, NW(i,P)= W(i,Z)
enddoelse
BETA= RHO / RHO1
x x + αipr(i)= r(i-1) - αiq(i)
check convergence |r|endBETA= RHO / RHO1
do i= 1, NW(i,P)= W(i,Z) + BETA*W(i,P)
enddoendif
119
CG法による一次元熱伝導方程式プ グ 概プログラム概要(5/7)
do iter= 1, ITERmax!C!C-- {z}= [Minv]{r}
do i= 1, NW(i,Z)= W(i,DD) * W(i,R)
enddo
Compute r(0)= b-[A]x(0)
for i= 1, 2, …solve [M]z(i-1)= r(i-1)
(i 1) (i 1)enddo
!C!C-- RHO= {r}{z}
RHO 0 d0
ρi-1= r(i-1) z(i-1)if i=1p(1)= z(0)
elseRHO= 0.d0do i= 1, NRHO= RHO + W(i,R)*W(i,Z)
enddo
elseβi-1= ρi-1/ρi-2p(i)= z(i-1) + βi-1 p(i-1)
endif!C!C-- {p} = {z} if ITER=1!C BETA= RHO / RHO1 otherwise
if ( iter.eq.1 ) then
endifq(i)= [A]p(i)
αi = ρi-1/p(i)q(i)x(i)= x(i-1) + αip(i)if ( iter.eq.1 ) then
do i= 1, NW(i,P)= W(i,Z)
enddoelse
BETA= RHO / RHO1
x x + αipr(i)= r(i-1) - αiq(i)
check convergence |r|endBETA= RHO / RHO1
do i= 1, NW(i,P)= W(i,Z) + BETA*W(i,P)
enddoendif
120
CG法による一次元熱伝導方程式プ グ 概プログラム概要(5/7)
do iter= 1, ITERmax!C!C-- {z}= [Minv]{r}
do i= 1, NW(i,Z)= W(i,DD) * W(i,R)
enddo
Compute r(0)= b-[A]x(0)
for i= 1, 2, …solve [M]z(i-1)= r(i-1)
(i 1) (i 1)enddo
!C!C-- RHO= {r}{z}
RHO 0 d0
ρi-1= r(i-1) z(i-1)if i=1p(1)= z(0)
elseRHO= 0.d0do i= 1, NRHO= RHO + W(i,R)*W(i,Z)
enddo
elseβi-1= ρi-1/ρi-2p(i)= z(i-1) + βi-1 p(i-1)
endif!C!C-- {p} = {z} if ITER=1!C BETA= RHO / RHO1 otherwise
if ( iter.eq.1 ) then
endifq(i)= [A]p(i)
αi = ρi-1/p(i)q(i)x(i)= x(i-1) + αip(i)if ( iter.eq.1 ) then
do i= 1, NW(i,P)= W(i,Z)
enddoelse
BETA= RHO / RHO1
x x + αipr(i)= r(i-1) - αiq(i)
check convergence |r|endBETA= RHO / RHO1
do i= 1, NW(i,P)= W(i,Z) + BETA*W(i,P)
enddoendif
121
CG法による一次元熱伝導方程式プ グ 概プログラム概要(6/7)
!C!C-- {q}= [A]{p}{q} [ ]{p}
do i= 1, NW(i,Q) = DIAG(i)*W(i,P)do j= INDEX(i-1)+1, INDEX(i)W(i Q) = W(i Q) + AMAT(j)*W(ITEM(j) P)
Compute r(0)= b-[A]x(0)
for i= 1, 2, …solve [M]z(i-1)= r(i-1)
(i 1) (i 1)W(i,Q) = W(i,Q) + AMAT(j) W(ITEM(j),P)enddo
enddo
!C!C ALPHA RHO / { }{ }
ρi-1= r(i-1) z(i-1)if i=1p(1)= z(0)
else!C-- ALPHA= RHO / {p}{q}
C1= 0.d0do i= 1, NC1= C1 + W(i,P)*W(i,Q)
elseβi-1= ρi-1/ρi-2p(i)= z(i-1) + βi-1 p(i-1)
endifenddoALPHA= RHO / C1
!C!C-- {x}= {x} + ALPHA*{p}
endifq(i)= [A]p(i)
αi = ρi-1/p(i)q(i)x(i)= x(i-1) + αip(i)!C {x} {x} ALPHA {p}
!C {r}= {r} - ALPHA*{q}
do i= 1, NPHI(i) = PHI(i) + ALPHA * W(i,P)W (i R)= W(i R) - ALPHA * W(i Q)
x x + αipr(i)= r(i-1) - αiq(i)
check convergence |r|endW (i,R)= W(i,R) - ALPHA * W(i,Q)
enddo
122
CG法による一次元熱伝導方程式プ グ 概プログラム概要(6/7)
!C!C-- {q}= [A]{p}{q} [ ]{p}
do i= 1, NW(i,Q) = DIAG(i)*W(i,P)do j= INDEX(i-1)+1, INDEX(i)W(i Q) = W(i Q) + AMAT(j)*W(ITEM(j) P)
Compute r(0)= b-[A]x(0)
for i= 1, 2, …solve [M]z(i-1)= r(i-1)
(i 1) (i 1)W(i,Q) = W(i,Q) + AMAT(j) W(ITEM(j),P)enddo
enddo
!C!C ALPHA RHO / { }{ }
ρi-1= r(i-1) z(i-1)if i=1p(1)= z(0)
else!C-- ALPHA= RHO / {p}{q}
C1= 0.d0do i= 1, NC1= C1 + W(i,P)*W(i,Q)
elseβi-1= ρi-1/ρi-2p(i)= z(i-1) + βi-1 p(i-1)
endifenddoALPHA= RHO / C1
!C!C-- {x}= {x} + ALPHA*{p}
endifq(i)= [A]p(i)
αi = ρi-1/p(i)q(i)x(i)= x(i-1) + αip(i)!C {x} {x} ALPHA {p}
!C {r}= {r} - ALPHA*{q}
do i= 1, NPHI(i) = PHI(i) + ALPHA * W(i,P)W (i R)= W(i R) - ALPHA * W(i Q)
x x + αipr(i)= r(i-1) - αiq(i)
check convergence |r|endW (i,R)= W(i,R) - ALPHA * W(i,Q)
enddo
123
CG法による一次元熱伝導方程式プ グ 概プログラム概要(6/7)
!C!C-- {q}= [A]{p}{q} [ ]{p}
do i= 1, NW(i,Q) = DIAG(i)*W(i,P)do j= INDEX(i-1)+1, INDEX(i)W(i Q) = W(i Q) + AMAT(j)*W(ITEM(j) P)
Compute r(0)= b-[A]x(0)
for i= 1, 2, …solve [M]z(i-1)= r(i-1)
(i 1) (i 1)W(i,Q) = W(i,Q) + AMAT(j) W(ITEM(j),P)enddo
enddo
!C!C ALPHA RHO / { }{ }
ρi-1= r(i-1) z(i-1)if i=1p(1)= z(0)
else!C-- ALPHA= RHO / {p}{q}
C1= 0.d0do i= 1, NC1= C1 + W(i,P)*W(i,Q)
elseβi-1= ρi-1/ρi-2p(i)= z(i-1) + βi-1 p(i-1)
endifenddoALPHA= RHO / C1
!C!C-- {x}= {x} + ALPHA*{p}
endifq(i)= [A]p(i)
αi = ρi-1/p(i)q(i)x(i)= x(i-1) + αip(i)!C {x} {x} + ALPHA {p}
!C {r}= {r} - ALPHA*{q}
do i= 1, NPHI(i) = PHI(i) + ALPHA * W(i,P)W (i R)= W(i R) - ALPHA * W(i Q)
x = x + αipr(i)= r(i-1) - αiq(i)check convergence |r|
endW (i,R)= W(i,R) - ALPHA * W(i,Q)enddo
124
CG法による一次元熱伝導方程式プ グ 概プログラム概要(7/7)
DNRM2 = 0.0do i= 1, N,DNRM2= DNRM2 + W(i,R)**2
enddo
RESID= dsqrt(DNRM2/BNRM2)
Compute r(0)= b-[A]x(0)
for i= 1, 2, …solve [M]z(i-1)= r(i-1)
(i 1) (i 1)write (*, 1000) iter, RESID
1000 format (i5, 1pe16.6)
if ( RESID.le.EPS) goto 900RHO1 RHO
ρi-1= r(i-1) z(i-1)if i=1p(1)= z(0)
elseRHO1 = RHO
enddo!C********************************************************************
elseβi-1= ρi-1/ρi-2p(i)= z(i-1) + βi-1 p(i-1)
endifIER = 1
900 continue!C===
endifq(i)= [A]p(i)
αi = ρi-1/p(i)q(i)x(i)= x(i-1) + αip(i)!C
!C-- OUTPUTdo i= 1, Nwrite (*,'(i8, 1pe16.6)') i, PHI(i)
enddo
x x + αipr(i)= r(i-1) - αiq(i)
check convergence |r|endenddo
end program CG_poi
125
CG法による一次元熱伝導方程式プ グ 概プログラム概要(7/7)
DNRM2 = 0.0do i= 1, N BNRM2: 無次元化に使用,DNRM2= DNRM2 + W(i,R)**2
enddo
RESID= dsqrt(DNRM2/BNRM2)
Compute r(0)= b-[A]x(0)
for i= 1, 2, …solve [M]z(i-1)= r(i-1)
(i 1) (i 1)write (*, 1000) iter, RESID
1000 format (i5, 1pe16.6)
if ( RESID.le.EPS) goto 900RHO1 RHO
ρi-1= r(i-1) z(i-1)if i=1p(1)= z(0)
else
r= b-[A]xDNRM2=|r|2
BNRM2=|b|2RHO1 = RHO
enddo!C********************************************************************
elseβi-1= ρi-1/ρi-2p(i)= z(i-1) + βi-1 p(i-1)
endif
| |
RESID= |r|/|b|
IER = 1
900 continue!C===
endifq(i)= [A]p(i)
αi = ρi-1/p(i)q(i)x(i)= x(i-1) + αip(i)!C
!C-- OUTPUTdo i= 1, Nwrite (*,'(i8, 1pe16.6)') i, PHI(i)
enddo
x x + αipr(i)= r(i-1) - αiq(i)
check convergence |r|endenddo
end program CG_poi
126
反復法の収束判定「解を得 定「解を得られた」という判定
解の推定値 x(k)
⎞⎛ )( i
• 適切な条件のもとで,i⇒i+1のプロセスを繰り返すことによって,x(i)は正しい解に収束していく。
⎟⎟⎟⎟⎞
⎜⎜⎜⎜⎛
=)(
2
)(1
)(i
i xx
Mx • [A]{x}={b}という方程式を解いているので,
|| A || 0となれば収束したとみなすことができる⎟⎟⎟
⎠⎜⎜⎜
⎝)( i
nxM ||b-Ax||~0となれば収束したとみなすことができる。
• 通常は||b||で無次元化した「残差ノルム」が予め• 通常は||b||で無次元化した「残差ノルム」が予め設定した値 ε より小さくなった場合に収束したとみなす。ε の値は要求される精度によって異なる。
− Axb )(i nn n 22
残差ノルムみなす。ε の値は要求される精度によって異なる。
ε<bAxb
∑∑ ∑== =
=−=−j
jj k
ikjkj
i bxab1
2
1 1
)()( , bAxb