#!/usr/bin/perl use strict; # use warnings; # マグニチュード・深さ・震央からの距離を用いて、推定震度を計算する。 # 確率論的地震動予測地図で使われた距離減衰式を簡略化して使う。 # http://www.j-map.bosai.go.jp/j-map/result/tn_275/html/html/2-7.html # ・工学的基盤(S波速度400m/s相当層)での最大速度の距離減衰式は司・翠川 (1999) #  断層最短距離式を使い、地震のタイプ別係数dは一律に0とする。 # ・基準地盤(S波速度600m/s相当層)から工学的基盤(S波速度400m/s相当層)までの最大速度の増幅率は、 #  松岡・翠川 (1994) による表層地盤の速度増幅度算定式 # ・気象庁マグニチュードからモーメントマグニチュードへの変換は、両者は等しいとして計算 # ・太平洋プレート内地震による異常震域補正はしない # ・地表面における最大速度は、工学的基盤での最大速度値に対して、一律に1倍とする # ・地表面における計測震度は、翠川・他 (1999) が示している最大速度と計測震度との関係式を用いる # ・距離減衰式のばらつきとして、司・翠川 (1999) に記載の値(常用対数標準偏差で0.23、自然対数標準偏差で0.53)を用いる my $cgiFileName = "estimateSeismicIntensity.cgi"; # QueryString取得 my %query_data; if($ENV{'QUERY_STRING'}){ my $query_buffer = $ENV{'QUERY_STRING'}; my @query_strings = split('&',$query_buffer); foreach my $query_pair (@query_strings) { my ($name, $value) = split('=', $query_pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $query_data{$name} = $value; } } # ソース表示モードのときはソース表示しておしまい if ($query_data{'mode'} && $query_data{'mode'} eq 'source') { open(SOURCE, "$cgiFileName") or die; print "Content-Type: text/plain\n\n"; while () { print; } close(SOURCE); exit(); } my($mag, $dep, $dist); my ($estimatedIntensity, $intensityVariant); if (exists($query_data{'mag'}) && $query_data{'mag'} =~ m/^\d+(\.\d+)?$/) { $mag = $query_data{'mag'}; } if (exists($query_data{'dep'}) && $query_data{'dep'} =~ m/^\d+(\.\d+)?$/) { $dep = $query_data{'dep'}; } if (exists($query_data{'dist'}) && $query_data{'dist'} =~ m/^\d+(\.\d+)?$/) { $dist = $query_data{'dist'}; if ($dist < 0.1) {$dist = 0.1;} } if (defined($mag) && defined($dep) && defined($dist)){ ($estimatedIntensity, $intensityVariant) = &calcSeismicIntensity($mag,$dep, $dist); } print "content-type:text/html\n\n"; print < 震度推定

震度推定CGI


マグニチュード:
震源の深さ(km):
震央からの距離(km):
HTML if ($estimatedIntensity && $intensityVariant) { printf "

推定震度:%.1f±%.1f

\n", $estimatedIntensity, $intensityVariant; } else { print "

データを入れると推定震度を計算します。

\n"; } print <方法とか

マグニチュード・深さ・震央からの距離を用いて、推定震度を計算する。
確率論的地震動予測地図で使われた距離減衰式を簡略化して使う。
http://www.j-map.bosai.go.jp/j-map/result/tn_275/html/html/2-7.html

HTML sub calcSeismicIntensity { my ($mag, $dep, $dist) = ($_[0], $_[1], $_[2]); $dist = sqrt($dep**2 + $dist**2); my $PGVb600 = 10**(0.58*$mag + 0.0038*$dep + 0 - 1.29 - log($dist + 0.0028*(10**(0.50*$mag))) / log(10) - 0.002*$dist); my $PGVb400 = $PGVb600 * 1.31; my $PGV = $PGVb400 * 1; my $estimatedIntensity = 2.68 + 1.72*(log($PGV) / log(10)); # 推定震度は、地表増幅が0.7〜1.8倍とすれば、計算上この値-0.25〜+0.45 # さらに、もとの司・翠川(1999)に記載の誤差から log($PGV)/log(10) が±0.23なので、±0.4程度 # 一応、+0.1±0.7としておく。 $estimatedIntensity += 0.1; my $intensityVariant = 0.7; return($estimatedIntensity, $intensityVariant); }