課題演習DA(地震):(1) 地震の震源決定の原理
(久家担当)

1.「直感的」原理

ある地下(震源)で波が発せられて、地表にある複数の場所で波が到達した時刻を 観測する場合を考えます。観測点として、以下の図1に示すような10点を想定します。 ここでは、単純に、波が伝わる速度は、地下の媒質中で一定であるとします。


図1:10つの観測点(緑の三角)の位置(平面図)。
例えば、図中の(10,20)はx=10km,y=20kmの座標に観測点があることを示す。 図中で、横軸がx、縦軸がy。

【ステップ1】
波が到達した時刻を調べたら、下の図2のようになりました。 震源はどのあたりにあると考えられますか? 波が発せられたのはいつ頃でしょうか? なぜそのように判断しましたか?


図2:波の到達時刻の観測値(赤字)。
例えば、図中の1:10:10.477は、1時10分10.477秒に観測点に波が来たことを示す。

【ステップ2】
仮の震源として、星印の場所を考えてみましょう。 この場所から波が発したとすると、地下の波の伝播速度がわかっていれば、 波の予測到達時刻を計算することができます。 その結果が、次の図3の青字です。 さて、仮の震源を本当の震源の位置に近づけるためには、 どのように動かしたらよいでしょうか? なぜそのように判断しましたか?


図3:到達時刻の観測値(赤字)と仮の震源に対する予測値(青字)。
仮の震源の位置は、黒の星印で示されている。

2.数式による表現

震源の位置と時間を計算機に 求めさせるプログラムを作るために、1.の「直感的」原理を 数式で考えてみましょう。 その説明のpdfファイルはこちら

3.地下構造の仮定:波の伝播する速度が媒質中で一定の場合

2.でみたように、震源決定には、行列Gを用います。 このGを計算するため、地下での波の伝播速度の分布を仮定する必要があります。

本演習では、 もっとも単純なケースとして、 均質な媒質の中で地震が起こり、その波の到達時刻を地表の観測点で 観測する場合を想定します。 行列Gは、一般的には、仮定した速度の分布をもとに波線追跡を行い 数値的に微分値を算出しますが、 均質媒質の場合には、解析的にえた式から微分値を計算できます。

均質な媒質では、波は観測点と震源を結ぶ直線で伝播します。 このとき、観測点に波が到達する時刻は、以下の式で与えられます。

【演習1−1】  2.の式(1.7)のGの要素を計算するための式をたてましょう。

【演習1−2】 2.の方法に従ってプログラムを作り、 図1の観測点の位置および図2の観測値の場合の震源を決定してみましょう。
プログラムで決定した震源が正解であることが確認できたら、 出来る人は、2.のpdfファイル内の(参考)をもとに、 推定値の共分散行列と標準偏差も同じプログラムの中で計算できるようにしましょう。

※ 波の伝播速度 V には、5 km/sを使ってください。 (これは正しい値です)

(1) Pythonでプログラムを作成する場合 

作ろうとしているプログラムの流れは、 こちら です。

Pythonでプログラムを作成する場合には、 NumPyライブラリをimportすることで、各種の行列計算(逆行列の算出を含む)を行うことができます。

(2) Fortranでプログラムを作成する場合 

作ろうとしているメインプログラムの流れは、 こちら です。

Fortranでプログラムを作成する場合には、 逆行列は、次の2つのサブルーチンを使って計算できます(メインプログラムと同じところにダウンロードしてください)。 他の授業で使ったサブルーチンやライブラリがあれば、そちらを使っても構いません。
ludcmp.f
lubksb.f

上の2つのサブルーチンをメインプログラムの中で以下にように使うと、 n次の正方行列 a の逆行列が、正方行列 ainv に求められます。 (LU decompositionと呼ばれる方法を使っています) なお、npは配列の大きさを定義するための整数です。 npは n以上の整数であればよく、nと同じ値でも問題ありません。

---サブルーチンの使用例:ここから---

real:: a(np,np),ainv(np,np)
real:: dum
integer:: indx(np)

メインプログラムの部分

ainv=0
do i=1,n
ainv(i,i)=1
enddo
call ludcmp(a,n,np,indx,dum)
do j=1,n
call lubksb(a,n,np,indx,ainv(1,j))
enddo

メインプログラムの部分

---サブルーチンの使用例:ここまで---

ludcmp.f lubksb.fは、メインプログラムに付け加える必要は ありません(そうすると、逆にうまくいかないことがあります。) コンパイルするときに、メインプログラムのファイルといっしょに並べます。

例えば、da-main.f90というファイルがメインプログラムであるとしたら、
gfortran da-main.f90 ludcmp.f lubksb.f
./a.out
とすると、プログラムは動きます。

【演習1−3】  波の伝播速度 Vを 誤った値 4.8 km/sにしたときに、 次の2つの場合で、 同じ図2の観測値から決定される震源の位置と時間が どのように変化するかを調べましょう。 出来る人は、推定値の共分散行列の値がどのように変化するかも調べましょう。
(1) 図1の10観測点すべてを使用した場合
(2) 図1の縦軸 y<0にある5観測点だけを使用した場合

【演習1−4】 余力のある人は、震源の位置・時間と一緒に、 波の伝播速度 V の値も推定できるプログラムを作ってみてください。