Source code for pygmm.idriss_2014

"""Idriss (2014, :cite:`idriss14`) model."""

import numpy as np

from . import model

__author__ = "Albert Kottke"


[docs] class Idriss2014(model.GroundMotionModel): """Idriss (2014, :cite:`idriss14`) model. This model was developed for active tectonic regions as part of the NGA-West2 effort. Parameters ---------- scenario : :class:`pygmm.model.Scenario` earthquake scenario """ NAME = "Idriss (2014)" ABBREV = "I14" # Reference velocity (m/s) V_REF = 1200.0 # Load the coefficients for the model COEFF = dict( small=model.load_data_file("idriss_2014-small.csv", 2), large=model.load_data_file("idriss_2014-large.csv", 2), ) PERIODS = COEFF["small"]["period"] INDEX_PGA = 0 INDICES_PSA = np.arange(22) PARAMS = [ model.NumericParameter("dist_rup", True, None, 150), model.NumericParameter("mag", True, 5, None), model.NumericParameter("v_s30", True, 450, 1200), model.CategoricalParameter("mechanism", True, ["SS", "RS"], "SS"), ]
[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["small"] if s.mag <= 6.75 else self.COEFF["large"] if s.mechanism == "RS": flag_mech = 1 else: # SS/RS/U flag_mech = 0 f_mag = c.alpha_1 + c.alpha_2 * s.mag + c.alpha_3 * (8.5 - s.mag) ** 2 f_dst = ( -(c.beta_1 + c.beta_2 * s.mag) * np.log(s.dist_rup + 10) + c.gamma * s.dist_rup ) f_ste = c.epsilon * np.log(s.v_s30) f_mec = c.phi * flag_mech ln_resp = f_mag + f_dst + f_ste + f_mec 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 ln_std = ( 1.18 + 0.035 * np.log(np.clip(self.PERIODS, 0.05, 3.0)) - 0.06 * np.clip(s.mag, 5.0, 7.5) ) return ln_std