Exemplo n.º 1
0
    def test_with_intra_and_inter(self):
        mean = 10
        inter = 2
        intra = 3
        sites = SiteCollection([Site(Point(0, 0), mean, False, inter, intra)])

        self.gsim.expect_same_sitecol = False

        numpy.random.seed(37)
        cormo = JB2009CorrelationModel(vs30_clustering=False)

        distribution = scipy.stats.norm()
        eps_intra = distribution.rvs(size=(1, 1))
        eps_intra = numpy.array(
            cormo.apply_correlation(sites, self.imt1, eps_intra))[0]

        eps_inter = distribution.rvs(size=(1, 1))

        gmf = ground_motion_field_with_residuals(
            self.rupture, sites, self.imt1, self.gsim,
            truncation_level=None,
            intra_residual_epsilons=eps_intra,
            inter_residual_epsilons=eps_inter
        )

        numpy.testing.assert_array_almost_equal(gmf, 11.1852253)
Exemplo n.º 2
0
    def test_total_stddev_only(self):
        truncation_level = None

        numpy.random.seed(37)
        distribution = scipy.stats.norm()
        epsilons = distribution.rvs(size=len(self.sites_total))

        intensity = ground_motion_field_with_residuals(
            self.rupture, self.sites_total,
            self.imt2,
            self.total_stddev_gsim,
            truncation_level,
            total_residual_epsilons=epsilons)
        assert_allclose((intensity[0].mean(), intensity[0].std()),
                        [8.2101853, 3.4256517], rtol=4e-2)
        assert_allclose((intensity[1].mean(), intensity[1].std()),
                        [9.05092648, 4.3603691], rtol=4e-2)
        assert_allclose((intensity[2].mean(), intensity[2].std()),
                        [8.14012353, 3.3886777], rtol=4e-2)

        assert_allclose((intensity[3].mean(), intensity[3].std()),
                        [11.50308827, 9.22499337], rtol=4e-2)
        assert_allclose((intensity[4].mean(), intensity[4].std()),
                        [11.50308827, 9.22499337], rtol=4e-2)

        assert_allclose((intensity[5].mean(), intensity[5].std()),
                        [8.07006177, 3.35942342], rtol=4e-2)
        assert_allclose((intensity[6].mean(), intensity[6].std()),
                        [8.07006177, 3.35942342], rtol=4e-2)
Exemplo n.º 3
0
    def test_with_intra_and_inter(self):
        mean = 10
        inter = 2
        intra = 3
        sites = SiteCollection([Site(Point(0, 0), mean, False, inter, intra)])

        self.gsim.expect_same_sitecol = False

        numpy.random.seed(37)
        cormo = JB2009CorrelationModel(vs30_clustering=False)

        distribution = scipy.stats.norm()
        eps_intra = distribution.rvs(size=(1, 1))
        eps_intra = numpy.array(
            cormo.apply_correlation(sites, self.imt1, eps_intra))[0]

        eps_inter = distribution.rvs(size=(1, 1))

        gmf = ground_motion_field_with_residuals(
            self.rupture,
            sites,
            self.imt1,
            self.gsim,
            truncation_level=None,
            intra_residual_epsilons=eps_intra,
            inter_residual_epsilons=eps_inter)

        numpy.testing.assert_array_almost_equal(gmf, 11.1852253)
Exemplo n.º 4
0
 def test_zero_truncation(self):
     truncation_level = 0
     self.gsim.expect_stddevs = False
     intensity = ground_motion_field_with_residuals(
         self.rupture, self.sites, self.imt1, self.gsim, truncation_level)
     for i in xrange(7):
         self.assertEqual(intensity[i].std(), 0)
     self.assertEqual(intensity[0].mean(), self.mean1)
     self.assertEqual(intensity[1].mean(), self.mean2)
     self.assertEqual(intensity[2].mean(), self.mean3)
     self.assertEqual(intensity[3].mean(), self.mean4567)
     self.assertEqual(intensity[4].mean(), self.mean4567)
     self.assertEqual(intensity[5].mean(), self.mean4567)
     self.assertEqual(intensity[6].mean(), self.mean4567)
Exemplo n.º 5
0
 def test_zero_truncation(self):
     truncation_level = 0
     self.gsim.expect_stddevs = False
     intensity = ground_motion_field_with_residuals(self.rupture,
                                                    self.sites, self.imt1,
                                                    self.gsim,
                                                    truncation_level)
     for i in xrange(7):
         self.assertEqual(intensity[i].std(), 0)
     self.assertEqual(intensity[0].mean(), self.mean1)
     self.assertEqual(intensity[1].mean(), self.mean2)
     self.assertEqual(intensity[2].mean(), self.mean3)
     self.assertEqual(intensity[3].mean(), self.mean4567)
     self.assertEqual(intensity[4].mean(), self.mean4567)
     self.assertEqual(intensity[5].mean(), self.mean4567)
     self.assertEqual(intensity[6].mean(), self.mean4567)
Exemplo n.º 6
0
    def test_total_stddev_only(self):
        truncation_level = None

        numpy.random.seed(37)
        distribution = scipy.stats.norm()
        epsilons = distribution.rvs(size=len(self.sites_total))

        intensity = ground_motion_field_with_residuals(
            self.rupture,
            self.sites_total,
            self.imt2,
            self.total_stddev_gsim,
            truncation_level,
            total_residual_epsilons=epsilons)
        assert_allclose((intensity[0].mean(), intensity[0].std()),
                        [8.2101853, 3.4256517],
                        rtol=4e-2)
        assert_allclose((intensity[1].mean(), intensity[1].std()),
                        [9.05092648, 4.3603691],
                        rtol=4e-2)
        assert_allclose((intensity[2].mean(), intensity[2].std()),
                        [8.14012353, 3.3886777],
                        rtol=4e-2)

        assert_allclose((intensity[3].mean(), intensity[3].std()),
                        [11.50308827, 9.22499337],
                        rtol=4e-2)
        assert_allclose((intensity[4].mean(), intensity[4].std()),
                        [11.50308827, 9.22499337],
                        rtol=4e-2)

        assert_allclose((intensity[5].mean(), intensity[5].std()),
                        [8.07006177, 3.35942342],
                        rtol=4e-2)
        assert_allclose((intensity[6].mean(), intensity[6].std()),
                        [8.07006177, 3.35942342],
                        rtol=4e-2)
