Source code for openquake.hazardlib.gsim.pankow_pechmann_2004

# -*- 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:`PankowPechmann2004`.
"""
import numpy as np
from scipy.constants import g as gravity

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


[docs]class PankowPechmann2004(GMPE): """ Implements GMPE developed by Kris L. Pankow and James C. Pechmann and published as "The SEA99 Ground-Motion Predictive Relations for Extensional Tectonic Regimes: Revisions and a New Peak Ground Velocity Relation" Bulletin of the Seismological Society of America, Vol. 94, No. 1, pp. 341–348, February 2004 """ #: Supported tectonic region type is active shallow crust, DEFINED_FOR_TECTONIC_REGION_TYPE = const.TRT.ACTIVE_SHALLOW_CRUST #: TO CHECK PSV! DEFINED_FOR_INTENSITY_MEASURE_TYPES = set([ PGA, PGV, SA ]) #: Supported intensity measure component is VECTORIAL #: :attr:`~openquake.hazardlib.const.IMC.VECTORIAL`, #: NOTE: The paper indicates it as Geometric mean (to check) DEFINED_FOR_INTENSITY_MEASURE_COMPONENT = set([ const.IMC.VECTORIAL, const.IMC.RANDOM_HORIZONTAL ]) #: Supported standard deviation type is total DEFINED_FOR_STANDARD_DEVIATION_TYPES = set([ const.StdDev.TOTAL ]) #: Required site parameter is only Vs30 REQUIRES_SITES_PARAMETERS = {'vs30'} #: Required rupture parameter is magnitude REQUIRES_RUPTURE_PARAMETERS = {'mag'} #: Required distance measure is Rjb distance #: see paragraph 'Predictor Variables', page 6. REQUIRES_DISTANCES = {'rjb'} #: No independent tests - verification against paper for PGA and PGV, #: but not for SA and Standard Deviations non_verified = True
[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] M = rup.mag - 6 R = np.sqrt(dists.rjb ** 2 + C['h'] ** 2) # In the original formulation of the GMPE, distinction is only made # between rock and soil sites, which I assumed separated by the Vs30 # value of 910m/s (see equation 5 of the paper) gamma = np.array([0 if v > 910. else 1 for v in sites.vs30]) mean = np.zeros_like(R) mean += C['b1'] + \ C['b2'] * M + \ C['b3'] * M ** 2 + \ C['b5'] * np.log10(R) + \ C['b6'] * gamma # Convert from base 10 to base e mean /= np.log10(np.e) # Converting PSV to PSA if imt != PGA() and imt != PGV(): omega = 2.*np.pi/imt.period mean += np.log(omega/(gravity*100)) # Computing standard deviation stddevs = self._get_stddevs(C, stddev_types, dists.rjb.shape[0]) # Convert from base 10 to base e stddevs = [sd/np.log10(np.e) for sd in stddevs] return mean, stddevs
def _get_stddevs(self, C, stddev_types, num_sites): """ Return total standard deviation. """ assert all(stddev_type in self.DEFINED_FOR_STANDARD_DEVIATION_TYPES for stddev_type in stddev_types) if self.DEFINED_FOR_INTENSITY_MEASURE_COMPONENT == 'Random horizontal': # Using equation 8 of the paper, # corrected as indicated in the erratum Sr = np.sqrt(C['SlZ']**2 + (C['S3']/np.sqrt(2))**2) else: Sr = C['SlZ'] stddevs = [np.zeros(num_sites) + Sr for _ in stddev_types] return stddevs #: coefficient table provided by GSC (corrected as in the erratum) COEFFS = CoeffsTable(sa_damping=5, table="""\ imt Bv b1 b2 b3 b5 b6 h SlZ S3 pgv 0 2.252 0.490 0 -1.196 0.195 7.06 0.246 0.075 pga -0.371 0.237 0.229 0 -1.052 0.174 7.27 0.203 0.094 0.100 -0.212 2.109 0.327 -0.098 -1.250 0.099 9.99 0.273 0.110 0.110 -0.211 2.120 0.318 -0.100 -1.207 0.099 9.84 0.265 0.111 0.120 -0.215 2.129 0.313 -0.101 -1.173 0.101 9.69 0.257 0.113 0.130 -0.221 2.138 0.309 -0.101 -1.145 0.103 9.54 0.252 0.114 0.140 -0.228 2.145 0.307 -0.100 -1.122 0.107 9.39 0.247 0.115 0.150 -0.238 2.152 0.305 -0.099 -1.103 0.111 9.25 0.242 0.116 0.160 -0.248 2.158 0.305 -0.098 -1.088 0.116 9.12 0.239 0.117 0.170 -0.258 2.163 0.305 -0.096 -1.075 0.121 8.99 0.237 0.118 0.180 -0.270 2.167 0.306 -0.094 -1.064 0.126 8.86 0.235 0.119 0.190 -0.281 2.172 0.308 -0.092 -1.055 0.131 8.74 0.234 0.119 0.200 -0.292 2.175 0.309 -0.090 -1.047 0.137 8.63 0.233 0.120 0.220 -0.315 2.182 0.313 -0.086 -1.036 0.147 8.41 0.231 0.121 0.240 -0.338 2.186 0.318 -0.082 -1.029 0.158 8.22 0.231 0.122 0.260 -0.360 2.190 0.323 -0.078 -1.024 0.168 8.04 0.231 0.123 0.280 -0.381 2.194 0.329 -0.073 -1.021 0.178 7.87 0.231 0.124 0.300 -0.401 2.196 0.334 -0.070 -1.020 0.188 7.72 0.232 0.125 0.320 -0.420 2.198 0.340 -0.066 -1.019 0.196 7.58 0.232 0.126 0.340 -0.438 2.199 0.345 -0.062 -1.020 0.205 7.45 0.233 0.126 0.360 -0.456 2.200 0.350 -0.059 -1.021 0.213 7.33 0.234 0.127 0.380 -0.472 2.200 0.356 -0.055 -1.023 0.221 7.22 0.236 0.128 0.400 -0.487 2.201 0.361 -0.052 -1.025 0.228 7.11 0.237 0.128 0.420 -0.502 2.201 0.365 -0.049 -1.027 0.235 7.02 0.238 0.129 0.440 -0.516 2.201 0.370 -0.047 -1.030 0.241 6.93 0.239 0.129 0.460 -0.529 2.201 0.375 -0.044 -1.032 0.247 6.85 0.241 0.129 0.480 -0.541 2.201 0.379 -0.042 -1.035 0.253 6.77 0.242 0.130 0.500 -0.553 2.199 0.384 -0.039 -1.038 0.259 6.70 0.243 0.130 0.550 -0.579 2.197 0.394 -0.034 -1.044 0.271 6.55 0.246 0.131 0.600 -0.602 2.195 0.403 -0.030 -1.051 0.281 6.42 0.249 0.132 0.650 -0.622 2.191 0.411 -0.026 -1.057 0.291 6.32 0.252 0.132 0.700 -0.639 2.187 0.418 -0.023 -1.062 0.299 6.23 0.254 0.133 0.750 -0.653 2.184 0.425 -0.020 -1.067 0.305 6.17 0.257 0.133 0.800 -0.666 2.179 0.431 -0.018 -1.071 0.311 6.11 0.260 0.134 0.850 -0.676 2.174 0.437 -0.016 -1.075 0.316 6.07 0.262 0.134 0.900 -0.685 2.170 0.442 -0.015 -1.078 0.320 6.04 0.264 0.134 0.950 -0.692 2.164 0.446 -0.014 -1.081 0.324 6.02 0.267 0.135 1.000 -0.698 2.160 0.450 -0.014 -1.083 0.326 6.01 0.269 0.135 1.100 -0.706 2.150 0.457 -0.013 -1.085 0.330 6.01 0.273 0.135 1.200 -0.710 2.140 0.462 -0.014 -1.086 0.332 6.03 0.278 0.136 1.300 -0.711 2.129 0.466 -0.015 -1.085 0.333 6.07 0.282 0.136 1.400 -0.709 2.119 0.469 -0.017 -1.083 0.331 6.13 0.286 0.136 1.500 -0.704 2.109 0.471 -0.019 -1.079 0.329 6.21 0.291 0.137 1.600 -0.697 2.099 0.472 -0.022 -1.075 0.326 6.29 0.295 0.137 1.700 -0.689 2.088 0.473 -0.025 -1.070 0.322 6.39 0.299 0.137 1.800 -0.679 2.079 0.472 -0.029 -1.063 0.317 6.49 0.303 0.137 1.900 -0.667 2.069 0.472 -0.032 -1.056 0.312 6.60 0.307 0.137 2.000 -0.655 2.059 0.471 -0.037 -1.049 0.306 6.71 0.312 0.137 """)