def test_clip_mean(self): mean = numpy.array([0.1, 0.2, 0.6, 1.2]) imt = PGA() clipped_mean = clip_mean(imt, mean) numpy.testing.assert_allclose( [0.1, 0.2, 0.405, 0.405], clipped_mean ) mean = numpy.array([0.1, 0.2, 0.6, 1.2]) imt = SA(period=0.1, damping=5.) clipped_mean = clip_mean(imt, mean) numpy.testing.assert_allclose( [0.1, 0.2, 0.6, 1.099], clipped_mean ) mean = numpy.array([0.1, 0.2, 0.6, 1.2]) imt = SA(period=0.6, damping=5.) clipped_mean = clip_mean(imt, mean) numpy.testing.assert_allclose( [0.1, 0.2, 0.6, 1.2], clipped_mean ) mean = numpy.array([0.1, 0.2, 0.6, 1.2]) imt = SA(period=0.01, damping=5.) clipped_mean = clip_mean(imt, mean) numpy.testing.assert_allclose( [0.1, 0.2, 0.6, 1.2], clipped_mean )
def compute(self, ctx, imts, mean, sig, tau, phi): """ See :meth:`superclass method <.base.GroundShakingIntensityModel.compute>` for spec of input and result values. """ for m, imt in enumerate(imts): C = self.COEFFS[imt] if self.kind == 'Mblg': mag = mblg_to_mw_johnston_96(ctx.mag) elif self.kind == 'Mblg2008': mag = mblg_to_mw_atkinson_boore_87(ctx.mag) else: mag = ctx.mag # computing the magnitude term. Equation 19, page 2291 f1 = _compute_magnitude_scaling_term(C, mag) # computing the geometrical spreading term. Equation 20, page 2291 f2 = _compute_geometrical_spreading_term(C, ctx.rrup) # computing the anelastic attenuation term. Equation 21, page 2291 f3 = _compute_anelastic_attenuation_term(C, ctx.rrup, mag) # computing the mean ln(IMT) using equation 18 at page 2290 mean[m] = f1 + f2 + f3 if self.kind != 'base': # in subclasses mean[m] = clip_mean(imt, mean[m]) # computing the total standard deviation sig[m] = (C['c14'] + C['c15'] * mag) if mag < 7.2 else C['c16']
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. :raises ValueError: if imt is instance of :class:`openquake.hazardlib.imt.SA` with unsupported period. """ assert all(stddev_type in self.DEFINED_FOR_STANDARD_DEVIATION_TYPES for stddev_type in stddev_types) if imt not in self.IMTS_TABLES.keys(): raise ValueError( 'IMT %s not supported in FrankelEtAl1996NSHMP. ' % repr(imt) + 'FrankelEtAl1996NSHMP does not allow interpolation for ' + 'unsupported periods.' ) mean = self._compute_mean(imt, rup.mag, dists.rhypo) mean = clip_mean(imt, mean) stddevs = self._compute_stddevs(imt, dists.rhypo.shape, stddev_types) return mean, stddevs
def compute(self, ctx, imts, mean, sig, tau, phi): """ See :meth:`superclass method <.base.GroundShakingIntensityModel.compute>` for spec of input and result values. """ if self.CUTOFF_RRUP: # for SGS subclass ctx.rrup[ctx.rrup <= self.CUTOFF_RRUP] = self.CUTOFF_RRUP for m, imt in enumerate(imts): if self.mag_eq == "NA": if 'Modified' in self.__class__.__name__: # stress drop scaling factor is now a property of magnitude scale_fac = _get_stress_drop_scaling_factor(ctx.mag) else: scale_fac = 0 mean[m] = _get_mean(self, ctx.vs30, ctx.mag, ctx.rrup, imt, scale_fac=scale_fac) set_sig(self.kind, None, sig[m], tau[m], phi[m]) else: mag = _convert_magnitude(self.mag_eq, ctx.mag) # stress drop scaling factor defined in subroutine getAB06 mean[m] = _get_mean(self, ctx.vs30, mag, ctx.rrup, imt, scale_fac=self.scale_fac) mean[m] = clip_mean(imt, mean[m]) set_sig(self.kind, None, sig[m], tau[m], phi[m])
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. :raises ValueError: if imt is instance of :class:`openquake.hazardlib.imt.SA` with unsupported period. """ assert all(stddev_type in self.DEFINED_FOR_STANDARD_DEVIATION_TYPES for stddev_type in stddev_types) if imt not in self.IMTS_TABLES: raise ValueError( 'IMT %s not supported in FrankelEtAl1996NSHMP. ' % repr(imt) + 'FrankelEtAl1996NSHMP does not allow interpolation for ' + 'unsupported periods.') mean = self._compute_mean(imt, rup.mag, dists.rhypo.copy()) mean = clip_mean(imt, mean) stddevs = self._compute_stddevs(imt, dists.rhypo.shape, stddev_types) return mean, stddevs
def compute(self, ctx, imts, mean, sig, tau, phi): """ See :meth:`superclass method <.base.GroundShakingIntensityModel.compute>` for spec of input and result values. """ for m, imt in enumerate(imts): C = self.COEFFS[imt] mean[m] = clip_mean(imt, _compute_mean(C, ctx.mag, ctx.rjb)) sig[m] = C['sigma']
def compute(self, ctx: np.recarray, imts, mean, sig, tau, phi): """ See :meth:`superclass method <.base.GroundShakingIntensityModel.compute>` for spec of input and result values. """ mag = _convert_magnitude(self.kind, ctx.mag) for m, imt in enumerate(imts): C = self.COEFFS[imt] mean[m] = _compute_mean(self.kind, C, mag, ctx.rrup) mean[m] = clip_mean(imt, mean[m]) sig[m] = np.where(mag < 7.16, C['c11'] + C['c12'] * mag, C['c13'])
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. """ mag = self._convert_magnitude(rup.mag) mean = self._get_mean(sites.vs30, mag, dists.rrup, imt, scale_fac=0) stddevs = self._get_stddevs(stddev_types, num_sites=sites.vs30.size) mean = clip_mean(imt, mean) return mean, stddevs
def compute(self, ctx, imts, mean, sig, tau, phi): """ See :meth:`superclass method <.base.GroundShakingIntensityModel.compute>` for spec of input and result values. """ for m, imt in enumerate(imts): C = self.COEFFS[imt] mag = _convert_magnitude(self.kind, ctx.mag) mean[m] = ( C['c1'] + C['c2'] * mag + C['c10'] * (mag - 6)**2 + (C['c6'] + C['c7'] * mag) * np.log(ctx.rjb + np.exp(C['c4']))) mean[m] = clip_mean(imt, mean[m]) sig[m] = C['sigma']
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. """ assert all(stddev_type in self.DEFINED_FOR_STANDARD_DEVIATION_TYPES for stddev_type in stddev_types) C = self.COEFFS[imt] mean = self._compute_mean(C, rup.mag, dists.rjb) stddevs = self._compute_stddevs(C, dists.rjb.size, stddev_types) mean = clip_mean(imt, mean) return mean, stddevs
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. """ assert all(stddev_type in self.DEFINED_FOR_STANDARD_DEVIATION_TYPES for stddev_type in stddev_types) C = self.COEFFS[imt] mean = self._compute_mean(C, rup.mag, dists.rjb) mean = clip_mean(imt, mean) stddevs = self._compute_stddevs(C, dists.rjb.size, stddev_types) return mean, stddevs
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. """ mag = mblg_to_mw_atkinson_boore_87(rup.mag) # stress drop scaling factor defined in subroutine getAB06 mean = self._get_mean( sites.vs30, mag, dists.rrup, imt, scale_fac=0.5146 ) stddevs = self._get_stddevs(stddev_types, num_sites=sites.vs30.size) mean = clip_mean(imt, mean) return mean, stddevs
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. """ mag = self._convert_magnitude(rup.mag) # stress drop scaling factor defined in subroutine getAB06 mean = self._get_mean(sites.vs30, mag, dists.rrup, imt, scale_fac=0.5146) stddevs = self._get_stddevs(None, stddev_types, sites.vs30.size) mean = clip_mean(imt, mean) return mean, stddevs
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. """ assert all(stddev_type in self.DEFINED_FOR_STANDARD_DEVIATION_TYPES for stddev_type in stddev_types) C = self.COEFFS[imt] mag = self._convert_magnitude(rup.mag) mean = ( C['c1'] + C['c2'] * mag + C['c10'] * (mag - 6)**2 + (C['c6'] + C['c7'] * mag) * np.log(dists.rjb + np.exp(C['c4']))) mean = clip_mean(imt, mean) stddevs = self._compute_stddevs(C, dists.rjb.size, stddev_types) return mean, stddevs
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. """ assert all(stddev_type in self.DEFINED_FOR_STANDARD_DEVIATION_TYPES for stddev_type in stddev_types) C = self.COEFFS[imt] mag = self._convert_magnitude(rup.mag) mean = ( C['c1'] + C['c2'] * mag + C['c10'] * (mag - 6) ** 2 + (C['c6'] + C['c7'] * mag) * np.log(dists.rjb + np.exp(C['c4'])) ) mean = clip_mean(imt, mean) stddevs = self._compute_stddevs(C, dists.rjb.size, stddev_types) return mean, stddevs
def _clip_mean(self, imt, mean): """ Return mean values unchanged. This is a dummy method that subclasses can change to incorporate clipping of mean values. """ return clip_mean(imt, mean)