126
数値計算の基礎 一次元熱伝導方程式の差分法 による解法 による解法 2011年夏季集中講義 研吾 並列計算プログラミング(616-2057)・先端計算機演習(616-4009

数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

数値計算の基礎一次元熱伝導方程式の差分法

による解法による解法

2011年夏季集中講義

島中島 研吾

並列計算プログラミング(616-2057)・先端計算機演習(616-4009)

Page 2: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

2

概 要概 要

次元熱伝導方程式と差分法• 一次元熱伝導方程式と差分法

• 連立一次方程式の解法

• 反復法について

共役勾配法(CG)法– 共役勾配法(CG)法

– 前処理について

• 共役勾配法を使用した一次元熱伝導解析プログ• 共役勾配法を使用した 次元熱伝導解析プログラムについて

Page 3: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

3

一次元熱伝導方程式(1/3)一次元熱伝導方程式(1/3)支配方程式:簡単のため熱伝導率=1

2

xxdxdxBF

dxd

max2

2

@0,0@0,0 =====+φφφ

xxBFxBF max2

21

+−=φ

一様体積発熱 BF

φ=0 断熱

実際は以下のような離散化をしているので注意が必要実際は以下のような離散化をしているので注意が必要

断熱となっているのはこの面,しかし温度は計算

φ=0

しかし温度は計算されない

Page 4: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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

=+−=×+−=φ

Page 5: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

5

念のため・・・・差分について念のため 差分について

差分法 Finite Difference Method• 差分法:Finite Difference Method• マクロな微分

– 微分係数を数値的に近似する手法

• 以下のような一次元系を考える

φi-1 φi φi+1

Δx Δx

Page 6: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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 Δ

≈⎟⎟⎠

⎜⎜⎝

Page 7: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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 ⎠⎝⎠⎝⎠⎝

Page 8: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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のオーダー

(一次精度)

Page 9: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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のオーダー

(二次精度)

Page 10: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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が均一でない場合も同様のことが起こる。

Page 11: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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 Δ=

Δ−=

Δ=

Page 12: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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 =×+×= φφ

Page 13: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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 Δ=

Δ−=

Δ=

Page 14: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

14

係数行列は疎行列(Sparse Matrix)p

• 0が多い多

• 非ゼロ成分のみを記憶する方法

Compressed Row Storage CRS(後述)– Compressed Row Storage, CRS(後述)

• 密行列と比較して取り扱いが困難

Page 15: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

15

次元熱伝導方程式と差分法• 一次元熱伝導方程式と差分法

• 連立一次方程式の解法

• 反復法について

共役勾配法(CG)法– 共役勾配法(CG)法

– 前処理について

• 共役勾配法を使用した一次元熱伝導解析プログ• 共役勾配法を使用した 次元熱伝導解析プログラムについて

Page 16: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

16

科学技術計算における大規模線形方程式の解法

• 多くの科学技術計算は,最終的に大規模線形方程式Ax=bを解くことに帰着される:「線形ソルバー」

– important, expensive• アプリケーションに応じて様々な手法が提案されているアプリケ ションに応じて様々な手法が提案されている

– 疎行列(sparse),密行列(dense)– 直接法(direct) 反復法(iterative)– 直接法(direct),反復法(iterative)

• 本講義・演習では主に,疎行列,反復法について扱う。

• 密行列(dense)• 密行列(dense)– グローバルな相互作用あり:BEM,スペクトル法,MO,MD(気液)

疎行列(sparse)• 疎行列(sparse)– ローカルな相互作用:FEM,FDM,MD(固),高速多重極展開付BEM

Page 17: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

17

(密行列)遠隔領域も含め,多数領域との相互作用あり

境界要素法,スペクトル法,MD法

Page 18: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

18

(疎行列)近接領域のみとの相互作用

差分法,有限要素法

Page 19: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

19

「線形ソルバー」にどう向き合うか ?

• これについてはあとで• これについてはあとで

Page 20: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

20

直接法(Direct Method)直接法(Direct Method)• Gaussの消去法,完全LU分解Gaussの消去法,完全LU分解

– 逆行列A-1を直接求める

• 利点– 安定 幅広いアプリケーションに適用可能安定,幅広いアプリケ ションに適用可能

• Partial Pivoting– 疎行列,密行列いずれにも適用可能

• 欠点– 反復法よりもメモリ,計算時間を必要とする反復法よりもメモリ,計算時間を必要とする

• 密行列の場合,O(N3 )の計算量

– 大規模な計算向けではない• O(N2 )の記憶容量,O(N3 )の計算量

Page 21: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

LU分解法:完全LU分解法LU分解法:完全LU分解法

直接法の一種

逆行列を直接求める手法逆行列を直接求める手法

「逆行列」に相当するものを保存しておけるので,右辺が変わったときに計算時間を節約できる変わったときに計算時間を節約できる

逆行列を求める際にFill-in(もとの行列では0であったところに値が入る)が生じるろに値が入る)が生じる

