コンテンツにスキップ

コード改造のヒント

速度構造の変更

速度構造は,モジュール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にある.