課題4−2の解説 step1. プログラム sample05_PDE_FTCS.c を参考に線形移流方程式を数値的に解く cプログラムを作成する。まずは、このサンプルプログラムをよく理解しながら 自分でファイルに打ち込んでいく。 このプログラムの基本構成は、次の様になっている。 1.座標を設定する。すなわち、時間座標の差分点(タイムステップ)と    空間座標の差分点(格子点)を設定する。 2. 初期条件を設定する。 3. 時間発展の式を計算(積分)する。同時に境界条件も課す。 4. タイムステップごとに結果を出力する。 この手順は時間的に変化する量を計算する(ダイナミクスを解く)物理の問題では 基本的には共通の手順である。また、このプログラムの中では、厳密解も求めて 数値解と比べられるようにしてある。 step2. ファイルに打ち込んだら、いつもの通りコンパイルして実行する。 gcc -lm sample05_PDE_FTCS.c a.exe > output.dat とすると、output.dat のファイルの中に数値解(と厳密解)が書き込まれる。 データファイル output.dat には、次の様に     "time step = 0, x=x[0] のデータ"     "time step = 0, x=x[1] のデータ" ……………………………………     "time step = 0, x=x[ngrid]のデータ" ←( 1 行空いてる )     "time step = 1, x=x[0] のデータ"     "time step = 1, x=x[1] のデータ" ……………………………………     "time step = 1, x=x[ngrid]のデータ" ←( 1 行空いてる )     "time step = 2, x=x[0] のデータ"     "time step = 2, x=x[1] のデータ" ……………………………………     "time step = 2, x=x[ngrid]のデータ" ←( 1 行空いてる ) と、各タイムステップごとに全空間格子点でのデータを書き出すように書いてある。 各タイムステップごとのデータは空白行を1行あいだにはさんで書き出してある。 このように1行あけておくと、gnuplotはデータを続けずに、各タイムステップごとに プロットを重ねて書いてくれる。(2行あけると各タイムステップごとに線の 種類も変えてくれるんだったような気がするが、忘れました。) step3. 格子点上の厳密解もデータファイルに書き出されてあるから、これも試しに 重ねて書いてみても良い。(いつものようにサンプルプログラムが間違っている 可能性もあるから、結果が物理的に正しいかよく吟味せよ。) step4. 上のプログラムを変更して、FTCSを含め少なくとも3つの有限差分法を用いた プログラムを作成し、計算を実行し、グラフを作ってみること。 レポートには結果の考察も含めること。 step5. 余裕のある者は、初期条件を次の様に変更してシミュレーションを実行してみよ。 f(x) = 1.0 for x <= -0.2 f(x) = 0.5*(1.0 - sin(pi*x/0.4)) for -0.2 < x < 0.2 f(x) = 0.0 for 0.2 <= x step6. さらに余裕のある者は、プログラムの中でタイムステップ、格子点の数、 格子点の間隔等をいろいろ変えてみて結果がどのように変わるか試してみよ。 特に、格子点の数を21か41点に固定して、タイムステップτを変えてみて、 結果がどのように変わるか調べてみよ。(サンプルプログラムの中では クーラン数が0.5になるように格子点とタイムステップをとってある。)