Post on 10-Jan-2020
流体シミュレーションにおける様々な手法
廣瀬三平 (芝浦工業大学)
2016/6/12物理現象の演出可能な離散モデルの構築
1 / 33
Outline
1. 非圧縮性流体の方程式2. 非圧縮性流体の方程式の離散化3. 格子法4. 粒子法5. PIC/FLIP
2 / 33
非圧縮性流体の方程式
3 / 33
非圧縮性流体の方程式
∂u
∂t= −(u · ∇)u+ ν∆u− 1
ρ∇p+ f
∇ · u = 0
1本目: 非圧縮性流体の運動を記述する Navier-Stokes方程式2本目: 質量保存を表す連続の方程式
t: 時間x: 空間座標
2次元 (x1, x2)
3次元 (x1, x2, x3)
u: 流体の速度p: 圧力ρ: 質量密度ν: 動粘性係数
−(u · ∇)u: 移流項ν∆u: 粘性項
−1
ρ∇p: 圧力項
f : 外力項
物体の流れではなく, 流れを生み出す速度の変化を記述4 / 33
非圧縮性流体の方程式 (2次元)
∂u
∂t= −(u · ∇)u+ ν∆u− 1
ρ∇p+ f
∇ · u = 0
u = (u1, u2)
f = (f1, f2)
(a1, a2) · (b1, b2) =2∑
k=1
akbk = a1b1 + a2b2
∇ = (∂
∂x1,
∂
∂x2)
∆ = ∇ · ∇ =
2∑k=1
∂2
∂x2k
=∂2
∂x21
+∂2
∂x22
ならば
∂ui
∂t= −
2∑k=1
uk∂ui
∂xk+ ν
2∑k=1
∂2ui
∂x2k
− 1
ρ
∂p
∂xi+ fi (i = 1, 2)
2∑k=1
∂uk
∂xk= 0
5 / 33
非圧縮性流体の方程式 (3次元)
∂u
∂t= −(u · ∇)u+ ν∆u− 1
ρ∇p+ f
∇ · u = 0
u = (u1, u2, u3)
f = (f1, f2, f3)
(a1, a2, a3) · (b1, b2, b3) =3∑
k=1
akbk = a1b1 + a2b2 + a3b3
∇ = (∂
∂x1,
∂
∂x2,
∂
∂x3)
∆ = ∇ · ∇ =
3∑k=1
∂2
∂x2k
=∂2
∂x21
+∂2
∂x22
+∂2
∂x23
ならば
∂ui
∂t= −
3∑k=1
uk∂ui
∂xk+ ν
3∑k=1
∂2ui
∂x2k
− 1
ρ
∂p
∂xi+ fi (i = 1, 2, 3)
3∑k=1
∂uk
∂xk= 0
6 / 33
移流項∂u
∂t= −(u · ∇)u+ ν∆u− 1
ρ∇p+ f
∇ · u = 0
流体の流れに沿っての変化を表す流れに沿った視点で見れば静止運動であるので無視できる
ラグランジュ微分 Du
Dt:=
∂u
∂t+ (u · ∇)uを普通の微分と見なせる
格子法: 固定された座標 =⇒ 移流項を考慮する必要あり粒子法: 流れに沿った座標 =⇒ 移流項を考慮する必要なし
∂u
∂t= −(u · ∇)u
流れに沿って変化していく様子を記述初期値を F とした解は
u = F (x− tu)
この解の表示より初期値が x0 で滑らか =⇒ 解は x0 + tuで滑らか初期値が x0 で特異性を持つ =⇒ 解は x0 + tuで特異性を持つ
7 / 33
粘性項
∂u
∂t= −(u · ∇)u+ ν∆u− 1
ρ∇p+ f
∇ · u = 0
流体の粘性を表すν が大きいと粘りが強いν が小さいと粘りが弱い
∂u
∂t= ν∆u
拡散方程式と呼ばれ, 物質が広がっていく過程を記述ラプラシン ∆: 周囲と平均化する演算子
平均化 =⇒ 一部が動くとその周りも合わせて動く =⇒ 粘性初期値に特異性があってもすぐに滑らかになる
8 / 33
圧力項
∂u
∂t= −(u · ∇)u+ ν∆u−1
ρ∇p+ f
∇ · u = 0
流体の互いに押し合う力を表すpはポアソン方程式を解くことにより求める
Navier-Stokes方程式に ∇·をかけると
∂(∇ · u)∂t
= −∇ · (u · ∇)u+ ν∆(∇ · u)− 1
ρ∇ · ∇p+∇ · f .
連続の方程式より
0 = −∇ · (u · ∇)u− 1
ρ∆p+∇ · f
整理すると∆p = ρ {−∇ · (u · ∇)u+∇ · f}
この手法は離散化で重要な役割を果たす
9 / 33
連続の方程式
∇ · u = 0
ただし
∇ · u =
∂u1
∂x1+
∂u2
∂x2(2次元)
∂u1
∂x1+
∂u2
∂x2+
∂u3
∂x3(3次元)
∂uk
∂xk: ベクトル uの xk 方向の流入, 流出量を記述
正負の符号により xk 方向の流入量, 流出量を表す0ならば xk 方向からの流入量は流出量と等しいこと表す
連続の方程式は流入した分はすべて流出していることを表す連続の方程式 = 質量保存
10 / 33
非圧縮性流体の方程式の離散化
11 / 33
時間微分の離散化
∂u
∂t= lim
δt→0
u(t+ δt)− u(t)
δt∼ u(t+ δt)− u(δt)
h: 前進差分
∂u
∂t= lim
δt→0
u(t)− u(t− δt)
δt∼ u(t)− u(t− δt)
δt: 後進差分
∂u
∂t= lim
δt→0
u(t+ δt)− u(t− δt)
2δt∼ u(t+ δt)− u(t− δt)
2δt: 中心差分
後進差分, 中心差分は前の時間での値 u(t− h)が必要であり使いにくい時間微分の離散化には前進差分を使用
∂u
∂t= −(u · ∇)u+ ν∆u− 1
ρ∇p+ f
=⇒ u+ − u
δt= −(u · ∇)u+ ν∆u− 1
ρ∇p+ f
=⇒ u+ = u+ δt
{−(u · ∇)u+ ν∆u− 1
ρ∇p+ f
}
以上より考えるべきは空間に関する微分が含まれている右辺の離散化
12 / 33
格子法と粒子法の違い
格子法固定された格子 (メッシュ)に情報を持たせる微分方程式の解析によく用いられており, 様々な手法が研究されている誤差の評価についても進んでいる
粒子法固定された格子ではなく, 粒子 (パーティクル)に情報を持たせる移流項を考慮に入れる必要がない流体が2つに千切れるなどの大変形の記述ができる
これらを混ぜた手法も存在
13 / 33
フラクショナル・ステップ法∂u
∂t= −(u · ∇)u+ ν∆u− 1
ρ∇p+ f
フラクショナル・ステップ法では次のように分解し, 交互に計算を行い時間発展∂u
∂t= −(u · ∇)u+ ν∆u+ f
∂u
∂t= −1
ρ∇p: 圧力
ここではさらに次のように分解したものを考える∂u
∂t= f : 外力
∂u
∂t= −(u · ∇)u: 移流
∂u
∂t= ν∆u: 粘性
∂u
∂t= −1
ρ∇p: 圧力
これを利用し次のように時間発展
u(x, t)外力=⇒ u1(x, t)
移流=⇒ u2(x, t)
粘性=⇒ u3(x, t)
圧力=⇒ u(x, t+ δt)
14 / 33
格子法
15 / 33
有限差分法を用いた離散化以下では有限差分法, つまり微分の差分化
∂u
∂t= lim
δt→0
u(t+ δt)− u(t)
δt∼ u(t+ δt)− u(t)
δt
を用いて方程式を離散化 (外力の離散化は単純なので省略)
例∂u
∂t= v
離散化すると∂u
∂t= u =⇒ u(t+ δt)− u(t)
δt= u(t)
=⇒ u(t+ δt) = (1 + δt)u(t)
これより初期値 u(0) = aがわかればu(δt) = (1 + δt)u(0) = (1 + δt)a
u(2δt) = (1 + δt)u(1) = (1 + δt)2a
u(3δt) = (1 + δt)u(2) = (1 + δt)3a
...
と t = δt, 2δt, 3δt, . . .(格子)での値 u(δt), u(2δt), u(3δt), . . .が求められる16 / 33
移流項の離散化∂u
∂t= −(u · ∇)u
簡単のため 1次元で説明∂u
∂t= −u
∂u
∂x
=⇒ u(x, t+ δt)− u(x, t)
δt= −u(x, t)
u(x+ δx, t)− u(x, t)
δx
=⇒ u(x, t+ δt) = u(x, t)− δt
δxu(x, t) {u(x+ δx, t)− u(x, t)}
現在の時間の値 u(x, t), u(x+ δx, t)より u(x, t+ δt)が決まる
注意上記手法では不安定 (振動, 発散)になる可能性がある別の手法として移流項を粒子の流れとしたセミラグランジュ法
u(x, t+ δt) = u(x− δtu(x, t), t)
が用いられている (Stam, Stable Fluids)
17 / 33
粘性項の離散化∂u
∂t= ν∆u
簡単のため 1次元で説明
∂u
∂t= ν
∂2u
∂x2
=⇒ u(x, t+ δt)− u(x, t)
δt= ν
u(x+ δx, t)− 2u(x, t) + u(x− δx, t)
δx2
=⇒ u(x, t+ δt) = u(x, t) + νδt
δx2(u(x+ δx, t)− 2u(x, t) + u(x− δx, t))
現在の時間の値 u(x, t), u(x+ δx, t), u(x− δx, t)より u(x, t+ δt)が決まる
注意”求めたい値=既知の量の組み合わせ”である陽解法は不安定になりやすい(半)陰解法は安定になりやすい
u(x, t+ δt)− u(x, t)
δt= ν
u(x+ δx, t+ δt)− 2u(x, t+ δt) + u(x− δx, t+ δt)
δx2
18 / 33
圧力項の離散化∂u
∂t= −1
ρ∇p
圧力 pの満たす方程式をこの方程式より導出∂u
∂t= −1
ρ∇p
=⇒ u+ − u
δt= −1
ρ∇p (時間微分の離散化)
=⇒ ∇ · u+ −∇ · uδt
= −1
ρ∇ · ∇p (∇·を左からかける)
=⇒ ∆p =ρ
δt∇ · u (=: f) (連続の方程式 ∇ · u+ = 0)
このポアソン方程式を離散化して整理すると連立方程式が得られる
1次元の場合は次であり, 境界値 p(x− δx), p(x+ (N +1)δx)を与えると解けるp(x+ δx)− 2p(x) + p(x− δx) = δx2f(x)
p(x+ 2δx)− 2p(x+ δx) + p(x) = δx2f(x+ δx)
...
p(x+ (N + 1)δx)− 2p(x+Nδx) + p(x+ (N − 1)δx) = δx2f(x+Nδx)19 / 33
格子法による計算
u(x, t)外力=⇒ u1(x, t)
移流=⇒ u2(x, t)
粘性=⇒ u3(x, t)
圧力=⇒ u(x, t+ δt)
の各ステップで以下を離散化した方程式を用いる∂u
∂t= f : 外力
∂u
∂t= −(u · ∇)u: 移流
∂u
∂t= ν∆u: 粘性
∂u
∂t= −1
ρ∇p: 圧力
以上は簡単のためレギュラー格子を用いたレギュラー格子: 速度と圧力をセルの頂点に配置
他に次のような格子があるコロケート格子: 速度と圧力をセルの中心に配置スタッガード格子: 速度をセルの面, 圧力をセルの中心に配置
20 / 33
粒子法
21 / 33
粒子を用いた離散化物理量を持つ粒子 Pi (i = 1, . . . , N)を用いて方程式を離散化
ui: 速度xi: 位置pi: 圧力
速度 uが自身の流れに乗って変化すると∂u
∂t+ (u · ∇)u = 0
粒子の視点で考えた Navier-Stokes方程式はDu
Dt= ν∆u− 1
ρ∇p+ f
ただし Du
Dt:=
∂u
∂t+ (u · ∇)u: ラグランジュ微分
粒子の視点に立った Navier-Stokes方程式の離散化はu+ − u
δt= ν∆u− 1
ρ∇p+ f
以下ではMPS(Moving Particle Semi-implicit)法を用いて離散化22 / 33
重み関数以下, 煩雑さを避けるため時間の記号は省略
2つの粒子の影響を表す重み関数は
w(r) =
{rer
− 1 (0 < r < re)
0 (r ≥ re)
r は 2つの粒子の距離, re は影響の範囲を表す0 < r < re: 2つの粒子が近くなので影響を与える
r が 0に近い =⇒ 影響は大きいr > re: 2つの粒子が遠くなので影響を与えない
粒子 Pi の周りの粒子の多さを表す粒子数密度を次で定義
ni =∑j ̸=i
w(|xj − xi|)
特に粒子数密度の基準値 nを
n = ”中心”にある粒子の粒子数密度
23 / 33
微分演算子の離散化∇f の粒子 Pi の位置 x = xi での近似値
⟨∇f⟩i :=d
n
∑j ̸=i
{f(xj)− f(xi)
|xj − xi|2(xj − xi)w(|xj − xi|)
}∆f の粒子 Pi の位置 x = ri での近似値
⟨∆f⟩i :=2d
λn
∑j ̸=i
(f(xj)− f(xi))w(|xj − xi|)
ただしd: 空間の次元λ: ”中心”にある粒子 Pi の周りの粒子との距離の平均値
λ =
∑j ̸=i
|xj − xi|2w(|xj − xi|)∑j ̸=i
w(|xj − xi|)
これを用いて粘性項, 圧縮項を離散化24 / 33
微分演算子の離散化: 差分法との比較1次元で粒子が x−1 = x− δ,x0 = x,x1 = x+ δxに存在する場合は
n =∑
j=−1,1
w(δx) = 2w(δx), λ =
∑j=−1,1
δx2w(δx)∑j=−1,1
w(δx)= δx2
⟨∇f⟩0 =1
2w(δx)
∑j=−1,1
{f(xj)− f(x0)
δx2(xj − x0)w(δx)
}=
1
2δx2{(f(x− δx)− f(x))(−δx) + (f(x+ δx)− f(x))δx}
=f(x+ δx)− f(x− δx)
2δx∼ ∂f
∂x= ∇f
⟨∆f⟩0 =2
2w(δx)δx2
∑j=−1,1
(f(xj)− f(x0))w(δx)
=1
δx2{(f(x− δx)− f(x)) + (f(x+ δx)− f(x))}
=f(x+ δx)− 2f(x) + f(x− δx)
δx2∼ ∂2f
∂x2= ∆f
25 / 33
粒子法による計算
ui
xi
外力=⇒
u1i
x1i = xi + δtu1
i
粘性=⇒
u2i
x2i = x1
i + δtu2i
圧力=⇒
ui,+
xi,+ = x2i + δtui,+
の各ステップで以下を離散化した方程式を用いるDu
Dt= f : 外力
Du
Dt= ν∆u: 粘性
Du
Dt= −1
ρ∇p: 圧力
ただし, 圧力 pについては粒子法の場合と同様にポアソン方程式を解いて求める
∆p =ρ
δt∇ · u
速度 ui と同時に位置 xi も更新するので移流項が不要
26 / 33
SPH法
関数 f(x)の近似として粒子 Pj の質量mj , 密度 ρj を用いて
⟨f(x)⟩ =∑j
mj
ρjf(xj)wh(|x− xj |)
関数 f(x)の微分の近似は wh(|x− xj |)の微分を利用
SPH法圧縮性流体の計算手法陽解法を使用 (ポアソン方程式を解かない)
MPS法非圧縮性流体の計算手法半陰解法を使用 (ポアソン方程式を解く)
以上は様々な拡張があり, ともに圧縮性, 非圧縮性への適用が考えられている
27 / 33
PIC/FLIP
28 / 33
格子法, 粒子法の利点格子法: 移流項以外の計算が得意粒子法: 移流項の計算が得意
PIC, FLIP, PIC/FLIP
∂u
∂t= ν∆u− 1
ρ∇p+ f : 格子を用いて計算
∂u
∂t= −(u · ∇)u: 粒子を用いて計算
違いは格子と粒子のデータのやり取り
次において提案PIC (Particle-In-Cell): F. H. Harlow (1955)
FLIP (FLuid-Implicit-Particle): J. U. Brackbill and H. M. Ruppel (1986)
PIC/FLIP: Y. Zhu and R. Bridson (2005)
29 / 33
PIC
PICのアルゴリズム1. 粒子の速度 up を格子 ug に移す演算子をMp→g とすると
ug = Mp→gup
2. 移流項以外 ∂u
∂t= ν∆u− 1
ρ∇p+ f を格子法で計算し, 格子の速度 ug を
新たな速度 ug,+ に更新3. 格子の速度を粒子に移す演算子をMg→p とすると
uPp,+ = Mg→pug,+
4. 粒子の速度を用い, 粒子を移動
Mp→g, Mg→p は例えば次のような (必ずしも正方ではない)行列Mg→p: 粒子の速度の (重み付き)平均を表す行列Mp→g: 格子の速度の線形補間を表す行列
結果として得られるのは粘度の高い流体Mp→g, Mg→p: (おおよそ)平均を取る演算子 =⇒ 粘度
30 / 33
FLIP
FLIPのアルゴリズム1. 粒子の速度 up を格子 ug に移す
ug = Mp→gup
2. 移流項以外 ∂u
∂t= ν∆u− 1
ρ∇p+ f を格子法で計算し, 格子の速度 ug を
新たな速度 ug,+ に更新3. 格子の速度の変化量を粒子の速度に加える
uFp,+ =up +Mg→p(ug,+ − ug)
=(I −Mg→pMp→g)up +Mg→pug,+
=up −Mg→pMp→gup + uPp,+
PICでの速度 uPp,+ に
もとの速度 up −平均化した速度Mg→pMp→gup
を追加 (“高周波成分”)
4. 粒子の速度を用い, 粒子を移動
結果として得られるのはノイズが減衰しない流体高周波成分は移流項のみで時間発展その他の項, 特に拡散項の影響がは考えられていない 31 / 33
PIC/FLIP
PIC/FLIP
PICと FLIPを混ぜ合わせて良い粘度の流体を作成
uPFp,+ =αuP
p,+ + (1− α)uFp,+
=αMg→pug,+ + (1− α) {up +Mg→p(ug,+ − ug)}=(1− α)(I −Mg→pMp→g)up +Mg→pug,+
αとしては動粘性係数 ν で表されるものが用いられる
α =6δt
δx2ν
α = 0: PIC, α = 1: FLIP
32 / 33
参考文献
Robert Bridson, Fluid Simulation for Computer Graphics (2nd ed), A KPeters/CRC Press.
Jos Stam, Stable fluids, Proc. ACM SIGGRAPH.
Yongning Zhu and Robert Bridson, Animating sand as a fluid, ACMTrans. Graph. 24.
安東遼一, Chapter 13 ベクタ形式で出力可能な美しいマーブル模様の生成法 (Computer Graphics Gems JP 2012), ボーンデジタル.
安東遼一, Chapter 14 FLIP法による格子&粒子のハイブリッド流体シミュレーション (Computer Graphics Gems JP 2012), ボーンデジタル.
河村哲也, 流体解析の基礎, 朝倉書店.
桑原邦郎, 河村哲也, 流体計算と差分法, 朝倉書店.
越塚誠一, 粒子法 (計算力学レクチャーシリーズ), 丸善出版.
越塚誠一, 柴田和也, 室谷浩平, 粒子法, 丸善出版.
33 / 33