Source code for openquake.hazardlib.gsim.allen_2022

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

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


def  _get_site_scaling(C, vs30):
    """
    Returns the site scaling term (equation 6)
    on page 1050
    """
    
    return C["s0"] + C["s1"] / (np.log10(vs30) - np.log10(150.))


def _get_magnitude_scaling(C, mag):
    """
    Returns the magnitude scling term defined in equation (3)
    on page 1048
    """
    
    return C["c0"] + C["c1"] * (mag-6.0)**2 + C["c2"] * (mag-6.0)
    
        
def _get_depth_scaling(C, hypo_depth):
    """
    Returns the magnitude scling term defined in equation (4)
    on page 1049
    """
    log_depth = np.log10(hypo_depth)
    
    return C["d0"] + C["d1"] * log_depth**3 + C["d2"] * log_depth**2 + C["d3"] * log_depth
    

def _get_path_scaling(C, rhypo):
    """
    Returns the path scaling term given by equation (2) and (5)
    on page 1047 & 1050
    """
    rx = 600. # hinge distance in km
    
    # get far-field term (eqn 2)
    far_term = np.where(rhypo <= rx,
                        C["c3"] * np.log10(rhypo),
                        C["c3"] * np.log10(rx) + C["c4"] * (np.log10(rhypo) - np.log10(rx)))
    
    # get near-field correction (eqn 5)
    near_term = np.where(rhypo <= rx,
                         C["n0"] * (np.log10(rhypo) - np.log10(rx)),
                         0.)
    
    return near_term + far_term
    

