3−4.偏微分方程式のまとめと演習

Elliptic (楕円型) Equations

Laplace Equation:  ∂2u/∂x2 + ∂2u/∂y2 = 0

Poisson Equation:  ∂2u/∂x2 + ∂2u/∂y2  + f (x, y) = 0

 

Hyperbolic (双曲型) Equations

Wave Equation:  ∂2y/∂t2 - c22y/∂x2 = 0

 

Parabolic (放物型) Equations

Diffusion Equation:  ∂u/∂t - k2u/∂x2 = 0

 

        《演習》

  1. 初期温度分布  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]
     
  2. 同じ問題でGaussの消去法を使ったCrank-Nicholson methodを試せ。[fortran, C]
     
  3. さらにGauss-Seidel反復法を使ったCrank-Nicholson methodを試せ。[fortran, C]
     
  4. (アドバンストな自習問題)臨界点近傍にある系を現象論的に記述する方程式として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.5c = 0.1、L = 1dx = 1dt = 0.1とし、空間の次元は2次元とする。システムサイズは128x128で周期的境界条件、初期条件はj0.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]
     
  5. (アドバンストな自習問題)気液相転移など秩序変数(j)が保存量である場合には、系の時間発展は以下の保存型TDGL式で記述できる。Simple methodで数値シミュレーションする2次元 のプログラムを作り、系のダイナミクスを非保存の場合と比較せよ。

    TDGL方程式(保存):  ∂j/∂t = L 2dF/dj = L2(j3 + bj - c 2j) = 0

    Simple methodで書いたサンプルプログラムはここ [fortran]

    動画[mpeg]
     
  6. (さらにアドバンストな自習問題)上の4、5についてCrank-Nicholson法への改良を試みよ。