21

Page 22: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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

Page 23: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

連立一次方程式の行列表現連立 次方程式の行列表現

元の連立 次方程式の 般形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

Page 24: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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

Page 25: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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

Page 26: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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

芋づる式に解が求まる:前進代入

Page 27: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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

芋づる式に 解が求まる:後退代入

Page 28: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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

Page 29: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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

Page 30: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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

Page 31: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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

Page 32: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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⇒

Page 33: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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⇒

Page 34: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

数値例数値例

⎟⎟⎟⎞

⎜⎜⎜⎛

⎟⎟⎟⎞

⎜⎜⎜⎛

=⎟⎟⎟⎞

⎜⎜⎜⎛

= 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

Page 35: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

数値例(続き)数値例(続き)

⎟⎟⎟⎞

⎜⎜⎜⎛

⎟⎟⎟⎞

⎜⎜⎜⎛

=⎟⎟⎟⎞

⎜⎜⎜⎛

= 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列、・ ・ ・の順に求める式を作っていく.

Page 36: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

数値例(続き)数値例(続き)

結局

⎞⎛⎞⎛⎞⎛

⎟⎟⎟⎞

⎜⎜⎜⎛

⎟⎟⎟⎞

⎜⎜⎜⎛

=⎟⎟⎟⎞

⎜⎜⎜⎛

=130021204321

011200120001

7822107624321

A

⎟⎟⎟

⎠⎜⎜⎜

⎝⎟⎟⎟

⎠⎜⎜⎜

⎝ −−

⎟⎟⎟

⎠⎜⎜⎜

⎝ − 20001300

13200112

17407822

L UL U

36

Page 37: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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)

Page 38: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

38

反復法(Iterative Method)(続き)反復法(Iterative Method)(続き)

• 利点利点– 直接法と比較して,メモリ使用量,計算量が少ない。

– 並列計算には適している。並列計算には適している。

• 欠点欠点– 収束性が,アプリケーション,境界条件の影響を受けやすい。

– 前処理(preconditioning)が重要。前処理(preconditioning)が重要。

Page 39: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

39

次元熱伝導方程式と差分法• 一次元熱伝導方程式と差分法

• 連立一次方程式の解法

• 反復法について

共役勾配法(CG)法– 共役勾配法(CG)法

– 前処理について

• 共役勾配法を使用した一次元熱伝導解析プログ• 共役勾配法を使用した 次元熱伝導解析プログラムについて

Page 40: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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版)」(共立出版)

Page 41: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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

Page 42: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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

Page 43: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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

Page 44: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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

Page 45: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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

Page 46: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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, +−+=

Page 47: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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近似に対する残差

Page 48: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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

Page 49: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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 α

Page 50: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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回以内に収束する⇒実際は丸め誤差の影響がある

Page 51: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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 αα

Page 52: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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

Page 53: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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]が単位行列に近ければ良い,ということになる。

• 「前処理」は密行列,疎行列ともに使用するが,普通は疎行列前処理」は密行列,疎行列ともに使用するが,普通は疎行列を対象にすることが多い。

Page 54: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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

Page 55: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

55

ILU(0), IC(0)ILU(0), IC(0)• 最もよく使用されている前処理(疎行列用)最もよく使用され る前処理(疎行列用)

– 不完全LU分解• Incomplete LU Factorization

– 不完全コレスキー分解• Incomplete Cholesky Factorization(対称行列)

• 不完全な直接法– もとの行列が疎でも,逆行列は疎とは限らない。

– fill-in– もとの行列と同じ非ゼロパターン(fill-in無し)を持っているのが

ILU(0),IC(0)

Page 56: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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

Page 57: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

LU分解法:完全LU分解法LU分解法:完全LU分解法

直接法の一種

逆行列を直接求める手法逆行列を直接求める手法

「逆行列」に相当するものを保存しておけるので,右辺が変わったときに計算時間を節約できる変わったときに計算時間を節約できる

逆行列を求める際にFill-in(もとの行列では0であったところに値が入る)が生じるろに値が入る)が生じる

不完全LU分解法

Fill i の発生を制限して 前処理に使う手法Fill-inの発生を制限して,前処理に使う手法

不完全な逆行列,少し弱い直接法

57

Page 58: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

58

実例:差分法による熱伝導等5点差分

1 10 11 12

23 7 8 93

45

4 5 667

1 2 389

101011

12

Page 59: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

59

実例:差分法による熱伝導等5点差分

