# -*- coding: utf-8 -*-
# vim: tabstop=4 shiftwidth=4 softtabstop=4
#
# Copyright (C) 2014-2021 GEM Foundation
#
# OpenQuake is free software: you can redistribute it and/or modify it
# under the terms of the GNU Affero General Public License as published
# by the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# OpenQuake is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with OpenQuake. If not, see <http://www.gnu.org/licenses/>.
"""
Module exports :class:`BergeThierryEtAl2003SIGMA`.
"""
import copy
import numpy as np
from scipy.constants import g
from openquake.hazardlib.gsim.base import GMPE, CoeffsTable
from openquake.hazardlib import const
from openquake.hazardlib.imt import PGA, SA
# TODO: Check whether lower validity bound is 4 or 7 km
[docs]class BergeThierryEtAl2003Ms(GMPE):
"""
Implements GMPE developed by Catherine Berge-Thierry, Fabrice Cotton,
Oona Scoti, Daphne-Anne Griot-Pommera, and Yoshimitsu Fukushima and
published as "New Empirical Response Spectral Attenuation Laws For Moderate
European Earthquakes" (2003, Journal of Earthquake Engineering, 193-222)
This class corresponds to the original formulation, usable with Ms.
"""
#: Supported tectonic region type is active shallow crust, see
#: `Introduction`, page 194.
DEFINED_FOR_TECTONIC_REGION_TYPE = const.TRT.ACTIVE_SHALLOW_CRUST
#: Supported intensity measure types are spectral acceleration, and peak
#: ground acceleration. The original manuscript provide coefficients only
#: SA. For PGA, coefficients are assumed equal to the ones of SA for the
#: smallest period (0.03 s)
DEFINED_FOR_INTENSITY_MEASURE_TYPES = {PGA, SA}
#: Supported intensity measure component is horizontal, see page 196.
DEFINED_FOR_INTENSITY_MEASURE_COMPONENT = const.IMC.HORIZONTAL
#: Supported standard deviation type is total, see table 3, page 203
DEFINED_FOR_STANDARD_DEVIATION_TYPES = {const.StdDev.TOTAL}
#: Required site parameters is Vs30, used to distinguish between rock sites
#: (Vs30 >= 800) m/s and alluvium sites (300 < Vs < 800), see section 2.2.3
#: page 201
REQUIRES_SITES_PARAMETERS = {'vs30'}
#: Required rupture parameters is magnitude, see equation 1 page 201
REQUIRES_RUPTURE_PARAMETERS = {'mag'}
#: Required distance measure is hypocentral distance, see equation 1 page
#: 201
REQUIRES_DISTANCES = {'rhypo'}
[docs] def get_mean_and_stddevs(self, sites, rup, dists, imt, stddev_types):
return self._get_mean_and_stddevs(sites, rup, dists, imt,
stddev_types)
def _get_stddevs(self, C, stddev_types, num_sites, mag_conversion_sigma):
"""
Return total standard deviation.
"""
assert all(stddev_type in self.DEFINED_FOR_STANDARD_DEVIATION_TYPES
for stddev_type in stddev_types)
sigma = np.zeros(num_sites) + C['sigma'] * np.log(10)
sigma = np.sqrt(sigma ** 2 + (C['a'] ** 2) * (
mag_conversion_sigma ** 2))
stddevs = [sigma for _ in stddev_types]
return stddevs
def _get_mean_and_stddevs(self, sites, rup, dists, imt, stddev_types,
mag_conversion_sigma=0.0):
"""
See :meth:`superclass method
<.base.GroundShakingIntensityModel.get_mean_and_stddevs>`
for spec of input and result values.
"""
# extract dictionaries of coefficients specific to required
# intensity measure type
C = self.COEFFS[imt]
# clip distance at 4 km, minimum distance for which the equation is
# valid (see section 2.2.4, page 201). This also avoids singularity
# in the equation
rhypo = np.array(dists.rhypo) # make a copy
rhypo[rhypo < 4.] = 4.
mean = C['a'] * rup.mag + C['b'] * rhypo - np.log10(rhypo)
mean[sites.vs30 >= 800] += C['c1']
mean[sites.vs30 < 800] += C['c2']
# convert from log10 to ln, and from cm/s2 to g
mean = mean * np.log(10) - 2 * np.log(10) - np.log(g)
stddevs = self._get_stddevs(C, stddev_types, rhypo.shape[0],
mag_conversion_sigma=mag_conversion_sigma)
return mean, stddevs
#: Coefficient tables are constructed from the electronic suplements of
#: the original paper. Original coefficients in function of frequency.
COEFFS = CoeffsTable(sa_damping=5, table="""\
IMT a b c1 c2 sigma
pga 0.3118000 -0.0009303 1.537000 1.57300 0.2923
0.029412 0.3118000 -0.0009303 1.537000 1.57300 0.2923
0.030000 0.3114000 -0.0009334 1.541000 1.57600 0.2924
0.032258 0.3097000 -0.0009422 1.558000 1.58900 0.2928
0.034000 0.3083000 -0.0009547 1.573000 1.60200 0.2935
0.035714 0.3068000 -0.0009822 1.593000 1.61800 0.2947
0.040000 0.3033000 -0.0011190 1.653000 1.66500 0.2982
0.045455 0.3016000 -0.0012820 1.701000 1.70000 0.3015
0.050000 0.2992000 -0.0013410 1.740000 1.72900 0.3009
0.053000 0.2981000 -0.0014290 1.766000 1.74900 0.3022
0.055556 0.2969000 -0.0014320 1.785000 1.76500 0.3027
0.058824 0.2960000 -0.0014600 1.809000 1.78400 0.3040
0.059999 0.2960000 -0.0014720 1.814000 1.78800 0.3041
0.062500 0.2965000 -0.0015070 1.826000 1.79600 0.3047
0.064998 0.2944000 -0.0015150 1.851000 1.81700 0.3059
0.066667 0.2933000 -0.0015130 1.865000 1.82900 0.3059
0.068966 0.2924000 -0.0015460 1.881000 1.84200 0.3048
0.069999 0.2920000 -0.0015700 1.888000 1.84900 0.3046
0.071429 0.2909000 -0.0015830 1.901000 1.86100 0.3047
0.074074 0.2879000 -0.0015550 1.926000 1.88700 0.3059
0.075002 0.2871000 -0.0015400 1.933000 1.89300 0.3066
0.076923 0.2857000 -0.0015200 1.947000 1.90600 0.3072
0.080000 0.2866000 -0.0015310 1.954000 1.91100 0.3061
0.083333 0.2858000 -0.0015520 1.968000 1.92700 0.3058
0.084998 0.2856000 -0.0015830 1.976000 1.93500 0.3053
0.086957 0.2848000 -0.0015710 1.987000 1.94600 0.3042
0.090001 0.2819000 -0.0015360 2.011000 1.97300 0.3020
0.090909 0.2809000 -0.0015280 2.020000 1.98100 0.3016
0.095238 0.2781000 -0.0015430 2.054000 2.01000 0.3017
0.100000 0.2786000 -0.0014740 2.059000 2.01600 0.3019
0.105260 0.2776000 -0.0014220 2.072000 2.03400 0.3043
0.110000 0.2783000 -0.0014420 2.075000 2.04500 0.3073
0.111110 0.2783000 -0.0014380 2.077000 2.04700 0.3079
0.117650 0.2793000 -0.0014380 2.081000 2.05600 0.3103
0.120000 0.2806000 -0.0014360 2.076000 2.05400 0.3106
0.125000 0.2831000 -0.0014150 2.066000 2.05100 0.3121
0.129030 0.2863000 -0.0014400 2.052000 2.04200 0.3137
0.130010 0.2867000 -0.0014250 2.050000 2.04000 0.3142
0.133330 0.2887000 -0.0013970 2.040000 2.03300 0.3156
0.137930 0.2903000 -0.0013380 2.032000 2.02800 0.3161
0.140000 0.2915000 -0.0013220 2.027000 2.02200 0.3166
0.142860 0.2933000 -0.0013070 2.018000 2.01400 0.3173
0.148150 0.2950000 -0.0012560 2.009000 2.01000 0.3191
0.149990 0.2955000 -0.0012180 2.004000 2.00900 0.3196
0.153850 0.2955000 -0.0010520 1.997000 2.00700 0.3201
0.160000 0.2939000 -0.0008056 1.996000 2.01300 0.3200
0.166670 0.2952000 -0.0007097 1.989000 2.00600 0.3215
0.170010 0.2974000 -0.0006986 1.978000 1.99400 0.3230
0.173910 0.3016000 -0.0007341 1.957000 1.97000 0.3247
0.179990 0.3089000 -0.0007793 1.915000 1.93000 0.3267
0.181820 0.3109000 -0.0007826 1.901000 1.91900 0.3271
0.190010 0.3147000 -0.0007369 1.868000 1.89400 0.3262
0.190480 0.3149000 -0.0007337 1.867000 1.89300 0.3262
0.200000 0.3167000 -0.0006889 1.843000 1.88100 0.3250
0.208330 0.3196000 -0.0006719 1.814000 1.86100 0.3261
0.217390 0.3254000 -0.0006750 1.770000 1.82500 0.3281
0.219780 0.3271000 -0.0006918 1.758000 1.81500 0.3292
0.227270 0.3303000 -0.0006678 1.726000 1.79200 0.3320
0.238100 0.3340000 -0.0006171 1.683000 1.76200 0.3367
0.239980 0.3344000 -0.0005988 1.677000 1.75800 0.3371
0.250000 0.3365000 -0.0005750 1.651000 1.73600 0.3394
0.259740 0.3430000 -0.0007075 1.609000 1.69700 0.3422
0.263160 0.3442000 -0.0007200 1.599000 1.68800 0.3429
0.277780 0.3501000 -0.0007520 1.550000 1.64500 0.3444
0.280030 0.3511000 -0.0007530 1.542000 1.63800 0.3447
0.290020 0.3555000 -0.0007836 1.506000 1.60500 0.3458
0.300030 0.3590000 -0.0008520 1.477000 1.58100 0.3477
0.303030 0.3602000 -0.0008737 1.466000 1.57300 0.3483
0.316960 0.3671000 -0.0009272 1.412000 1.52500 0.3491
0.320000 0.3690000 -0.0009468 1.397000 1.51200 0.3487
0.333330 0.3742000 -0.0010100 1.352000 1.47200 0.3474
0.340020 0.3752000 -0.0010060 1.337000 1.46100 0.3469
0.344830 0.3760000 -0.0009698 1.326000 1.45200 0.3471
0.357140 0.3807000 -0.0009114 1.286000 1.41500 0.3481
0.359970 0.3822000 -0.0009039 1.275000 1.40500 0.3484
0.370370 0.3867000 -0.0008635 1.237000 1.37200 0.3492
0.379940 0.3909000 -0.0008074 1.199000 1.33900 0.3500
0.384620 0.3931000 -0.0007955 1.179000 1.32100 0.3507
0.400000 0.3997000 -0.0007078 1.119000 1.26700 0.3517
0.416670 0.4028000 -0.0006613 1.078000 1.23200 0.3512
0.419990 0.4034000 -0.0006513 1.070000 1.22600 0.3513
0.434780 0.4070000 -0.0006167 1.029000 1.19100 0.3521
0.439950 0.4089000 -0.0006118 1.011000 1.17400 0.3527
0.454550 0.4148000 -0.0005931 0.960100 1.12500 0.3547
0.459980 0.4165000 -0.0005816 0.944000 1.10900 0.3549
0.476190 0.4222000 -0.0005404 0.893100 1.05800 0.3555
0.480080 0.4239000 -0.0005484 0.879500 1.04500 0.3556
0.500000 0.4323000 -0.0005680 0.815000 0.97970 0.3555
0.520020 0.4372000 -0.0005396 0.764200 0.93240 0.3568
0.526320 0.4379000 -0.0005050 0.752200 0.92080 0.3570
0.539960 0.4394000 -0.0004330 0.727100 0.89590 0.3574
0.555560 0.4418000 -0.0003601 0.694100 0.86610 0.3587
0.559910 0.4425000 -0.0003380 0.684400 0.85710 0.3592
0.580050 0.4472000 -0.0002702 0.635700 0.81170 0.3610
0.588240 0.4492000 -0.0002522 0.615700 0.79260 0.3609
0.599880 0.4516000 -0.0002175 0.589500 0.76820 0.3603
0.619960 0.4559000 -0.0001953 0.547800 0.72820 0.3604
0.625000 0.4569000 -0.0001995 0.538300 0.71870 0.3609
0.640200 0.4596000 -0.0001666 0.510600 0.69100 0.3625
0.660070 0.4637000 -0.0001549 0.472500 0.65200 0.3647
0.666670 0.4655000 -0.0001550 0.457300 0.63630 0.3649
0.679810 0.4688000 -0.0001668 0.428400 0.60810 0.3655
0.699790 0.4732000 -0.0001700 0.385700 0.56760 0.3667
0.714290 0.4771000 -0.0002019 0.354800 0.53540 0.3680
0.750190 0.4847000 -0.0003009 0.287100 0.46810 0.3700
0.769230 0.4875000 -0.0003122 0.254500 0.43800 0.3703
0.800000 0.4940000 -0.0002568 0.190600 0.37820 0.3714
0.833330 0.5010000 -0.0001932 0.126400 0.31450 0.3746
0.850340 0.5040000 -0.0001433 0.096150 0.28420 0.3758
0.900090 0.5098000 3.28E-05 0.020060 0.21300 0.3747
0.909090 0.5104000 8.39E-05 0.008195 0.20220 0.3744
1.000000 0.5199000 0.0002516 -0.116200 0.08290 0.3737
1.100100 0.5273000 0.0003908 -0.212300 -0.02900 0.3794
1.111100 0.5278000 0.0004074 -0.220700 -0.03875 0.3804
1.200500 0.5361000 0.0004479 -0.313300 -0.13380 0.3838
1.250000 0.5409000 0.0004860 -0.367900 -0.18910 0.3877
1.300400 0.5444000 0.0005329 -0.411300 -0.23770 0.3920
1.400600 0.5481000 0.0007676 -0.487000 -0.31550 0.3935
1.428600 0.5494000 0.0008272 -0.509500 -0.33850 0.3941
1.499300 0.5527000 0.0009124 -0.560400 -0.39350 0.3932
1.600000 0.5557000 0.0009844 -0.618600 -0.45830 0.3919
1.666700 0.5580000 0.0010850 -0.656400 -0.50260 0.3919
1.798600 0.5620000 0.0012450 -0.725800 -0.58340 0.3942
2.000000 0.5622000 0.0013750 -0.796300 -0.66600 0.4030
2.197800 0.5617000 0.0016520 -0.865600 -0.73950 0.4055
2.398100 0.5641000 0.0018290 -0.940600 -0.81580 0.4093
2.500000 0.5654000 0.0019210 -0.978700 -0.85420 0.4110
2.597400 0.5677000 0.0020060 -1.019000 -0.89800 0.4130
2.801100 0.5666000 0.0022770 -1.071000 -0.94950 0.4202
3.003000 0.5683000 0.0024490 -1.130000 -1.01400 0.4255
3.205100 0.5686000 0.0025360 -1.179000 -1.06900 0.4301
3.333300 0.5705000 0.0025330 -1.220000 -1.11100 0.4329
3.401400 0.5715000 0.0025410 -1.243000 -1.13500 0.4340
3.597100 0.5727000 0.0025730 -1.300000 -1.19400 0.4359
3.802300 0.5712000 0.0026620 -1.350000 -1.24200 0.4365
4.000000 0.5722000 0.0027110 -1.417000 -1.30300 0.4344
4.504500 0.5856000 0.0024490 -1.662000 -1.52000 0.4278
5.000000 0.5990000 0.0021050 -1.886000 -1.72900 0.4233
5.494500 0.6106000 0.0019410 -2.072000 -1.90400 0.4260
5.988000 0.6160000 0.0018800 -2.201000 -2.02800 0.4284
6.993000 0.6175000 0.0017660 -2.373000 -2.19200 0.4299
8.000000 0.6145000 0.0017210 -2.491000 -2.30800 0.4284
9.009000 0.6122000 0.0016370 -2.592000 -2.40800 0.4236
10.00000 0.6086000 0.0015630 -2.668000 -2.48500 0.4183
""")
[docs]class BergeThierryEtAl2003SIGMA(BergeThierryEtAl2003Ms):
"""
Implements GMPE developed by Catherine Berge-Thierry, Fabrice Cotton,
Oona Scoti, Daphne-Anne Griot-Pommera, and Yoshimitsu Fukushima and
published as "New Empirical Response Spectral Attenuation Laws For Moderate
European Earthquakes" (2003, Journal of Earthquake Engineering, 193-222)
The class implements also adjustment of the sigma value as required by
the SIGMA project to make standard deviations compatible with Mw
(the GMPE was originally developed for Ms).
Additional reference:
Carbon, D. et al., 2012, Final preliminary Probabilistic Hazard map for
France's southeast 1/4, Deliverable D4-18, p.31, SIGMA project.
"""
[docs] def get_mean_and_stddevs(self, sites, rup, dists, imt, stddev_types):
return super()._get_mean_and_stddevs(
sites, rup, dists, imt, stddev_types, mag_conversion_sigma=0.2)
[docs]class BergeThierryEtAl2003MwW(BergeThierryEtAl2003Ms):
"""
Mw version of the Berge-Thierry et al. (2003) GMPE. For this conversion
we use the Weatherill et al. (2016) conversion equation between Ms and Mw
Bilinear magnitude conversion relation.
"""
[docs] def get_mean_and_stddevs(self, sites, rup, dists, imt, stddev_types):
newrup = copy.copy(rup)
if rup.mag <= 6.064:
newrup.mag = (rup.mag - 2.369) / 0.616
return super()._get_mean_and_stddevs(
sites, newrup, dists, imt, stddev_types,
mag_conversion_sigma=0.147/0.616)
else:
newrup.mag = (rup.mag - 0.100) / 0.994
return super()._get_mean_and_stddevs(
sites, newrup, dists, imt, stddev_types,
mag_conversion_sigma=0.174/0.994)
[docs]class BergeThierryEtAl2003MwL_MED(BergeThierryEtAl2003Ms):
"""
Mw version of the Berge-Thierry et al. (2003) GMPE. For this conversion
we use the Lolli et al. (2014) conversion equation between Ms and Mw for
the Euro-Mediterranean region.
Exponential model: Mw = exp(a+b*Ms)+c with slope=b*exp(a+b*Ms)
Parameters: (a,b,c) = (2.133,0.063,-6.205)
"""
[docs] def get_mean_and_stddevs(self, sites, rup, dists, imt, stddev_types):
newrup = copy.copy(rup)
newrup.mag = (np.log(rup.mag+6.205)-2.133)/0.063
slope= 0.063*np.exp(2.133+0.063*newrup.mag)
return super()._get_mean_and_stddevs(
sites, newrup, dists, imt, stddev_types,
mag_conversion_sigma=0.1703/slope)
[docs]class BergeThierryEtAl2003MwL_ITA(BergeThierryEtAl2003Ms):
"""
Mw version of the Berge-Thierry et al. (2003) GMPE. For this conversion
we use the Lolli et al. (2014) conversion equation between Ms and Mw for
the ITA region.
Exponential model: Mw = exp(a+b*Ms)+c with slope=b*exp(a+b*Ms)
Parameters: (a,b,c) = (1.421,0.108,-1.863)
"""
[docs] def get_mean_and_stddevs(self, sites, rup, dists, imt, stddev_types):
newrup = copy.copy(rup)
newrup.mag = (np.log(rup.mag+1.863)-1.421)/0.108
slope = 0.108*np.exp(1.421+0.108*newrup.mag)
return super()._get_mean_and_stddevs(
sites, newrup, dists, imt, stddev_types,
mag_conversion_sigma=0.1685/slope)
[docs]class BergeThierryEtAl2003MwL_GBL(BergeThierryEtAl2003Ms):
"""
Mw version of the Berge-Thierry et al. (2003) GMPE. For this conversion
we use the Lolli et al. (2014) conversion equation between Ms and Mw for
the GBL region (i.e. Global Scale).
Exponential model:
Mw = exp(a+b*Ms)+c with slope=b*exp(a+b*Ms)
Parameters:
for Ms<=5.5: (a,b,c) = (2.133,0.063,-6.205)
for Ms>5.5: (a,b,c) = (-0.109,0.229,2.586)
"""
[docs] def get_mean_and_stddevs(self, sites, rup, dists, imt, stddev_types):
newrup = copy.copy(rup)
if rup.mag < 5.75:
newrup.mag = (np.log(rup.mag + 6.205) - 2.133) / 0.063
slope = 0.063 * np.exp(2.133 + 0.063 * newrup.mag)
return super()._get_mean_and_stddevs(
sites, newrup, dists, imt, stddev_types,
mag_conversion_sigma=0.1703/slope)
else:
newrup.mag = (np.log(rup.mag - 2.586) + 0.109) / 0.229
slope= 0.229*np.exp(-0.109+0.229*newrup.mag)
return super()._get_mean_and_stddevs(
sites, newrup, dists, imt, stddev_types,
mag_conversion_sigma=0.1462/slope)