2 heat1d-i-glsc.c

heat1d-i-glsc.c は、同次Dirichlet境界条件のもとでの1次元熱方 程式を$ \theta$法という陰解法 (implicit shceme) で解くためのプログラムで ある。

桂田 [2] の 7.5 節 (3) を見ながら解読すると良い。 (なお、連立1次方程式を解くための関数 trilu(), trisol() については、桂田 [3]の5章 (特に7節) を見よ。)

次のような工夫をしてあるので、 陽解法の計算をするためにも、 heat1d-e-glsc.c でなく、 heat1d-i-glsc.c を使う方が便利である ($ \theta$ 法は、$ \theta=0$ とすると陽解法である)。

  1. 初期値を複数用意してあって、番号で選べるようになっている。

          $\displaystyle f_1(x)=\left\{ \begin{array}[tb]{ll} x & \text{($0\le x\le1/2$)} \ 1-x & \text{($1/2\le x\le1$)}, \end{array} \right.$
          $\displaystyle f_2(x)\equiv 1,$
          $\displaystyle f_3(x)=\sin(\pi x),$

    $ f_4$, $ f_5$ はグラフがジグザグしている関数である。
  2. すべての時間ステップでグラフを描くと、 画面が塗りつぶしたようになって見にくいので、 指定した時間間隔 $ \Delta t$ でグラフを描くようになっている。
  3. プログラム中の変数 eraes_always, print_numerical_data の値を$ 1$にすると、 それぞれ、ステップ毎に画面を消去する (古いステップで描いたグラフを消す)、 計算した数値データを画面表示する。

% cglsc heat1d-i-glsc.c
% ./heat1d-i-glsc
入力して下さい : nfunc(1..5)=1
入力して下さい : θ=0
入力して下さい : N=100
入力して下さい : λ=0.5
 時間の刻み幅τ= 5e-05 になりました。
入力して下さい : 最終時刻 Tmax=1
入力して下さい : グラフ書き換え時間間隔(Δt)=0.01
T=   0.0000e+00
  I     u(i)      I     u(i)      I     u(i)      I     u(i)      I     u(i)
  0  0.0000e+00   1  1.0000e-02   2  2.0000e-02   3  3.0000e-02   4  4.0000e-02
  5  5.0000e-02   6  6.0000e-02   7  7.0000e-02   8  8.0000e-02   9  9.0000e-02
 10  1.0000e-01  11  1.1000e-01  12  1.2000e-01  13  1.3000e-01  14  1.4000e-01
 15  1.5000e-01  16  1.6000e-01  17  1.7000e-01  18  1.8000e-01  19  1.9000e-01
 20  2.0000e-01  21  2.1000e-01  22  2.2000e-01  23  2.3000e-01  24  2.4000e-01
 25  2.5000e-01  26  2.6000e-01  27  2.7000e-01  28  2.8000e-01  29  2.9000e-01
 30  3.0000e-01  31  3.1000e-01  32  3.2000e-01  33  3.3000e-01  34  3.4000e-01
 35  3.5000e-01  36  3.6000e-01  37  3.7000e-01  38  3.8000e-01  39  3.9000e-01
 40  4.0000e-01  41  4.1000e-01  42  4.2000e-01  43  4.3000e-01  44  4.4000e-01
 45  4.5000e-01  46  4.6000e-01  47  4.7000e-01  48  4.8000e-01  49  4.9000e-01
 50  5.0000e-01  51  4.9000e-01  52  4.8000e-01  53  4.7000e-01  54  4.6000e-01
 55  4.5000e-01  56  4.4000e-01  57  4.3000e-01  58  4.2000e-01  59  4.1000e-01
 60  4.0000e-01  61  3.9000e-01  62  3.8000e-01  63  3.7000e-01  64  3.6000e-01
 65  3.5000e-01  66  3.4000e-01  67  3.3000e-01  68  3.2000e-01  69  3.1000e-01
 70  3.0000e-01  71  2.9000e-01  72  2.8000e-01  73  2.7000e-01  74  2.6000e-01
 75  2.5000e-01  76  2.4000e-01  77  2.3000e-01  78  2.2000e-01  79  2.1000e-01
 80  2.0000e-01  81  1.9000e-01  82  1.8000e-01  83  1.7000e-01  84  1.6000e-01
 85  1.5000e-01  86  1.4000e-01  87  1.3000e-01  88  1.2000e-01  89  1.1000e-01
 90  1.0000e-01  91  9.0000e-02  92  8.0000e-02  93  7.0000e-02  94  6.0000e-02
 95  5.0000e-02  96  4.0000e-02  97  3.0000e-02  98  2.0000e-02  99  1.0000e-02
100  0.0000e+00
マウスでウィンドウをクリックして下さい。
%

図 2: heat1d-i-glsc の実行結果 (nfunc$ =1$, $ N=100$, $ \lambda =1/2$, $ T_{\text {max}}=1$)
Image HEAT1DI-v

桂田 祐史
2019-01-18