# Source code for openquake.hazardlib.gsim.tem20.lin_2011

```# -*- coding: utf-8 -*-
# vim: tabstop=4 shiftwidth=4 softtabstop=4 \
#
# Copyright (C) 2019 GEM Foundation, Chung-Han Chan
#
# 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:`Lin2011foot`, :class:`Lin2011hanging`
"""
import numpy as np

from openquake.hazardlib.gsim.base import GMPE, CoeffsTable
from openquake.hazardlib import const
from openquake.hazardlib.imt import PGA, SA

def _compute_mean(C, mag, rrup, mean, idx):
"""
Compute mean value according to equations 10 and 11 page 226.
"""
mean[idx] = (C['C1'] + C['C2'] * mag[idx] + C['C3'] * np.log(rrup[idx] +
C['C4'] * np.exp(C['C5'] * mag[idx])))

def _compute_std(C, stddev, idx):
"""
Compute total standard deviation, see tables 3 and 4, pages 227 and 228.
"""
stddev[idx] = C['sigma']

[docs]class Lin2011foot(GMPE):
"""
Implements GMPE developed by Po-Shen Lin and others and published as
"Response spectral attenuation relations for shallow crustal earthquakes
in Taiwan", Engineering Geology, Volume 121, Issues 3–4, 10 August 2011,
Pages 150-164.
"""

#: Supported tectonic region type is active shallow crust.
DEFINED_FOR_TECTONIC_REGION_TYPE = const.TRT.ACTIVE_SHALLOW_CRUST

#: Supported intensity measure types are spectral acceleration,
#: and peak ground acceleration, see tables 3 and 4, pages 227 and 228.
DEFINED_FOR_INTENSITY_MEASURE_TYPES = {PGA, SA}

#: Supported intensity measure component is geometric mean
#: of two horizontal components, see equation 10 page 226.
DEFINED_FOR_INTENSITY_MEASURE_COMPONENT = const.IMC.AVERAGE_HORIZONTAL

#: Supported standard deviation types is total, see equation 10 page 226.
DEFINED_FOR_STANDARD_DEVIATION_TYPES = {const.StdDev.TOTAL}

#: Required site parameter is only Vs30 (used to distinguish rock
#: and deep soil).
REQUIRES_SITES_PARAMETERS = {'vs30'}

#: Required rupture parameters are magnitude, and focal depth, see
#: equation 10 page 226.
REQUIRES_RUPTURE_PARAMETERS = {'mag'}

#: Required distance measure is rrup distance, see equation 4
#: page 154.
REQUIRES_DISTANCES = {'rrup'}

#: Vs30 threshold value between rock sites (B, C) and soil sites (C, D).
ROCK_VS30 = 360

[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.
"""
idx_rock = ctx.vs30 >= self.ROCK_VS30
idx_soil = ctx.vs30 < self.ROCK_VS30

for m, imt in enumerate(imts):

if idx_rock.any():
CR = self.COEFFS_ROCK[imt]
_compute_mean(CR, ctx.mag, ctx.rrup, mean[m], idx_rock)
_compute_std(CR, sig[m], idx_rock)

if idx_soil.any():
CS = self.COEFFS_SOIL[imt]
_compute_mean(CS, ctx.mag, ctx.rrup, mean[m], idx_soil)
_compute_std(CS, sig[m], idx_soil)

#: Coefficient table for rock sites, see table 3 page 153.
COEFFS_ROCK = CoeffsTable(sa_damping=5, table="""\
IMT      C1       C2        C3         C4         C5         sigma
pga     -3.2320    1.047    -1.66200    0.19200    0.63000   0.6520
0.01    -3.1930    1.017    -1.61200    0.21000    0.59000   0.6480
0.06    -2.6430    0.937    -1.60200    0.23000    0.55000   0.7090
0.09    -2.0930    0.907    -1.64200    0.23000    0.55000   0.7550
0.10    -1.9930    0.907    -1.65200    0.19000    0.59000   0.7560
0.20    -2.6590    0.960    -1.51200    0.14800    0.61000   0.6990
0.30    -4.3870    1.169    -1.42200    0.04400    0.79000   0.6860
0.40    -5.6340    1.328    -1.39900    0.02200    0.90000   0.6820
0.50    -6.3910    1.410    -1.34700    0.01800    0.95000   0.7340
0.60    -7.6340    1.576    -1.34500    0.00430    1.19100   0.7210
0.75    -8.8850    1.665    -1.25400    0.00090    1.39400   0.7010
1.00   -10.0310    1.777    -1.24000    0.00070    1.41600   0.7170
1.50   -11.6330    1.930    -1.21900    0.00050    1.46300   0.6780
2.00   -12.5990    1.989    -1.17400    0.00050    1.46400   0.7030
3.00   -13.3110    1.974    -1.14000    0.00090    1.30600   0.7010
5.00   -13.9850    1.957    -1.14500    0.00130    1.20200   0.7260
""")

#: Coefficient table for soil sites, see table 4 page 153.
COEFFS_SOIL = CoeffsTable(sa_damping=5, table="""\
IMT      C1        C2         C3        C4         C5         sigma
pga     -3.2180    0.935    -1.46400    0.12500    0.65000   0.6300
0.01    -3.3060    0.937    -1.45400    0.10000    0.67000   0.6260
0.06    -1.8960    0.977    -1.74400    0.14000    0.72000   0.6850
0.09    -1.2560    0.907    -1.75400    0.15100    0.72000   0.7080
0.10    -1.3060    0.907    -1.73400    0.15100    0.71000   0.7120
0.20    -3.3100    0.957    -1.29100    0.10000    0.70000   0.6900
0.30    -4.8800    1.219    -1.29400    0.03100    0.91000   0.6630
0.40    -5.6280    1.239    -1.18100    0.01220    1.02000   0.6540
0.50    -6.2840    1.311    -1.16000    0.00570    1.13000   0.6520
0.60    -7.2520    1.429    -1.12800    0.00250    1.26000   0.6400
0.75    -8.3550    1.536    -1.06500    0.00080    1.42000   0.6480
1.00    -9.8600    1.692    -0.99500    0.00050    1.50400   0.6730
1.50   -11.7500    1.919    -0.99700    0.00050    1.54400   0.7140
2.00   -12.8270    2.025    -0.99600    0.00050    1.53600   0.7560
3.00   -13.7950    2.069    -0.98900    0.00050    1.49000   0.7840
5.00   -14.2560    2.120    -1.14400    0.00070    1.48000   0.8220
""")

[docs]class Lin2011hanging(Lin2011foot):
"""
Implements GMPE developed by Po-Shen Lin and others and published as
"Response spectral attenuation relations for shallow crustal earthquakes
in Taiwan", Engineering Geology, Vol. 121, Issues 3–4, 10 August 2011,
Pages 150-164.
"""

#: Coefficient table for rock sites, see table 3 page 153.
COEFFS_ROCK = CoeffsTable(sa_damping=5, table="""\
IMT      C1       C2        C3         C4         C5         sigma
pga     -3.2790    1.035    -1.65100    0.15200    0.62300   0.6510
0.01    -3.2530    1.018    -1.62900    0.15900    0.61200   0.6470
0.06    -1.7380    0.908    -1.76900    0.32700    0.50200   0.7020
0.09    -1.2370    0.841    -1.75000    0.47800    0.40200   0.7480
0.10    -1.1030    0.841    -1.76500    0.45500    0.41700   0.7500
0.20    -2.7670    0.980    -1.52200    0.09700    0.62700   0.6970
0.30    -4.4400    1.186    -1.43800    0.02700    0.82300   0.6850
0.40    -5.6300    1.335    -1.41400    0.01400    0.93200   0.6830
0.50    -6.7460    1.456    -1.36500    0.00600    1.05700   0.6780
0.60    -7.6370    1.557    -1.34800    0.00330    1.14700   0.6660
0.75    -8.6410    1.653    -1.31300    0.00150    1.25700   0.6520
1.00    -9.9780    1.800    -1.28600    0.00080    1.37700   0.6710
1.50   -11.6170    1.976    -1.28400    0.00040    1.50800   0.6830
2.00   -12.6110    2.058    -1.26100    0.00050    1.49700   0.7060
3.00   -13.3030    2.036    -1.23400    0.00130    1.30200   0.7020
5.00   -13.9140    1.958    -1.15600    0.00120    1.24100   0.7260
""")

#: Coefficient table for soil sites, see table 4 page 153.
COEFFS_SOIL = CoeffsTable(sa_damping=5, table="""\
IMT      C1        C2         C3        C4         C5         sigma
pga     -3.2480    0.943    -1.47100    0.10000    0.64800   0.6280
0.01    -3.0080    0.905    -1.45100    0.11000    0.63800   0.6230
0.06    -1.9940    0.809    -1.50000    0.25100    0.51800   0.6860
0.09    -1.4080    0.765    -1.55100    0.28000    0.51000   0.7090
0.10    -1.5080    0.785    -1.55100    0.28000    0.50000   0.7130
0.20    -3.2260    0.870    -1.21100    0.04500    0.70800   0.6870
0.30    -4.0500    0.999    -1.20500    0.03000    0.78800   0.6570
0.40    -5.2930    1.165    -1.16700    0.01100    0.95800   0.6550
0.50    -6.3070    1.291    -1.13400    0.00420    1.11800   0.6530
0.60    -7.2090    1.395    -1.09900    0.00160    1.25800   0.6420
0.75    -8.3090    1.509    -1.04400    0.00060    1.40800   0.6510
1.00    -9.8680    1.691    -1.00400    0.00040    1.48500   0.6770
1.50   -11.2160    1.798    -0.96500    0.00030    1.52200   0.7220
2.00   -12.8060    2.005    -0.97500    0.00050    1.52800   0.7590
3.00   -13.8860    2.099    -1.07700    0.00040    1.54800   0.7870
5.00   -14.6060    2.160    -1.11400    0.00040    1.56200   0.8200
""")
```