Source code for openquake.hazardlib.gsim.lin_2009

# -*- coding: utf-8 -*-
# vim: tabstop=4 shiftwidth=4 softtabstop=4
#
# Copyright (C) 2013-2021 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:`Lin2009`
"""
import numpy as np

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


[docs]class Lin2009(GMPE): """ Implements GMPE developed by Po-Shen Lin and published as "Ground-motion attenuation relationship and path-effect study using Taiwan Data set" (Ph.D. dissertation of National Central University, Taiwan). This class implements the equations for 'crustal events'. """ #: 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 Table 4.1 in pages 48-49. DEFINED_FOR_INTENSITY_MEASURE_TYPES = set([ PGA, SA ]) #: Supported intensity measure component is geometric mean #: of two horizontal components, see equation 4.1 page 46. DEFINED_FOR_INTENSITY_MEASURE_COMPONENT = const.IMC.AVERAGE_HORIZONTAL #: Supported standard deviation types is total, see equation 4.1 page 46. DEFINED_FOR_STANDARD_DEVIATION_TYPES = set([ const.StdDev.TOTAL ]) #: Required site parameter is only Vs30 (used to distinguish rock). REQUIRES_SITES_PARAMETERS = {'vs30'} #: Required rupture parameters are magnitude and rake see #: equation 4.1 page 46. REQUIRES_RUPTURE_PARAMETERS = {'mag', 'rake'} #: Required distance measure is rupture distance, see equation 4.1 #: page 46. REQUIRES_DISTANCES = {'rrup'}
[docs] def get_mean_and_stddevs(self, sites, rup, dists, imt, stddev_types): """ See :meth:`superclass method <.base.GroundShakingIntensityModel.get_mean_and_stddevs>` for spec of input and result values. """ C = self.COEFFS[imt] mean = ( self._get_magnitude_term(C, rup.mag) + self._get_distance_term(C, rup.mag, dists.rrup) + self._get_style_of_faulting_term(C, rup.rake) + self._get_site_response_term(C, sites.vs30)) stddevs = self._get_stddevs(C, stddev_types, len(sites.vs30)) return mean, stddevs
def _get_magnitude_term(self, C, mag): """ Returns the magnitude scaling term. """ lny = C['C1'] + (C['C3'] * ((8.5 - mag) ** 2.)) if mag > 6.3: return lny + (-C['H'] * C['C5']) * (mag - 6.3) else: return lny + C['C2'] * (mag - 6.3) def _get_distance_term(self, C, mag, rrup): """ Returns the distance scaling term """ return (C['C4'] + C['C5'] * (mag - 6.3)) *\ np.log(np.sqrt(rrup ** 2. + np.exp(C['H']) ** 2.)) def _get_style_of_faulting_term(self, C, rake): """ Returns the style of faulting factor """ f_n, f_r = self._get_fault_type_dummy_variables(rake) return C['C6'] * f_n + C['C7'] * f_r def _get_fault_type_dummy_variables(self, rake): """ Defines the fault type dummy variables for normal faulting (f_n) and reverse faulting (f_r) from rake. Classification based on that found in the original fortran code of Lin (2009) """ f_n, f_r = 0, 0 if rake >= -120 and rake <= -60: # normal f_n = 1 elif rake >= 30 and rake <= 150: # reverse f_r = 1 return f_n, f_r def _get_site_response_term(self, C, vs30): """ Returns the site amplification term """ return C['C8'] * np.log(vs30 / 1130.0) def _get_stddevs(self, C, stddev_types, nsites): """ Compute total standard deviation, see table 4.2, page 50. """ stddevs = [] for stddev_type in stddev_types: assert stddev_type in self.DEFINED_FOR_STANDARD_DEVIATION_TYPES if stddev_type == const.StdDev.TOTAL: stddevs.append(C['sigma'] + np.zeros(nsites, dtype=float)) return stddevs #: Coefficient table for rock sites, see table 3 page 227. COEFFS = CoeffsTable(sa_damping=5.0, table="""\ IMT C1 C2 C3 C4 C5 H C6 C7 C8 sigma pga 1.0109 0.3822 0.0000 -1.1634 0.1722 1.5184 -0.1907 0.1322 -0.4741 0.5363 0.01 1.0209 0.3822 -0.0003 -1.1633 0.1722 1.5184 -0.1922 0.1314 -0.4738 0.5360 0.02 1.0416 0.3822 0.0017 -1.1668 0.1722 1.5184 -0.1942 0.1311 -0.4700 0.5349 0.03 1.1961 0.3822 0.0038 -1.2028 0.1722 1.5184 -0.1990 0.1314 -0.4741 0.5419 0.04 1.3834 0.3822 0.0087 -1.2499 0.1722 1.5184 -0.1959 0.1362 -0.4806 0.5506 0.05 1.5612 0.3822 0.0153 -1.2957 0.1722 1.5184 -0.1922 0.1417 -0.4911 0.5607 0.06 1.6907 0.3822 0.0210 -1.3218 0.1722 1.5184 -0.1984 0.1500 -0.4900 0.5718 0.07 1.7673 0.3822 0.0261 -1.3336 0.1722 1.5184 -0.2011 0.1557 -0.4920 0.5800 0.08 1.8689 0.3822 0.0273 -1.3440 0.1722 1.5184 -0.1947 0.1627 -0.4944 0.5887 0.09 1.9430 0.3822 0.0276 -1.3435 0.1722 1.5184 -0.2011 0.1589 -0.4910 0.5894 0.10 2.0218 0.3822 0.0254 -1.3409 0.1722 1.5184 -0.1817 0.1607 -0.4825 0.5911 0.15 2.0521 0.3822 0.0100 -1.2578 0.1722 1.5184 -0.1851 0.1212 -0.4804 0.5812 0.20 2.0333 0.3822 -0.0091 -1.1769 0.1722 1.5184 -0.2265 0.0999 -0.4350 0.5715 0.25 1.9887 0.3822 -0.0293 -1.1153 0.1722 1.5184 -0.2355 0.0994 -0.4101 0.5715 0.30 1.8827 0.3822 -0.0459 -1.0726 0.1722 1.5184 -0.2163 0.1036 -0.4361 0.5768 0.35 1.7459 0.3822 -0.0600 -1.0307 0.1722 1.5184 -0.1949 0.1029 -0.4507 0.5739 0.40 1.6821 0.3822 -0.0737 -1.0116 0.1722 1.5184 -0.1955 0.1099 -0.4734 0.5696 0.45 1.6139 0.3822 -0.0861 -0.9939 0.1722 1.5184 -0.2011 0.1178 -0.4927 0.5699 0.50 1.5288 0.3822 -0.0960 -0.9755 0.1722 1.5184 -0.2089 0.1142 -0.5035 0.5681 0.60 1.3081 0.3822 -0.1133 -0.9407 0.1722 1.5184 -0.2212 0.1016 -0.5546 0.5731 0.70 1.1383 0.3822 -0.1292 -0.9193 0.1722 1.5184 -0.1900 0.1036 -0.6037 0.5703 0.80 1.0757 0.3822 -0.1442 -0.9167 0.1722 1.5184 -0.1865 0.1058 -0.6319 0.5723 0.90 0.9935 0.3822 -0.1577 -0.9104 0.1722 1.5184 -0.1643 0.1165 -0.6577 0.5736 1.00 0.8642 0.3822 -0.1687 -0.9001 0.1722 1.5184 -0.1505 0.1372 -0.6916 0.5741 1.50 0.3150 0.3822 -0.2006 -0.8696 0.1722 1.5184 -0.0377 0.1572 -0.7582 0.5743 2.00 -0.1760 0.3822 -0.2190 -0.8328 0.1722 1.5184 0.0780 0.1660 -0.7863 0.5696 2.50 -0.4103 0.3822 -0.2319 -0.8415 0.1722 1.5184 0.0907 0.1648 -0.7939 0.5521 3.00 -0.5019 0.3822 -0.2431 -0.8684 0.1722 1.5184 0.1195 0.1790 -0.7754 0.5296 3.50 -0.7206 0.3822 -0.2479 -0.8689 0.1722 1.5184 0.1206 0.1629 -0.7673 0.5256 4.00 -0.9383 0.3822 -0.2493 -0.8618 0.1722 1.5184 0.1267 0.1262 -0.7457 0.5285 4.40 -1.0405 0.3822 -0.2559 -0.8472 0.1722 1.5184 0.1655 0.1486 -0.7042 0.5239 5.00 -1.3694 0.3822 -0.2535 -0.8287 0.1722 1.5184 0.2208 0.1648 -0.6955 0.5240 """)
[docs]class Lin2009AdjustedSigma(Lin2009): """ Implements the Lin (2009) GMPE with the total sigma adjusted according to the values in Cheng et al. (2013): C. -T. Cheng, P. -S. Hsieh, P. -S. Lin, Y. -T. Yen, C. -H. Chan (2013) Probability Seismic Hazard Mapping of Taiwan """ #: Coefficient table for rock sites, see table 3 page 227. COEFFS = CoeffsTable(sa_damping=5.0, table="""\ IMT C1 C2 C3 C4 C5 H C6 C7 C8 sigma pga 1.0109 0.3822 0.0000 -1.1634 0.1722 1.5184 -0.1907 0.1322 -0.4741 0.627 0.01 1.0209 0.3822 -0.0003 -1.1633 0.1722 1.5184 -0.1922 0.1314 -0.4738 0.627 0.02 1.0416 0.3822 0.0017 -1.1668 0.1722 1.5184 -0.1942 0.1311 -0.4700 0.627 0.03 1.1961 0.3822 0.0038 -1.2028 0.1722 1.5184 -0.1990 0.1314 -0.4741 0.640 0.04 1.3834 0.3822 0.0087 -1.2499 0.1722 1.5184 -0.1959 0.1362 -0.4806 0.655 0.05 1.5612 0.3822 0.0153 -1.2957 0.1722 1.5184 -0.1922 0.1417 -0.4911 0.670 0.06 1.6907 0.3822 0.0210 -1.3218 0.1722 1.5184 -0.1984 0.1500 -0.4900 0.681 0.07 1.7673 0.3822 0.0261 -1.3336 0.1722 1.5184 -0.2011 0.1557 -0.4920 0.691 0.08 1.8689 0.3822 0.0273 -1.3440 0.1722 1.5184 -0.1947 0.1627 -0.4944 0.699 0.09 1.9430 0.3822 0.0276 -1.3435 0.1722 1.5184 -0.2011 0.1589 -0.4910 0.700 0.10 2.0218 0.3822 0.0254 -1.3409 0.1722 1.5184 -0.1817 0.1607 -0.4825 0.705 0.15 2.0521 0.3822 0.0100 -1.2578 0.1722 1.5184 -0.1851 0.1212 -0.4804 0.691 0.20 2.0333 0.3822 -0.0091 -1.1769 0.1722 1.5184 -0.2265 0.0999 -0.4350 0.676 0.25 1.9887 0.3822 -0.0293 -1.1153 0.1722 1.5184 -0.2355 0.0994 -0.4101 0.679 0.30 1.8827 0.3822 -0.0459 -1.0726 0.1722 1.5184 -0.2163 0.1036 -0.4361 0.686 0.35 1.7459 0.3822 -0.0600 -1.0307 0.1722 1.5184 -0.1949 0.1029 -0.4507 0.692 0.40 1.6821 0.3822 -0.0737 -1.0116 0.1722 1.5184 -0.1955 0.1099 -0.4734 0.695 0.45 1.6139 0.3822 -0.0861 -0.9939 0.1722 1.5184 -0.2011 0.1178 -0.4927 0.699 0.50 1.5288 0.3822 -0.0960 -0.9755 0.1722 1.5184 -0.2089 0.1142 -0.5035 0.699 0.60 1.3081 0.3822 -0.1133 -0.9407 0.1722 1.5184 -0.2212 0.1016 -0.5546 0.704 0.70 1.1383 0.3822 -0.1292 -0.9193 0.1722 1.5184 -0.1900 0.1036 -0.6037 0.710 0.80 1.0757 0.3822 -0.1442 -0.9167 0.1722 1.5184 -0.1865 0.1058 -0.6319 0.718 0.90 0.9935 0.3822 -0.1577 -0.9104 0.1722 1.5184 -0.1643 0.1165 -0.6577 0.723 1.00 0.8642 0.3822 -0.1687 -0.9001 0.1722 1.5184 -0.1505 0.1372 -0.6916 0.728 1.50 0.3150 0.3822 -0.2006 -0.8696 0.1722 1.5184 -0.0377 0.1572 -0.7582 0.738 2.00 -0.1760 0.3822 -0.2190 -0.8328 0.1722 1.5184 0.0780 0.1660 -0.7863 0.726 2.50 -0.4103 0.3822 -0.2319 -0.8415 0.1722 1.5184 0.0907 0.1648 -0.7939 0.709 3.00 -0.5019 0.3822 -0.2431 -0.8684 0.1722 1.5184 0.1195 0.1790 -0.7754 0.707 3.50 -0.7206 0.3822 -0.2479 -0.8689 0.1722 1.5184 0.1206 0.1629 -0.7673 0.708 4.00 -0.9383 0.3822 -0.2493 -0.8618 0.1722 1.5184 0.1267 0.1262 -0.7457 0.707 4.40 -1.0405 0.3822 -0.2559 -0.8472 0.1722 1.5184 0.1655 0.1486 -0.7042 0.717 5.00 -1.3694 0.3822 -0.2535 -0.8287 0.1722 1.5184 0.2208 0.1648 -0.6955 0.715 """)