[docs]class Allen2022(GMPE): """ Implements GMPE developed by Allen and published as "Allen, T. I. (2022). A farfield groundmotion model for the North Australian Craton from platemargin earthquakes, Bull. Seismol. Soc. Am., doi: 10.1785/0120210191. """ #: Supported tectonic region type is subduction interface. DEFINED_FOR_TECTONIC_REGION_TYPE = const.TRT.SUBDUCTION_INTRASLAB #: Supported intensity measure types are spectral acceleration, #: and peak ground acceleration, see table 1, pages 227 and 228. DEFINED_FOR_INTENSITY_MEASURE_TYPES = {PGA, PGV, SA} #: Supported intensity measure component is geometric mean #: of two horizontal components. #DEFINED_FOR_INTENSITY_MEASURE_COMPONENT = const.IMC.GEOMETRIC_MEAN DEFINED_FOR_INTENSITY_MEASURE_COMPONENT = const.IMC.MEDIAN_HORIZONTAL # no GEOMETRIC_MEAN option #: Supported standard deviation types is total, see equations 9-10 page 1051. DEFINED_FOR_STANDARD_DEVIATION_TYPES = { const.StdDev.TOTAL, const.StdDev.INTER_EVENT, const.StdDev.INTRA_EVENT} #DEFINED_FOR_REFERENCE_VELOCITY = 760 #: Required site parameters is Vs30 REQUIRES_SITES_PARAMETERS = {'vs30'} #: Required rupture parameters are magnitude, and focal depth, see #: equation 10 page 226. REQUIRES_RUPTURE_PARAMETERS = {'mag', 'hypo_depth'} #: Required distance measure is hypocentral distance, see equation 10 #: page 226. REQUIRES_DISTANCES = {'rhypo'}
[docs] def compute(self, ctx: np.recarray, imts, mean, sig, tau, phi): for m, imt in enumerate(imts): C = self.COEFFS[imt] mean[m] = (_get_magnitude_scaling(C, ctx.mag) + _get_path_scaling(C, ctx.rhypo) + _get_depth_scaling(C, ctx.hypo_depth) + _get_site_scaling(C, ctx.vs30)) tau[m] = C['tau'] phi[m] = C['phi'] # cannot use np.sqrt(tau**2 + phi**2) because of additional PGA conversion factor (see equation 10 on P 1051) # must read from table sig[m] = C['sigma']
#: Coefficient table (see table 1 page 1047.) COEFFS = CoeffsTable(sa_damping=5, table="""\ IMT c0 c1 c2 c3 c4 d0 d1 d2 d3 n0 s0 s1 tau phi sigma pgv 5.1394 0.0000 1.9713 -2.6644 -7.336 5.2107 -1.8808 9.459 -13.949 -1.0181 -0.5880 0.2536 0.6361 0.4883 0.8019 pga -4.5508 0.0000 1.6129 -0.4923 -10.167 4.8787 -2.5207 12.070 -16.388 -1.3651 -1.0254 0.4008 0.7066 0.5094 0.9118 0.1 -5.3000 0.0000 1.4672 0.0000 -10.513 4.3555 -2.7260 12.699 -16.557 -2.6602 -1.0022 0.4258 0.7532 0.5038 0.9061 0.15 -5.2557 0.0000 1.4638 0.0456 -10.580 5.7681 -2.9707 14.147 -19.169 -1.2049 -0.9190 0.4239 0.7578 0.5252 0.9220 0.2 -5.1597 0.0000 1.4603 0.0284 -10.382 6.0008 -3.0078 14.372 -19.594 -1.2446 -0.8846 0.4066 0.7568 0.5343 0.9264 0.25 -5.0958 0.0000 1.4502 -0.0069 -10.080 6.0464 -3.0019 14.338 -19.567 -1.3811 -0.8669 0.3822 0.7436 0.5291 0.9127 0.3 -4.9242 0.0000 1.4988 -0.0897 -9.920 6.5203 -3.0348 14.583 -20.160 -1.4749 -0.7987 0.3619 0.7172 0.5286 0.8910 0.4 -4.2365 -0.0213 1.6047 -0.3716 -9.728 6.1641 -2.8040 13.533 -18.818 -1.5512 -0.7893 0.3403 0.7019 0.5499 0.8917 0.5 -1.6262 -0.0192 1.6542 -1.4501 -8.792 6.7588 -2.7780 13.581 -19.326 -1.0315 -0.6889 0.3084 0.7046 0.5530 0.8957 0.6 0.1424 -0.0670 1.7420 -2.2296 -7.931 5.3677 -2.4344 11.765 -16.380 -1.1632 -0.6341 0.2919 0.6765 0.5214 0.8541 0.75 1.8210 -0.1674 1.9003 -3.0099 -6.912 4.4379 -2.0824 10.083 -13.980 -1.0232 -0.7019 0.2781 0.6455 0.4849 0.8073 1.0 3.4777 -0.2088 1.9943 -3.8107 -6.044 4.8745 -1.9619 9.702 -13.938 -1.0307 -0.6230 0.2654 0.6146 0.4532 0.7636 1.25 4.7348 -0.1776 2.1150 -4.4348 -5.403 5.2371 -1.8821 9.451 -13.950 -0.8072 -0.5700 0.2509 0.6223 0.4257 0.7540 1.5 5.6353 -0.2334 2.2245 -4.8971 -4.781 5.9873 -1.9196 9.800 -14.879 -0.9129 -0.5587 0.2342 0.6233 0.4387 0.7622 2.0 6.0524 -0.3545 2.4366 -5.2236 -4.348 5.0004 -1.5450 7.960 -12.217 -0.6695 -0.4756 0.2230 0.5910 0.4394 0.7365 2.5 5.7973 -0.3619 2.4976 -5.2934 -4.005 5.0432 -1.4210 7.407 -11.637 -0.6849 -0.4486 0.2183 0.5689 0.4162 0.7049 3.0 5.4552 -0.3484 2.5378 -5.3066 -3.734 5.0210 -1.3028 6.860 -11.007 -0.6495 -0.4330 0.2095 0.5618 0.4033 0.6915 4.0 4.8483 -0.3590 2.6446 -5.2890 -3.656 5.0015 -1.1239 6.057 -10.102 -0.4710 -0.3915 0.2042 0.6152 0.3843 0.7254 5.0 4.1446 -0.3549 2.7324 -5.1969 -3.636 5.0599 -1.0292 5.628 -9.653 -0.5199 -0.4377 0.1985 0.6352 0.3917 0.7463 6.0 3.4946 -0.3247 2.7833 -5.1162 -3.547 4.6695 -0.9160 5.042 -8.744 -0.5526 -0.4253 0.1910 0.6207 0.4018 0.7394 7.5 2.8095 -0.3034 2.7654 -5.0636 -3.453 4.7249 -0.8061 4.540 -8.204 -0.5132 -0.4327 0.1820 0.5969 0.4066 0.7222 10.0 2.0278 -0.3459 2.7722 -5.0168 -3.368 5.0737 -0.7276 4.187 -7.966 -0.2645 -0.4564 0.1736 0.5880 0.4185 0.7217 """)