1 10 11 12

23 7 8 93

45

4 5 667

1 2 389

101011

12

Page 60: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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

Page 61: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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

Page 62: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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>

Page 63: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

63

ファイルコピーファイル一次元熱伝導方程式

>$ cd <$E-EPS>>$ cp /home03/skengon/Documents/class/EPSsummer/intro.tar .>$ tar xvf intro.tar$>$ cd intro

Page 64: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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でお願いします

Page 65: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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

Page 66: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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

Page 67: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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

Page 68: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

68

ILU(0) IC(0) 前処理ILU(0), IC(0) 前処理

を全く考慮 な 「 完全な 分解• Fill-inを全く考慮しない「不完全な」分解

– 記憶容量,計算量削減

• これを解くと「不完全な」解が得られるが,本来の解とそれほどずれているわけではない

– 問題に依存する

Page 69: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

69

大規模線形ソルバーの動向

• 反復法がより広く使用されるようになりつつあるを超 る うな大規模並 直接法 並 性能が– 100コアを超えるような大規模並列システムでは直接法は並列性能が

出ない:逆にそれより小さければ直接法でもOKということになる。

密行列も反復法で解くような試みがなされている– 密行列も反復法で解くような試みがなされている。

• 密行列を使わないで済ませられるようなアルゴリズムの開発高速多重極展開( )– 高速多重極展開(Fast Multipole)

– 遠方からの効果をクラスタリング,あるいは無視

密行列– 密行列• メモリースケーラブルではない

前処理付き反復法(preconditioned iterative solvers)• 前処理付き反復法(preconditioned iterative solvers)– 安定した前処理の必要性

安定した前処理は概して「並列化」が困難– 安定した前処理は概して「並列化」が困難

• 詳しくはCE13で

Page 70: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

70

次元熱伝導方程式と差分法• 一次元熱伝導方程式と差分法

• 連立一次方程式の解法

• 反復法について

共役勾配法(CG)法– 共役勾配法(CG)法

– 前処理について

• 共役勾配法を使用した一次元熱伝導解析プログ• 共役勾配法を使用した 次元熱伝導解析プログラムについて

Page 71: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

71

再び一次元熱伝導方程式(1/3)再び一次元熱伝導方程式(1/3)支配方程式:熱伝導率=1(一様)

2

xxdxdxBF

dxd

max2

2

@0,0@0,0 =====+φφφ

xxBFxBF max2

21

+−=φ

一様体積発熱 BF

φ=0 断熱

以下のような離散化(要素中心で従属変数を定義)をしているので注意が必要以下のような離散化(要素中心で従属変数を定義)をしているので注意が必要

断熱となっているのはこの面,しかし温度は計算

φ=0

しかし温度は計算されない

Page 72: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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

=+−=×+−=φ

Page 73: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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 Δ=

Δ−=

Δ=

Page 74: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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+ ∑+−=

対角成分 非対角成分

Page 75: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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==×+× ∑+−=

対角成分 非対角成分

Page 76: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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

Page 77: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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

Page 78: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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)実数 , ( )

Page 79: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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⑧② ③ ④ ⑥ ⑧

Page 80: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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⑧ ② ③ ④ ⑥⑧

Page 81: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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行目の非対角成分

Page 82: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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行目の非対角成分

Page 83: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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

Page 84: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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

Page 85: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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

Page 86: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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)

Page 87: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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)

Page 88: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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)

Page 89: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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)

Page 90: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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

Page 91: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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

Page 92: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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

Page 93: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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

Page 94: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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

Page 95: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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 打切誤差

Page 96: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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

Page 97: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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)という場合に逆行列を簡単に求

めることができる。

Page 98: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=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)

Page 99: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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」

Page 100: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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」

Page 101: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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」

Page 102: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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

Page 103: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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)

Page 104: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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

Page 105: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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

固定境界条件が指定されている点を非対角成分として持っている場合非対角成分をゼロクリアする。

Page 106: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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

Page 107: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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

=

Page 108: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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

=

Page 109: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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

=

Page 110: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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

Δ=

Page 111: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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

Page 112: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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

Page 113: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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

=+++=++

φφφφφφφ

Page 114: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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

Page 115: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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********************************************************************

Page 116: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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

Page 117: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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: 収束判定用

Page 118: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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

Page 119: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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

Page 120: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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

Page 121: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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

Page 122: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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

Page 123: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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

Page 124: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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

Page 125: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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

Page 126: 数値計算の基礎 一次元熱伝導方程式の差分法 によ …nkl.cc.u-tokyo.ac.jp/11e/02-1D/1d.pdf3 一次元熱伝導方程式(1/3) 支配方程式:簡単のため熱伝導率=1

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