Exemplo n.º 7
0
    def compute(self, ruptures, rupture_seeds, rupture_ids, maximum_distance):
        """
        Compute ground motion values radiated from `ruptures`.

        :param ruptures:
            an iterator over N
            :class:`openquake.hazardlib.source.rupture.Rupture` instances
        :param rupture_seeds:
            an interator over N integer values to be used to initialize the
            RNG
        :param rupture_ids:
            an iterator over N integer values. Each of them uniquely identifies
            the corresponding `rupture`
        :param float maximum_distance:
            the maximum distance threshold used to filter the sites to be
            considered for each rupture
        :returns:
            a tuple with two elements. The first one is a list of A numpy
            array. Each of them contains the ground motion values associated
            with an asset. The second element contains the list of A assets
            considered.
        """
        all_gmvs = []
        all_assets = []

        site_gmv = collections.defaultdict(dict)
        performance_dict = collections.Counter()

        for rupture, rupture_seed, rupture_id in itertools.izip(
                ruptures, rupture_seeds, rupture_ids):

            gsim, tstddev = self.gsim(rupture)

            with LightMonitor(performance_dict, 'filtering sites'):
                sites_of_interest, mask = self.sites_of_interest(
                    rupture, maximum_distance)

            if not sites_of_interest:
                continue

            with LightMonitor(performance_dict, 'generating epsilons'):
                (total, inter, intra) = self.epsilons(rupture_seed, mask,
                                                      tstddev)

            with LightMonitor(performance_dict,
                              'compute ground motion fields'):
                gmf = ground_motion_field_with_residuals(
                    rupture,
                    sites_of_interest,
                    self.imt,
                    gsim,
                    self.truncation_level,
                    total_residual_epsilons=total,
                    intra_residual_epsilons=intra,
                    inter_residual_epsilons=inter)

            with LightMonitor(performance_dict, 'collecting gmvs'):
                for site, gmv in itertools.izip(sites_of_interest, gmf):
                    site_gmv[site.id][rupture_id] = gmv

        logs.LOG.debug('Disaggregation of the time spent in the loop %s' %
                       (performance_dict))

        for site_id, assets in self.sites_assets:
            n_assets = len(assets)
            if site_id in site_gmv:
                gmvs = [site_gmv[site_id].get(r, 0) for r in rupture_ids]
            else:
                gmvs = numpy.zeros(len(rupture_ids))
            del site_gmv[site_id]

            all_gmvs.extend([gmvs] * n_assets)
            all_assets.extend(assets)

        return all_assets, all_gmvs
Exemplo n.º 8
0
    def compute(self, ruptures, rupture_seeds, rupture_ids, maximum_distance):
        """
        Compute ground motion values radiated from `ruptures`.

        :param ruptures:
            an iterator over N
            :class:`openquake.hazardlib.source.rupture.Rupture` instances
        :param rupture_seeds:
            an interator over N integer values to be used to initialize the
            RNG
        :param rupture_ids:
            an iterator over N integer values. Each of them uniquely identifies
            the corresponding `rupture`
        :param float maximum_distance:
            the maximum distance threshold used to filter the sites to be
            considered for each rupture
        :returns:
            a tuple with two elements. The first one is a list of A numpy
            array. Each of them contains the ground motion values associated
            with an asset. The second element contains the list of A assets
            considered.
        """
        all_gmvs = []
        all_assets = []

        site_gmv = collections.defaultdict(dict)
        performance_dict = collections.Counter()

        for rupture, rupture_seed, rupture_id in itertools.izip(
                ruptures, rupture_seeds, rupture_ids):

            gsim, tstddev = self.gsim(rupture)

            with LightMonitor(performance_dict, 'filtering sites'):
                sites_of_interest, mask = self.sites_of_interest(
                    rupture, maximum_distance)

            if not sites_of_interest:
                continue

            with LightMonitor(performance_dict, 'generating epsilons'):
                (total, inter, intra) = self.epsilons(
                    rupture_seed, mask, tstddev)

            with LightMonitor(performance_dict, 'compute ground motion fields'):
                gmf = ground_motion_field_with_residuals(
                    rupture, sites_of_interest,
                    self.imt, gsim, self.truncation_level,
                    total_residual_epsilons=total,
                    intra_residual_epsilons=intra,
                    inter_residual_epsilons=inter)

            with LightMonitor(performance_dict, 'collecting gmvs'):
                for site, gmv in itertools.izip(sites_of_interest, gmf):
                    site_gmv[site.id][rupture_id] = gmv

        logs.LOG.debug('Disaggregation of the time spent in the loop %s' % (
            performance_dict))

        for site_id, assets in self.sites_assets:
            n_assets = len(assets)
            if site_id in site_gmv:
                gmvs = [site_gmv[site_id].get(r, 0) for r in rupture_ids]
            else:
                gmvs = numpy.zeros(len(rupture_ids))
            del site_gmv[site_id]

            all_gmvs.extend([gmvs] * n_assets)
            all_assets.extend(assets)

        return all_assets, all_gmvs