Source code for pygmm.tavakoli_pezeshk_2005

"""Tavakoli and Pezeshk (2005, :cite:`tavakoli05`) model."""

import numpy as np

from . import model

__author__ = "Albert Kottke"


[docs] class TavakoliPezeshk05(model.GroundMotionModel): """Tavakoli and Pezeshk (2005, :cite:`tavakoli05`) model. Developed for the Eastern North America with a reference velocity of 2880 m/s. Parameters ---------- scenario : :class:`pygmm.model.Scenario` earthquake scenario """ NAME = "Tavakoli and Pezeshk (2005)" ABBREV = "TP05" # Reference velocity (m/sec) V_REF = 2880.0 # Load the coefficients for the model COEFF = model.load_data_file("tavakoli_pezeshk_2005.csv", 1) PERIODS = COEFF["period"] INDEX_PGA = 0 INDICES_PSA = np.arange(1, 14) PARAMS = [ model.NumericParameter("dist_rup", True, None, 1000), model.NumericParameter("mag", True, 5.0, 8.2), ]
[docs] def __init__(self, scenario: model.Scenario): """Initialize the model.""" super().__init__(scenario) self._ln_resp = self._calc_ln_resp() self._ln_std = self._calc_ln_std()
def _calc_ln_resp(self) -> np.ndarray: """Calculate the natural logarithm of the response. Returns ------- ln_resp : class:`np.array`: natural log of the response """ s = self._scenario c = self.COEFF # Magnitude scaling f1 = c.c_1 + c.c_2 * s.mag + c.c_3 * (8.5 - s.mag) ** 2.5 # Distance scaling f2 = c.c_9 * np.log(s.dist_rup + 4.5) if s.dist_rup > 70: f2 += c.c_10 * np.log(s.dist_rup / 70.0) if s.dist_rup > 130: f2 += c.c_11 * np.log(s.dist_rup / 130.0) # Calculate scaled, magnitude dependent distance R for use when # calculating f3 dist = np.sqrt( s.dist_rup**2 + (c.c_5 * np.exp(c.c_6 * s.mag + c.c_7 * (8.5 - s.mag) ** 2.5)) ** 2 ) f3 = (c.c_4 + c.c_13 * s.mag) * np.log(dist) + (c.c_8 + c.c_12 * s.mag) * dist # Compute the ground motion ln_resp = f1 + f2 + f3 return ln_resp def _calc_ln_std(self) -> np.ndarray: """Calculate the logarithmic standard deviation. Returns ------- ln_std : class:`np.array`: natural log standard deviation """ s = self._scenario c = self.COEFF if s.mag < 7.2: ln_std = c.c_14 + c.c_15 * s.mag else: ln_std = c.c_16 return ln_std