computational fluid dynamics (cfd) 値流体力学特論 computational fluid dynamics (cfd) ii...
TRANSCRIPT
数値流体力学特論COMPUTATIONAL FLUID DYNAMICS
(CFD)
II
基本的な離散化法Basic Discretization Techniques
岩津玲磨
Reima Iwatsu, e-mail : [email protected]
Winter Semester 2007, Graduate School, Tokyo Denki University
東京電機大学 平成19年度大学院後期授業, 2007年神田キャンパス11号館16F, 1601教室
1
I 流体シミュレーションのための様々なレベルにおける数学モデル1. 序論: はじめてのCFDへのガイド1.1 仮想プロトタイピング
1.2 CFDシミュレーション・システムの構成要素
2. 流体力学の基礎方程式2.1 保存則の一般形
2.2 質量保存方程式
2.3 運動量保存方程式 (運動方程式)
2.4 エネルギー保存方程式
3. 近似の力学的レベル3.1 ナビエ・ストークス方程式
3.2 乱流の近似
3.3 薄いせん断層近似 (TSL)
3.4 放物化されたナビエ・ストークス方程式 (PNS)
3.5 境界層近似
2
4. 流れの方程式の数学的性質と境界条件4.1 単純化された移流拡散方程式
4.2 連立偏微分方程式 (PDE)の数学的性質
4.3 双曲型と放物型の方程式 : 特性表面と影響領域
4.4 PDEの時間依存保存形
4.5 初期条件と境界条件
3
離散化 (discretization)
空間の離散化 → メッシュ, 格子 (グリッド)
精度 (Order of Accuracy)
格子生成 (Grid Generation) → 格子の「質」で数値解の正確さが決まる♠ 「数学モデル」 ⇒ 「格子に関係した未知数の連立代数方程式」
「時間進行法」 (time marching), 「擬非定常」 (pseudo unsteady)
陽解法 (explicit), 陰解法 (implicit)
♣ 「離散法をえらぶ」 ⇒ 「アルゴリズムの解析(安定性, 収束性)」⇒ 「時間積分法, 反復解法」
4
II の構成
有限差分法 (Finite Difference Method, FDM)
有限体積法 (Finite Volume Method, FVM)
有限要素法 (Finite Element Method, FEM)
異なった格子の種類
5
5. 構造格子に対する(有限)差分法
Finite Difference Method for Structured Grids
目的とガイドライン5.1 有限差分法 (FDM)
精度 (Order of Accuracy)
5.2 多次元のFD公式
5.3 不等間隔格子
5.4 陰的差分公式 implicit FD formulas) コンパクト (compact)
(DNS,LES,CEM,Computational ElectroMagnetic, CAA)
6
5.1 差分法 (FDM) の基礎オイラー (Leonhard Euler (1707-1783))
ux =∂u
∂x= lim
∆x→0
u(x + ∆x)− u(x)
∆x
精度 (order of accuracy of the FD approximation)
テイラー展開
u(x + ∆x) = u(x) + ∆x∂u
∂x+
∆x2
2
∂2u
∂x2+
∆x3
3!
∂2u
∂2x+ · · ·
有限差分
u(x + ∆x)− u(x)
∆x= ux(x) +
∆x
2uxx(x) +
∆x2
3!uxxx(x) + · · ·
打ち切り誤差 (truncation error)
u(x + ∆x)− u(x)
∆x' ux(x) +
∆x
2uxx(x) = ux(x) + O(∆x)
1次精度 (first order)
7
5.1.1 1階と2階の導関数に対する差分公式連続体 → N 個の離散点 xi, i = 1, · · · , N
前進差分 (forward difference)
(ux)i =∂u
∂x
i=
ui+1 − ui
∆x− ∆x
2(uxx)i − ∆x2
6(uxxx)i + · · ·
=ui+1 − ui
∆x+ O(∆x)
後退差分 (backward difference)
(ux)i =∂u
∂x
i=
ui − ui−1
∆x+
∆x
2(uxx)i − ∆x2
6(uxxx)i + · · ·
=ui − ui−1
∆x+ O(∆x)
中心差分 (central difference)
(ux)i =∂u
∂x
i=
ui+1 − ui−1
2∆x− ∆x2
6(uxxx)i + · · · =
ui+1 − ui−1
2∆x+ O(∆x2)
8
-
6
x
y
�����������������������
�����
��XXXXXHHHHH@@@@@AAAAAAAAA
y = u(x)
i− 1 i i + 1
¡¡
¡¡
¡¡
¡¡¡
©©©©©©©©©©©©©©©©©©
³³³³³³³³³³³³³³³³³³
ui−1
ui ui+1
Backwarddifference
Forwarddifference
Centraldifference
@@
@@@R
AA
AAAK
?
Fig. Geometrical interpretation
コメント
• 1次精度の差分は1次関数に対して厳密, 2次精度の差分は2次関数に対して厳密
• 前進差分は中点 xi+1/2 = (xi + xi+1)/2 に関する中心差分
9
2次精度の片側差分
(ux)i =aui + bui−1 + cui−2
∆x+ O(∆x2)
係数 (a, b, c) は点 iのまわりのテイラー展開によって
ui−2 = ui − 2∆x(ux)i +(2∆x)2
2(uxx)i − (2∆x)3
6(uxxx)i + · · ·
ui−1 = ui −∆x(ux)i +∆x2
2(uxx)i − ∆x3
6(uxxx)i + · · ·
a, b, c をかけて
aui + bui−1 + cui−2 = (a + b + c)ui −∆x(b + 2c)(ux)i +∆x2
2(b + 4c)(uxx)i + O(∆x3)
a + b + c = 0, b + 2c = −1, b + 4c = 0
2次精度の片側差分公式は
(ux)i =3ui − 4ui−1 + ui−2
2∆x+ O(∆x2)
これは差分公式をもとめる一般的な手続き
1階導関数を陽的差分公式でもとめるとき, p + 1個の点をつかってp次精度
10
2 階の導関数に対する差分公式(ux)i+1, (ux)i は後退差分で近似
(uxx)i =
∂2u
∂x2
i
=(ux)i+1 − (ux)i
∆x=
ui+1 − 2ui + ui−1
∆x2+ O(∆x2)
テイラー展開によっても2次精度
ui+1 − 2ui + ui−1
∆x2+ O(∆x2) = (uxx)i +
∆x2
12
∂4u
∂x4
i
+ · · ·
線形結合の形になる公式をさがす
(uxx)i =aui + bui−1 + cui−2
∆x2+ O(∆x2)
a + b + c = 0, b + 2c = 0, b + 4c = 2
片側 (後退)差分公式
(uxx)i =ui − 2ui−1 + ui−2
∆x2+ ∆x(uxxx)i + · · ·
11
5.1.2 1次元モデル方程式の差分近似
(1) 線形な1次元移流方程式
∂u
∂t+ a
∂u
∂x= 0 ut + auxx = 0
u(x, t): (x, t) の未知関数, a: 移流速度, 波の伝播速度
♣ 初期境界値問題 a > 0
u(x, 0) = u(0)(x) t = 0 0 ≤ x ≤ L
u(0, t) = g(t) x = 0 t ≥ 0
12
-
6
x
y
n− 1
n
n + 1
xi = i∆x
tn = n∆t
-¾
∆x
6
?
∆t
x
Fig. Discretization of the time and the space
♥ 空間, 時間を離散化する 時間レベルを上付きの添え字 n, 空間の位置を下付きの添え字 i
xi = i∆x tn = n∆t uni = u(i∆x, n∆t)
13
半離散化 (semi-discrete), 「線の方法」 (method of lines)
(ut)i = − a
2∆x(ui+1 − ui−1)
前進差分un+1
i − uni
∆t= − a
2∆x(ui+1 − ui−1)
♠ オイラー法 (Euler method)
un+1i − un
i
∆t+
a
2∆x(un
i+1 − uni−1) = 0
陽解法 (explicit)
un+1i = un
i −a∆t
2∆x(un
i+1 − uni−1) = 0
陰解法 (implicit)un+1
i − uni
∆t+
a
2∆x(un+1
i+1 − un+1i−1 ) = 0
→ ♦ オイラーの陰解法 (implicit Euler method) → 3重対角行列→ トーマス法 (Thomas algorithm)
時間1次空間2次
14
時間1次空間1次後退差分
(ut)i = − a
∆x(ui − ui−1) = 0
前進差分 陽的スキームun+1
i − uni
∆t+
a
∆x(un
i − uni−1) = 0
陰的スキームun+1
i − uni
∆t+
a
∆x(un+1
i − un+1i−1 ) = 0
空間前進差分(ut)i = − a
∆x(ui+1 − ui) = 0
陽的スキームun+1
i − uni
∆t+
a
∆x(un
i+1 − uni ) = 0
陰的スキーム 1次精度風上差分 (upwind schemes)
un+1i − un
i
∆t+
a
∆x(un+1
i+1 − un+1i ) = 0
15
時間1次空間2次後退差分
un+1i − un
i
∆t+ a
3ui − 4ui−1 + ui−2
2∆x= 0
陽的スキームun+1
i − uni
∆t
n
+ a3un
i − 4uni−1 + un
i−2
2∆x= 0
陰的スキームun+1
i − uni
∆t
n
+ a3un+1
i − 4un+1i−1 + un+1
i−2
2∆x= 0
時間2次空間2次中心差分
un+1i − un−1
i
2∆t+ a
uni+1 − un
i−1
2∆x= 0
「(中点)蛙飛び法」 (leapfrog scheme)
16
(2) 線形な拡散方程式
∂u
∂t= α
∂2u
∂x2ut = αuxx
時間前進差分
un+1i = un
i +α∆t
∆x2(ui+1 − 2ui + ui−1)
陽解法
un+1i = un
i +α∆t
∆x2(ui+1 − 2ui + ui−1)
n
陰解法
un+1i = un
i +α∆t
∆x2(ui+1 − 2ui + ui−1)
n+1
クランク―ニコルソン法 (Crank-Nicholson scheme)
un+1i = un
i +1
2
α∆t
∆x2(ui+1 − 2ui + ui−1)
n +α∆t
∆x2(ui+1 − 2ui + ui−1)
n+1
17
5.2 多次元の差分公式
-
6
x
y
i− 1 i i + 1
j − 1
j
j + 1
xi = i∆x
yj = j∆y
-¾∆x
6
?∆y
v
Fig. Two-dimensional Cartesian mesh
[ 2次元xi = x0 + i∆x yj = y0 + j∆y uij = u(xi, yj)
18
5.2 多次元の差分公式 (つづき)点 (i, j)のまわりにテイラー展開する
u(xi + ∆x, yj + ∆y) ≡ uij +
∆x
∂
∂x+ ∆y
∂
∂y
u|ij
+1
2
∆x
∂
∂x+ ∆y
∂
∂y
2
u|ij +1
6
∆x
∂
∂x+ ∆y
∂
∂y
3
u|ij + · · ·
] 前進差分
(ux)ij =∂u
∂x
ij
=ui+1,j − uij
∆x+ (∆x)
(uy)ij =
∂u
∂y
ij
=ui,j+1 − uij
∆x+ (∆y)
\ 後退差分
(ux)ij =∂u
∂x
ij
=uij − ui−1,j
∆x+ (∆x)
(uy)ij =
∂u
∂y
ij
=uij − ui,j−1
∆x+ (∆y)
19
5.2 多次元の差分公式 (つづき2)n中心差分
(uxx)ij =
∂2u
∂x2
ij
=ui+1,j − 2uij + ui−1,j
∆x2− ∆x2
12
∂4u
∂x4
ij
(uyy)ij =
∂2u
∂y2
ij
=ui,j+1 − 2uij + ui,j−1
∆y2− ∆y2
12
∂4u
∂y4
ij
[ 2次元の公式 · · · たとえば · · ·(ux)ij =
∂u
∂x
ij
=1
6
ui+1,j+1 − ui−1,j+1
2∆x+ 4
ui+1,j − ui−1,j
2∆x+
ui+1,j−1 − ui−1,j−1
2∆x
+ (∆x2)
20
5.2.1 ラプラス演算子 (Laplace operator)♥ 5点差分
∆uij = uxx + uyy =ui+1,j − 2uij + ui−1,j
∆x2+
ui,j+1 − 2uij + ui,j−1
∆y2+ O(∆x2, ∆y2)
♦ 等間隔格子, ∆x = ∆y = h ∆(1)
ui+1,j + ui−1,j + ui,j+1 + ui,j−1 − 4uij
h2= ∆uij +
h2
12(uxxxx + uyyyy)ij
i
j y y y
y
y
1 1
1
1
−4
Fig. Computational molecule for the five-point Laplace operator
21
ラプラス演算子 (つづき)♠ 5点混合差分 ∆(2)
∆uij =ui+1,j+1 + ui−1,j+1 + ui+1,j−1 + ui−1,j−1 − 4uij
2h2+ O(∆x2, ∆y2)
(偶数奇数格子の分離, odd-even decoupling)
i
j
y y
y y
1 1
1 1
−4y
i
j
y y
y y
y
n n
n n
n
Fig. Computational molecule for the five-point Laplace operator
22
ラプラス演算子 (つづき2)♣ 9点公式
∆(3)uij = (a∆(1) + b∆(2))uij with a + b = 1
∆(3)uij = ∆uij +h2
12(uxxxx + uyyyy + 6buxxyy)ij
b = 1/3 打切り誤差 → 4次精度h2
12∆2u ∆u = λu ∆(3) =
2
3∆(1) +
1
3∆(2) − λ2h2
12u ∆(3)uij =
λ +
λ2h2
12
u
i
j
y y y
y y y
y y y
1 1
1 1
1 1
1
1
−8y
b = 2/3 i
j
y y y
y y y
y y y
1 1
2 2
1 1
2
2
−12y
b = 1/2
Fig. Computational molecule for the nine-point Laplace operator
23
5.2.2 混合導関数 (Mixed derivatives)l中心差分
(uxy)ij =∂
∂x
=
ui,j+1 − ui,j−1
2∆y+ O(∆y2)
ui+1,j+1 − ui−1,j+1 − ui+1,j−1 + ui−1,j−1
4∆x∆y+ O(∆x2, ∆y2)
m中心差分とy方向前進差分
(uxy)ij =ui+1,j+1 + ui−1,j+1 + ui+1,j + ui−1,j
2∆x∆y+ O(∆x2, ∆y)
i
j
x x
x x
1 −1
−1 1
i
j x x
x x
⊗1 −1
−1 1
Fig. Computational molecule for the second order, mixed derivative formula
24
5.3 不等間隔格子 (Non-uniform grids)n境界層の厚さ
δ '√√√√√√
νx
U∞=
x√Rex
with Rex =U∞x
ν]] 速度勾配 格子間隔
∂u
∂y/∂u
∂x∼
√Rex
∆y
∆x∼ 1
√Rex
[[ x-方向単位長さに 101 格子点, Re = 106 とすると, ∆x = 0.01, ∆y = 10−5 !
¸ 等比格子 yj+1 = y1rj 公比 (格子集中係数) r ∼ 1.1− 1.5
¤ 境界層領域に少なくとも 10− 20 格子点
xi xi+1
j − 1
j
j + 16
?
δ
�
�������
��������������
-
Fig. Grid in a boundary layer
25
不等間隔格子 (つづき)物理量が定義される点と中点をどこに置くか♠ セル頂点 cell vertex
- x
i− 1 i i + 1 i + 2xi−1/2 xi+1/2
♣ セル中心 cell centered
- xy y y y y
i− 1 i i + 1 i + 2xi−1/2 xi+1/2
26
5.3.1 1階導関数の差分公式$ 前進差分
(ux)i =ui+1 − ui
∆xi− ∆xi
2(uxx)i
£ 後退差分(ux)i =
ui − ui−1
∆xi−1+
∆xi−1
2(uxx)i
¿ 中心差分
(ux)i =1
2
ui+1 − ui
∆xi+
ui − ui−1
∆xi−1
− ∆xi −∆xi−1
4(uxx)i − ∆x2
i + ∆x2i−1
12(uxxx)i
「もし格子間隔が急に変わると, 精度の劣化が避けられない」
- x
-¾∆xi−1 -¾
∆xi
i− 1 i i + 1
27
1階導関数の差分公式(つづき)¥ 2次精度の差分
(ux)i =1
∆xi + ∆xi−1
∆xi−1
∆xi(ui+1 − ui) +
∆xi
∆xi−1(ui − ui−1)
− ∆xi−1∆xi
6(uxxx)i
格子間隔によらず2次, 加重平均, 2,3次元では複雑, 2次以下の関数に対して厳密
保存的FD公式(ux)i =
ui+1/2 − ui−1/2
xi+1/2 − xi−1/2
xi+1/2 − xi−1/2 =1
2(∆xi−1 −∆xi) =
1
2(xi+1 − xi−1)
「反対のセル面で定義された値の差分で表わされた公式を保存形 とよぶ」
- x
-¾∆xi−1 -¾
∆xi
i− 1 i i + 1xi−1/2 xi+1/2
28
保存的FD公式(つづき)
(ux)i =ui+1/2 − ui−1/2
xi+1/2 − xi−1/2− ∆xi −∆xi−1
4(uxx)i − ∆x2
i −∆xi∆xi−1 + ∆x2i−1
24(uxxx)i
1次精度 (格子点 iは i− 1/2,i + 1/2の中点でない)
中点近似 ui+1/2 = (ui + ui+1)/2
(ux)i =ui+1 − ui−1
xi+1 − xi−1− ∆xi −∆xi−1
2(uxx)i − ∆x2
i −∆xi∆xi−1 + ∆x2i−1
6(uxxx)i
1次精度 (なめらかな格子∆xi −∆xi−1 ∼ O(∆x2)でないかぎり)
- x
-¾∆xi−1 -¾
∆xi
i− 1 i i + 1xi−1/2 xi+1/2
29
5.3.2 2階導関数の差分公式
(uxx)i =2
∆xi + ∆xi−1
(ui+1 − ui)
∆xi−1− (ui − ui−1)
∆xi−1
+
∆xi −∆xi−1
3(uxxx)i
−∆x2i −∆xi∆xi−1 + ∆x2
i−1
12(uxxxx)i
十分になめらかな格子∆xi −∆xi−1 ∼ O(∆x2)でないかぎり1次精度
(なめらかな格子∆xi −∆xi−1 ∼ O(∆x2)では2次精度)
- x
-¾∆xi−1 -¾
∆xi
i− 1 i i + 1xi−1/2 xi+1/2
30
5.3.3 セル中心格子 (Cell-centered grids)有限体積法でよくもちいられる
∫ i+1/2i−1/2
∂u
∂xdx ' (ui+1/2 − ui−1/2)
� 中点近似 ui+1/2 = (ui + ui+1)/2 は1次精度
ui+1/2 =ui + ui−1
2− ∆xi −∆xi−1
4(ux)i − ∆x2
i + 2∆xi∆xi−1 −∆x2i−1
16(uxx)i + (∆x3)
� 任意の格子で2次精度
ui+1/2 =∆xiui + ∆xi−1ui−1
∆xi + ∆xi−1− 1
8∆xi−1∆xi(uxx)i + (∆x3)
- xy y y y
i− 1 i i + 1xi−1/2 xi+1/2
-¾∆xi−1 -¾
∆xi
31
5.3.4 不等間隔格子のガイドライン♠不等間隔の格子による誤差は「なめらかに変化する格子」によって最小化できる
∆xi+1 −∆xi = O(∆x2i )
♦ 等比格子 xi+1 = rxi による誤差は 1次
∆xi+1 −∆xi = (r − 1)∆x = (∆xi)
だが, (r − 1)を小さくとれば誤差を小さくおさえることができる.
♣ となりあうセルの格子間隔が不連続にならないようにせよ
♥ 格子間隔の変化に連続な解析関数をもちいよたとえば
∆xi+1 = r∆xi
O 強い流れの変化がある場所では格子のなめらかさと格子密度に注意せよ
たとえば 翼前縁, よどみ点付近, はくり点付近, 物体後流など
32
5.4 陰的差分公式 (Implicit FD formula)♠ 1階導関数
u′i−1 + 4u′i + u′i+1
4=
ui+1 − ui−1
2∆x+ (∆x4)
u′i + u′i+1
2=
ui+1 − ui
∆x+ (∆x2)
♣ 2階導関数u”i−1 + 10u”i + u”i+1
12=
ui+1 − 2ui + ui−1
∆x2+ (∆x4)
♥ コンパクト差分 : 3重対角行列の反転が必要, 高精度 (高分解能)
1 1
1 4 1
1 4 1
· · · · · · · · ·
u′1u′2· · ·u′n
=
(u2 − u1)/∆x
(u3 − u1)/2∆x
· · ·(un − un−1)/∆x
⇒
u′1u′2· · ·u′n
- xy y y
i− 1 i i + 1
-¾∆xi−1 -¾
∆xi
33
陰的差分公式 (つづき)Mehrstellen, Hermitian method, compact method, spline method,
operator compact implicit (OCI) method
βu′i−2+αu′i−1+u′i+αu′i+1+βu′i+2 = aui+1 − ui−1
2∆x+b
ui+2 − ui−2
4∆x+c
ui+3 − ui−3
6∆x+(∆xp)
ui±1 = ui±∆x(u′)i +∆x2
2(u”)i±∆x3
6(u′′′)i +
∆x4
24(uIV )i±∆x5
5!(uV )i +
∆x6
6!(uV I)i + · · ·
ui±2 = ui±2∆x(u′)i+4∆x2
2(u”)i±8∆x3
6(u′′′)i+
16∆x4
24(uIV )i±32∆x5
5!(uV )i+
64∆x6
6!(uV I)i+· · ·
ui±3 = ui±3∆x(u′)i+9∆x2
2(u”)i±27∆x3
6(u′′′)i+
81∆x4
24(uIV )i±243∆x5
5!(uV )i+
(3∆x)6
6!(uV I)i+· · ·
u′i±1 = u′i±∆x(u”)i+∆x2
2(u′′′)i±∆x3
6(uIV )i+
∆x4
24(uV )i±∆x5
5!(uV I)i+
∆x6
6!(uV II)i+· · ·
u′i±2 = u′i±2∆x(u”)i+4∆x2
2(u′′′)i±8∆x3
6(uIV )i+
16∆x4
24(uV )i±32∆x5
5!(uV I)i+
(2∆x)6
6!(uV II)i+· · ·
34
陰的差分公式 (つづき2)
βu′i−2+αu′i−1+u′i+αu′i+1+βu′i+2 = aui+1 − ui−1
2∆x+b
ui+2 − ui−2
4∆x+c
ui+3 − ui−3
6∆x+(∆xp)
(β + α + 1 + α + β)u′i + (4β + α + α + 4β)∆x2
2u′′′i + (16β + α + α + 16β)
∆x4
24u′′′′′i + · · ·
= (a + b + c)u′i + (a + 4b + 9c)∆x2
3!u′′′i + (a + 16b + 81c)
∆x4
5!u′′′′′i + · · ·
1 + 2α + 2β = a + b + c ⇒ O(∆x2)
2α + 8β = a + 4b + 9c ⇒ O(∆x4)
2α + 32β = a + 16b + 81c ⇒ O(∆x6)
LHS = RHS + ε :
ε =
(a + 64b + 729c)
∆x6
7!− (2α + 128β)
∆x6
6!
uV II
35
コンパクト差分公式 (つづき3)
βu′i−2+αu′i−1+u′i+αu′i+1+βu′i+2 = aui+1 − ui−1
2∆x+b
ui+2 − ui−2
4∆x+c
ui+3 − ui−3
6∆x+(∆xp)
境界公式
u′i + αu′i+1 =1
∆x(aui + bui+1 + cui+2 + dui+3) + (∆xq)
2階導関数の公式βu′i−2 + αu′i−1 + u′i + αu′i+1 + βu′i+2
= aui+1 − 2ui + ui−1
∆x2+ b
ui+2 − 2ui + ui−2
4∆x2+ c
ui+3 − 2ui + ui−3
9∆x2+ (∆xr)
エルミート (Hermitian)公式
事前分解 (pre-factored)スキーム
スタガード・コンパクト公式
不等間隔スタガード公式
36
構造格子に対する(有限)差分法
離散化の基礎, 有限差分法
• テイラー展開でFD公式の精度(order of accuracy)を評価
• 導関数を近似するFD公式は無数に可能 (格子点数, 精度)
• FD公式のなかの格子点の場所 − 後退, 中心, 前進差分
• 2次元の公式 − 注意• 不等間隔FD公式は重要 → 実用問題→ セルサイズを急に変えると精度を失う• 格子 → なめらかな解析関数でつくること
おわり
37