Source code for openquake.hazardlib.gsim.ghasemi_2009
# -*- coding: utf-8 -*-
# vim: tabstop=4 shiftwidth=4 softtabstop=4
#
# Copyright (C) 2014-2023 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:'GhasemiEtAl2009'
"""
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
def _compute_distance_scaling(C, rrup, mag):
"""
Returns the distance scaling term
"""
a5 = 0.42
rscale1 = rrup + C["a4"] * (10.0 ** (a5 * mag))
return C["a3"]*np.log10(rscale1)
def _compute_magnitude_scaling(C, mag):
"""
Returns the magnitude scaling term
"""
return C["a2"] * mag + C["a1"]
def _compute_site_amplification(C, ctx):
"""
Compute the fourth and fifth terms of the equation 1 described on paragraph
"""
sSoil, sRock = _get_site_type_dummy_variables(ctx)
return (C["a6"] * sRock + C['a7'] * sSoil)
def _get_site_type_dummy_variables(ctx):
"""
Get site type dummy variables, two site type is considered
based on the shear wave velocity intervals in the uppermost 30 m, Vs30:
Soil: Vs30 < 760 m/s
Rock: Vs30 >= 760 m/s
"""
sRock = np.zeros(len(ctx.vs30))
sSoil = np.zeros(len(ctx.vs30))
# Soil; Vs30 < 760 m/s.
idx = (ctx.vs30 >= 1E-10) & (ctx.vs30 < 760)
sSoil[idx] = 1.0
# Rock; Vs30 >= 760 m/s.
idx = (ctx.vs30 >= 760)
sRock[idx] = 1.0
return sSoil, sRock
[docs]class GhasemiEtAl2009(GMPE):
"""
Implements the PGA GMPE of H.Ghasemi, M.Zare, Y,Fukushima, K.Koketsu
(2009a) An empirical spectral ground-motion model for Iran,
J Seismol, 13:499-515, DOI 10.1007/s10950-008-9143-x.
"""
#: The GMPE is derived from shallow earthquakes in California and Japan
DEFINED_FOR_TECTONIC_REGION_TYPE = const.TRT.ACTIVE_SHALLOW_CRUST
#: Supported intensity measure types is spectral acceleration
#: The attenuation relation developed by Ghasemi et. al estimates only the 'SA'.
#: Here in this code, the intensity measure of 'PGA' is also considered
#: with the same coefficients as SA(0.05 s), in case of need.
DEFINED_FOR_INTENSITY_MEASURE_TYPES = {PGA, SA}
#: Supported intensity measure component is the average horizontal
#: component
#: :attr:`openquake.hazardlib.const.IMC.GEOMETRIC_MEAN`,
DEFINED_FOR_INTENSITY_MEASURE_COMPONENT = const.IMC.GMRotI50
#: Supported standard deviation types is total.
DEFINED_FOR_STANDARD_DEVIATION_TYPES = {const.StdDev.TOTAL}
#: Required site parameters is Vs30
REQUIRES_SITES_PARAMETERS = {'vs30'}
#: Required rupture parameters are magnitude
REQUIRES_RUPTURE_PARAMETERS = {'mag'}
#: Required distance measure is rupture distance
REQUIRES_DISTANCES = {'rrup'}
[docs] def compute(self, ctx: np.recarray, imts, mean, sig, tau, phi):
"""
See :meth:`superclass method
<.base.GroundShakingIntensityModel.compute>`
for spec of input and result values.
"""
for m, imt in enumerate(imts):
C = self.COEFFS[imt]
imean = (_compute_magnitude_scaling(C, ctx.mag) +
_compute_distance_scaling(C, ctx.rrup, ctx.mag) +
_compute_site_amplification(C, ctx))
# Original GMPE returns log10 acceleration in cm/s/s
# Converts to natural logarithm of g
mean[m] = np.log((10.0 ** (imean - 2.0)) / g)
# Convert from common logarithm to natural logarithm
sig[m] = np.log(10 ** C['sigma'])
#: The attenuation relation developed by Ghasemi et. al estimates only the 'SA'.
#: Here in this code, a line for intensity measure of 'PGA' is also considered
#: with the same coefficients as SA(0.05 s), in case of need.
COEFFS = CoeffsTable(sa_damping=5, table="""
IMT a1 a2 a3 a4 a6 a7 sigma
PGA 0.868 0.405 -1.424 0.014 0.859 0.836 0.319
0.05 0.868 0.405 -1.424 0.014 0.859 0.836 0.319
0.06 0.906 0.398 -1.440 0.015 0.944 0.911 0.322
0.07 0.957 0.394 -1.449 0.015 0.978 0.937 0.325
0.08 0.700 0.387 -1.427 0.015 1.282 1.238 0.325
0.09 0.966 0.384 -1.413 0.016 1.046 1.005 0.326
0.10 0.904 0.380 -1.396 0.016 1.136 1.096 0.331
0.20 0.786 0.425 -1.215 0.015 0.663 0.748 0.319
0.30 0.432 0.474 -1.134 0.014 0.477 0.605 0.318
0.40 0.246 0.528 -1.080 0.011 0.135 0.289 0.327
0.50 0.003 0.571 -1.069 0.010 0.002 0.173 0.333
0.60 -0.118 0.608 -1.053 0.010 -0.209 -0.037 0.337
0.70 -0.234 0.635 -1.034 0.009 -0.361 -0.194 0.347
0.80 -0.331 0.673 -1.083 0.010 -0.450 -0.300 0.336
0.90 -0.459 0.706 -1.092 0.011 -0.570 -0.424 0.335
1.00 -0.567 0.727 -1.071 0.011 -0.678 -0.533 0.336
2.00 -1.209 0.876 -1.104 0.011 -1.291 -1.183 0.363
3.00 -1.436 0.920 -1.151 0.012 -1.515 -1.411 0.370
""")