スポンサーリンク
スポンサーリンク

【令和最新版】F-netの発震機構解を描きたい

スポンサーリンク
スポンサーリンク
スポンサーリンク
スポンサーリンク
gmt meca の使い方
GMTのmecaモジュールについて説明しています。
https://www.fnet.bosai.go.jp/event/search.php?LANG=ja

能登半島の地震をプロットしようと思ったら、防災科学技術研究所のF-netのメカニズム解の出力フォーマットが選べなくなっていました。
USGSなどのサイトと比較すると、色々思うのですが、安芸・リチャーズの方法は描けたので、共有します。

スポンサーリンク
スポンサーリンク

安芸・リチャーズ方式の発震機構(-Sa)

chatGPTって便利ですね。やりたいことをちゃんと伝えるのが大変ですが。。
F-netの震源メカニズム検索サイトで出力された結果を、txtファイルに保存して下記スクリプトを実行してください。
URLという変数はF-netのサイトを読んで察してください。

#!/bin/bash
# ローカルのファイル先を指定したりURLを入力してください。
url=""
input=""
rm -f mecha.txt mecha_aki.txt
# データ収集(URLから取得する場合のみ)
wget $url -O $input
## 安芸・リチャーズ
## 1,2行目は削除してカンマ区切りにする
sed -e 1,2d $input | sed -e 's/  */,/g' | awk -F"," '{print $4,$3,$5,$8,$9,$10,$6}' > mecha.txt
## 負の値の対応
sed -e 's/;[0-9]*//g' mecha.txt | sed -e 's/-\([0-9]*\)-\([0-9]*\)/-\1/g' > mecha_aki.txt
# GMT
gmt begin aki_mecha png
    gmt basemap -JM12 -R120/150/20/50 -Bafg -BWSNE+t"Aki_mecha"
    gmt coast -Df -W0.25 -Glightgray -Slightcyan -LJBR+jTR+o0/1+c40+w200+f
    gmt makecpt -Cseis -T0/50/1 -Z
    gmt meca "mecha_aki.txt" -Sa0.5 -C
    gmt colorbar -DJBR+jBL+o2/0+w-5/0.2 -Baf+l"Depth(km)"
gmt end

なんとなく恣意的なものを感じるので、画像をアップするのはやめておきます。

モーメントテンソル

x.com

以降はマイクラ電鉄さまのご指導を賜り作成できたものです。
ここに記して深く感謝申し上げます。

data.csvとしてF-netから持ってきて…

import pandas as pd
input = "./data.csv"
# date,time,latitude,longitude,depth,mj,locate,dip1,dip2,lake1,lake2,slip1,slip2,moment,depth_mecha,mw,quality,mxx,mxy,mxz,myy,myz,mzz,unit,points,point1,point2,poin3,urlの順
names = ["date", "time", "latitude", "longitude", "depth", "mj", "locate", "dip1", "dip2", "lake1", "lake2", "slip1", "slip2", "moment", "depth_mecha", "mw", "quality", "mxx", "mxy", "mxz", "myy", "myz", "mzz", "unit", "points", "point1", "point2", "point3", "url"]
# 区切り文字は半角スペース、セミコロン、カンマの3つ全て
# df[unit]はstr型で読み込む.
df = pd.read_csv(input, names=names, sep=" |;|,", engine="python", dtype={"unit": str},skiprows=1)
# df[unit]から"1e+"を削除。
df["unit"] = df["unit"].str.replace("1e+", "")
# Mrr = Mzz
# Mtt = Mxx
# Mff = Myy
# Mrt = Mxz
# Mrf = Myz * -1.0
# Mtf = Mxy * -1.0
df["mrr"] = df["mzz"]
df["mtt"] = df["mxx"]
df["mff"] = df["myy"]
df["mrt"] = df["mxz"]
df["mrf"] = df["myz"] * -1.0
df["mtf"] = df["mxy"] * -1.0
# 経度・緯度・深さ・mrr・mtt・mff・mrt・mrf・mtf・指数・Xオフセット位置・Yオフセット位置・メモ
output_df = df[["longitude", "latitude", "depth", "mrr", "mtt", "mff", "mrt", "mrf", "mtf", "unit"]]
output = "./output.csv"
output_df.to_csv(output, header=False, index=False)

とすれば行けます。ただ、安芸リチャと図示が一致しないのが気になります。。

今回はここまで。

コメント

  1. maikuradentetu より:

    MT解についてなのですが、
    Mrr = Mzz
    Mtt = Mxx
    Mff = Myy
    Mrt = Mxz
    Mrf = Myz * -1.0
    Mtf = Mxy * -1.0
    として描けるかと(間違えてたらすみません)

    • Maclaurin Maclaurin より:

      コメントありがとうございます。幸甚です。
      やってみているのですが、何かが負の値になるとgmtに怒られるのです。。

スポンサーリンク