Esempio n. 1
0
    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
        )
Esempio n. 2
0
    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
        )
Esempio n. 3
0
    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
Esempio n. 5
0
 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])
Esempio n. 6
0
    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
Esempio n. 7
0
 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']
Esempio n. 8
0
    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
Esempio n. 10
0
 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']
Esempio n. 11
0
    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
Esempio n. 12
0
    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
Esempio n. 14
0
    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
Esempio n. 15
0
    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
Esempio n. 16
0
    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)
Esempio n. 18
0
 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)