3−4.偏微分方程式のまとめと演習
Elliptic (楕円型) Equations
Laplace Equation: ∂2u/∂x2 + ∂2u/∂y2 = 0
Poisson Equation: ∂2u/∂x2 + ∂2u/∂y2 + f (x, y) = 0
- 線形の多元連立方程式に還元されるので、4章の行列演算で取り扱う。
Hyperbolic (双曲型) Equations
Wave Equation: ∂2y/∂t2 - c2 ∂2y/∂x2 = 0
- Simple method
ujn+1 = ujn - cdt/2dx (uj+1n - uj-1n)
yjn+1 = yjn + cdt/2dx (yj+1n - yj-1n + 2ujn+1)
- the Lax method
ujn+1 = (uj+1n + uj-1n )/2 - cdt/2dx (uj+1n - uj-1n)
yjn+1 = (yj+1n + yj-1n )/2 + cdt/2dx (yj+1n - yj-1n + 2ujn+1)
Parabolic (放物型) Equations
Diffusion Equation: ∂u/∂t - k ∂2u/∂x2 = 0
- Simple method
ujn+1 = ujn - kdt/dx2 (uj+1n - 2ujn + uj-1n)
- the Crank-Nicholson method
ujn+1 = ujn - kdt/2dx2 (uj+1n+1 - 2ujn+1 + uj-1n+1 + uj+1n - 2ujn + uj-1n)
(これは陰解法。消去法で連立方程式を解くか、反復法で解を求める。)
《演習》
- 初期温度分布 u(x,0) = 2x [0 < x < 0.5]、2(1-x) [0.5 < x < 1]、
境界条件 u(0,t) = u(1,t) = 0 [for any t]、として時刻t=0.1における温度分布を計算する。
dx=0.1を固定し、dtを変化させてSimple methodの安定性を議論せよ。a=kdt/dx2がどのあたりで不安定化するか?
(Diffusion Equationで熱拡散係数k=1とする。)
サンプルプログラムを参考にしてもよい。[fortran, C]
f77 -O -o simple simple.f
./simple
結果はgnuplotを使ってグラフ化せよ。
gnuplot
.....
gnuplot> plot 'fort.10' w lines, 'fort.11' w points ←解析解との比較
解析解: u(x,t) = 8/p2i=n∞(1/n2)sin(np/2)sin(npx)exp(-n2p2t) (data at t=0.1[fort.10])
動画[a=0.1, 0.5, 0.6]
- 同じ問題でGaussの消去法を使ったCrank-Nicholson methodを試せ。[fortran, C]
- さらにGauss-Seidel反復法を使ったCrank-Nicholson methodを試せ。[fortran, C]
- (アドバンストな自習問題)臨界点近傍にある系を現象論的に記述する方程式としてTDGL(Time Dependent Ginzburg-Landau)式がある。磁性など秩序変数(j)が保存量でない場合には、系の時間発展は以下の非保存型TDGL式で記述できる。この放物型の偏微分方程式をSimple methodで数値シミュレーションするプログラムを作り、bの正負で系のダイナミクスがどう変化するかを議論せよ。
GL Free Energy: F=∫dxdy ( j4/4 + bj2/2 + c(∇j)2)
TDGL方程式(非保存): ∂j/∂t = -L dF/dj = -L(j3 + bj - c ∇2j) = 0
簡単のため、b=±0.5、c = 0.1、L = 1、dx = 1、dt = 0.1とし、空間の次元は2次元とする。システムサイズは128x128で周期的境界条件、初期条件はj=±0.025の範囲でランダムに与えよ。ダイナミクスの議論には、例えば界面積(2次元では界面長)が時間に対してどのように変化するのかを検証せよ。
Simple methodで書いたサンプルプログラムはここ [fortran, C]
f77 -O -o tdgl_simple tdgl_simple.f
./tdgl_simple
gnuplot
.....
gnuplot> set contour
gnuplot> set data style lines
gnuplot> splot 'fort.10' ←秩序変数(j)の空間分布
gnuplot> set logscale xy
gnuplot> plot 'fort.11' u 1:2 ←時間-界面エネルギーの両対数プロット
gnuplot> plot 'fort.11' u 1:4 ←時間-界面長の両対数プロット
動画[mpeg]
- (アドバンストな自習問題)気液相転移など秩序変数(j)が保存量である場合には、系の時間発展は以下の保存型TDGL式で記述できる。Simple methodで数値シミュレーションする2次元 のプログラムを作り、系のダイナミクスを非保存の場合と比較せよ。
TDGL方程式(保存): ∂j/∂t = L ∇2dF/dj = L∇2(j3 + bj - c ∇2j) = 0
Simple methodで書いたサンプルプログラムはここ [fortran]
動画[mpeg]
- (さらにアドバンストな自習問題)上の4、5についてCrank-Nicholson法への改良を試みよ。