コード改造のヒント¶
速度構造の変更¶
速度構造は,モジュールm_medium
から呼ばれるサブルーチンvmodel_ast
によって定義される.これらのvmodel
サブルーチンは,速度構造の種類によらず,次表のような入出力変数をもつ.
変数名 | in/out | type | 説明 |
---|---|---|---|
io_prm |
in | integer | 入力パラメタファイルの装置番号 |
i0,i1 |
in | integer | x方向インデックスの始値と終値 |
j0,j1 |
in | integer | y方向インデックスの始値と終値 |
k0,k1 |
in | integer | z方向インデックスの始値と終値 |
xc(i0:i1) |
in | real | x座標値配列 |
yc(i0:i1) |
in | real | y座標値配列 |
zc(i0:i1) |
in | real | z座標値配列 |
vcut |
in | real | カットオフ速度 |
rho(k0:k1,i0:i1,j0:j1) |
out | real | 密度 [g/cm] |
lam(k0:k1,i0:i1,j0:j1) |
out | real | Lameの係数 [g/cm] |
mu(k0:k1,i0:i1,j0:j1) |
out | real | Lameの係数 [g/cm] |
qp(k0:k1,i0:i1,j0:j1) |
out | real | 内部減衰 |
qs(k0:k1,i0:i1,j0:j1) |
out | real | 内部減衰 |
bddep(i0:i1,j0:j1,0:NBD) |
out | real | 不連続面深さ [km] |
位置座標配列xc, yc, zc
の位置での構造rho, lam, mu, qp, qs
を与えるようなサブルーチンを自作することで,任意の速度構造に帯するシミュレーションが実現できる.ただし,xc, yc, zc
はMPIで分割される領域内よりもやや広い範囲が用いられる.これは,通信による値の交換や,震源ならびに地表海底境界条件に必要となるためである.
地表境界や海底境界面はm_medium
内で自動判定される.それぞれlam
およびmu
が初めて非ゼロになるグリッド位置が境界面であると判定される.
変数bddep(:,:,0)
は地表であることが仮定され,スナップショットの可視化に用いられる.その他bddep(:,:,1:NBD)
は震源や観測点を境界面の位置に強制的に設定する際に用いられる.
震源時間関数の追加¶
震源時間関数の種別は,パラメタstftype
の選択に応じて,関数source__momentrate
で呼び出される.各要素震源時間関数の関数定義はshare/m_fdtool.F90
に格納されている.予め定義されている以外の震源時間関数形状を使いたければ,ここに関数を付け加えるのが簡単であろう.
また,で利用されている震源時間関数はすべて破壊開始時間tbeg
とライズタイムtrise
をパラメタとして取っている.これらは配列変数srcprm(:)
に格納されている.もし震源時間関数が3つ以上のパラメタを必要とする場合には,この配列のサイズ(n_stfprm
)を拡大すればよい
追加パラメタの読み込みかた¶
多くのモジュールでは(modulename)__setup
なるサブルーチンが計算開始時に呼ばれ,入力ファイルからパラメタを取得する.追加パラメタを同じようにファイルから読み込むには,subroutine readini
を用いる.実装はsrc/shared/m_readini.F90
にある.