Пример #1
0
    def test_from_points(self):
        lons = [10, -1.2]
        lats = [20, -3.4]
        depths = [30, -5.6]
        req_params = 'vs30 vs30measured z1pt0 z2pt5 backarc'.split()
        cll = SiteCollection.from_points(
            lons, lats, depths, SiteModelParam(), req_params)
        assert_eq(cll.vs30, [1.2, 1.2])
        assert_eq(cll.vs30measured, [True, True])
        assert_eq(cll.z1pt0, [3.4, 3.4])
        assert_eq(cll.z2pt5, [5.6, 5.6])
        assert_eq(cll.mesh.lons, [10, -1.1999999999999886])
        assert_eq(cll.mesh.lats, [20, -3.4])
        assert_eq(cll.mesh.depths, [30, -5.6])
        assert_eq(cll.backarc, [False, False])

        for arr in (cll.vs30, cll.z1pt0, cll.z2pt5):
            self.assertIsInstance(arr, numpy.ndarray)
            self.assertEqual(arr.dtype, float)
        self.assertEqual(cll.vs30measured.dtype, numpy.bool_)
        self.assertEqual(cll.backarc.dtype, numpy.uint8)
        self.assertEqual(len(cll), 2)

        # test split_in_tiles
        tiles = cll.split_in_tiles(2)  # there are 2 sites, 1 tile
        self.assertEqual(len(tiles), 1)

        tiles = cll.split_in_tiles(1)  # 2 tiles of 1 site each
        self.assertEqual(len(tiles), 2)

        # test split_max
        tiles = cll.split_max(2)  # there are 2 sites, 1 tile
        self.assertEqual(len(tiles), 1)

        tiles = cll.split_max(1)  # 2 tiles of 1 site each
        self.assertEqual(len(tiles), 2)

        # test geohash
        assert_eq(cll.geohash(4), numpy.array([b's5x1', b'7zrh']))

        # test duplicate points
        lons = numpy.arange(10, 20, .1)
        lons[40:50] = lons[30:40]  # add 10 duplicates
        lats = [0] * 100
        req_params = 'vs30 vs30measured z1pt0 z2pt5 backarc'.split()
        with self.assertRaises(ValueError):
            SiteCollection.from_points(
                lons, lats, None, SiteModelParam(), req_params)
Пример #2
0
    def test_from_points(self):
        lons = [10, -1.2]
        lats = [20, -3.4]
        depths = [30, -5.6]
        req_params = 'vs30 vs30measured z1pt0 z2pt5 backarc'.split()
        cll = SiteCollection.from_points(
            lons, lats, depths, SiteModelParam(), req_params)
        assert_eq(cll.vs30, [1.2, 1.2])
        assert_eq(cll.vs30measured, [True, True])
        assert_eq(cll.z1pt0, [3.4, 3.4])
        assert_eq(cll.z2pt5, [5.6, 5.6])
        assert_eq(cll.mesh.lons, [10, -1.1999999999999886])
        assert_eq(cll.mesh.lats, [20, -3.4])
        assert_eq(cll.mesh.depths, [30, -5.6])
        assert_eq(cll.backarc, [False, False])

        for arr in (cll.vs30, cll.z1pt0, cll.z2pt5):
            self.assertIsInstance(arr, numpy.ndarray)
            self.assertEqual(arr.dtype, float)
        for arr in (cll.vs30measured, cll.backarc):
            self.assertIsInstance(arr, numpy.ndarray)
            self.assertEqual(arr.dtype, bool)
        self.assertEqual(len(cll), 2)

        # test split_in_tiles
        tiles = cll.split_in_tiles(0)
        self.assertEqual(len(tiles), 1)

        tiles = cll.split_in_tiles(1)
        self.assertEqual(len(tiles), 1)

        tiles = cll.split_in_tiles(2)
        self.assertEqual(len(tiles), 2)
Пример #3
0
    def test_from_points(self):
        lons = [10, -1.2]
        lats = [20, -3.4]
        depths = [30, -5.6]
        req_params = 'vs30 vs30measured z1pt0 z2pt5 backarc'.split()
        cll = SiteCollection.from_points(
            lons, lats, depths, SiteModelParam(), req_params)
        assert_eq(cll.vs30, [1.2, 1.2])
        assert_eq(cll.vs30measured, [True, True])
        assert_eq(cll.z1pt0, [3.4, 3.4])
        assert_eq(cll.z2pt5, [5.6, 5.6])
        assert_eq(cll.mesh.lons, [10, -1.1999999999999886])
        assert_eq(cll.mesh.lats, [20, -3.4])
        assert_eq(cll.mesh.depths, [30, -5.6])
        assert_eq(cll.backarc, [False, False])

        for arr in (cll.vs30, cll.z1pt0, cll.z2pt5):
            self.assertIsInstance(arr, numpy.ndarray)
            self.assertEqual(arr.dtype, float)
        for arr in (cll.vs30measured, cll.backarc):
            self.assertIsInstance(arr, numpy.ndarray)
            self.assertEqual(arr.dtype, bool)
        self.assertEqual(len(cll), 2)

        # test split_in_tiles
        tiles = cll.split_in_tiles(0)
        self.assertEqual(len(tiles), 1)

        tiles = cll.split_in_tiles(1)
        self.assertEqual(len(tiles), 1)

        tiles = cll.split_in_tiles(2)
        self.assertEqual(len(tiles), 2)
Пример #4
0
    def test_from_points(self):
        lons = [10, -1.2]
        lats = [20, -3.4]
        cll = SiteCollection.from_points(lons, lats, [1, 2], SiteModelParam())
        assert_eq(cll.vs30, [1.2, 1.2])
        assert_eq(cll.vs30measured, [True, True])
        assert_eq(cll.z1pt0, [3.4, 3.4])
        assert_eq(cll.z2pt5, [5.6, 5.6])
        assert_eq(cll.mesh.lons, [10, -1.2])
        assert_eq(cll.mesh.lats, [20, -3.4])
        assert_eq(cll.mesh.depths, None)
        assert_eq(cll.backarc, [False, False])

        for arr in (cll.vs30, cll.z1pt0, cll.z2pt5):
            self.assertIsInstance(arr, numpy.ndarray)
            self.assertEqual(arr.dtype, float)
        for arr in (cll.vs30measured, cll.backarc):
            self.assertIsInstance(arr, numpy.ndarray)
            self.assertEqual(arr.flags.writeable, False)
            self.assertEqual(arr.dtype, bool)
        self.assertEqual(len(cll), 2)

        # test split_in_tiles
        tiles = cll.split_in_tiles(0)
        self.assertEqual(len(tiles), 1)

        tiles = cll.split_in_tiles(1)
        self.assertEqual(len(tiles), 1)

        tiles = cll.split_in_tiles(2)
        self.assertEqual(len(tiles), 2)
Пример #5
0
    def test_from_points(self):
        lons = [10, -1.2]
        lats = [20, -3.4]
        cll = SiteCollection.from_points(lons, lats, [1, 2], SiteModelParam())
        assert_eq(cll.vs30, [1.2, 1.2])
        assert_eq(cll.vs30measured, [True, True])
        assert_eq(cll.z1pt0, [3.4, 3.4])
        assert_eq(cll.z2pt5, [5.6, 5.6])
        assert_eq(cll.mesh.lons, [10, -1.2])
        assert_eq(cll.mesh.lats, [20, -3.4])
        assert_eq(cll.mesh.depths, None)
        assert_eq(cll.backarc, [False, False])

        for arr in (cll.vs30, cll.z1pt0, cll.z2pt5):
            self.assertIsInstance(arr, numpy.ndarray)
            self.assertEqual(arr.dtype, float)
        for arr in (cll.vs30measured, cll.backarc):
            self.assertIsInstance(arr, numpy.ndarray)
            self.assertEqual(arr.flags.writeable, False)
            self.assertEqual(arr.dtype, bool)
        self.assertEqual(len(cll), 2)

        # test split_in_tiles
        tiles = cll.split_in_tiles(0)
        self.assertEqual(len(tiles), 1)

        tiles = cll.split_in_tiles(1)
        self.assertEqual(len(tiles), 1)

        tiles = cll.split_in_tiles(2)
        self.assertEqual(len(tiles), 2)
Пример #6
0
def _setup_sites_yield_accel():
    """
    Returns a collection of sites (at four different locations) with
    different yield acceleration properties
    """
    ls_params = [[800., 1.0], [600., 0.9], [400., 0.8], [300., 0.6],
                 [200., 0.4], [150., 0.0]]
    point_1 = Point(-64.98651, -0.15738)
    point_2 = Point(-64.77466, -0.45686)
    point_3 = Point(-64.92747, -0.38363)
    point_4 = Point(-65.05396, -0.17088)
    sites = []
    for locn in [point_1, point_2, point_3, point_4]:
        for vs30, k_y in ls_params:
            sites.append({
                "lon": locn.longitude,
                "lat": locn.latitude,
                "vs30": vs30,
                "vs30measured": False,
                "z1pt0": 48.0,
                "z2pt5": 0.607,
                "yield_acceleration": k_y
            })
    site_model_dt = np.dtype([(p, site_param_dt[p]) for p in sorted(sites[0])])
    tuples = [
        tuple(site[name] for name in site_model_dt.names) for site in sites
    ]
    sites = np.array(tuples, site_model_dt)
    req_site_params = ("vs30", "yield_acceleration")
    return SiteCollection.from_points(sites["lon"],
                                      sites["lat"],
                                      sitemodel=sites,
                                      req_site_params=req_site_params)
Пример #7
0
def _setup_sites_landsliding():
    """
    Returns a collections of sites at four different locations with different
    landsliding properties for the HAZUS method
    """
    ls_params = [[800., 10], [800., 9], [600., 8], [600., 7], [400., 6],
                 [400., 5], [300., 4], [300., 3], [200., 2], [200., 1],
                 [150., 0]]
    point_1 = Point(-64.98651, -0.15738)
    point_2 = Point(-64.77466, -0.45686)
    point_3 = Point(-64.92747, -0.38363)
    point_4 = Point(-65.05396, -0.17088)
    sites = []
    for locn in [point_1, point_2, point_3, point_4]:
        for vs30, hazus_ls_cat in ls_params:
            sites.append({
                "lon": locn.longitude,
                "lat": locn.latitude,
                "vs30": vs30,
                "vs30measured": False,
                "z1pt0": 48.0,
                "z2pt5": 0.607,
                "landsliding_susceptibility": hazus_ls_cat
            })
    site_model_dt = np.dtype([(p, site_param_dt[p]) for p in sorted(sites[0])])
    tuples = [
        tuple(site[name] for name in site_model_dt.names) for site in sites
    ]
    sites = np.array(tuples, site_model_dt)
    req_site_params = ("vs30", "landsliding_susceptibility")
    return SiteCollection.from_points(sites["lon"],
                                      sites["lat"],
                                      sitemodel=sites,
                                      req_site_params=req_site_params)
Пример #8
0
 def test_normal(self):
     lons = [10, -1.2]
     lats = [20, -3.4]
     maximum_distance = {"Subduction IntraSlab": 200}
     sitecol = SiteCollection.from_points(lons, lats, SiteModelParam())
     tile = Tile(sitecol, maximum_distance)
     self.assertEqual(repr(tile), "<Tile -1 <= lon <= 10, -3 <= lat <= 20>")
     src = make_point_source(1, 10)
     self.assertTrue(src in tile)
Пример #9
0
 def test_normal(self):
     lons = [10, -1.2]
     lats = [20, -3.4]
     maximum_distance = {'Subduction IntraSlab': 200}
     sitecol = SiteCollection.from_points(lons, lats, SiteModelParam())
     tile = Tile(sitecol, maximum_distance)
     self.assertEqual(repr(tile), '<Tile -1 <= lon <= 10, -3 <= lat <= 20>')
     src = make_point_source(1, 10)
     self.assertTrue(src in tile)
Пример #10
0
 def test_cross_idl(self):
     lons = [-179.2, 178.0]
     lats = [3.0, 4.0]
     maximum_distance = {"Subduction IntraSlab": 200}
     sitecol = SiteCollection.from_points(lons, lats, SiteModelParam())
     tile = Tile(sitecol, maximum_distance)
     self.assertEqual(repr(tile), "<Tile 178 <= lon <= 180, 3 <= lat <= 4>")
     src = make_point_source(-179.3, 3.5)
     self.assertTrue(src in tile)
     src = make_point_source(178.2, 3.5)
     self.assertTrue(src in tile)
Пример #11
0
 def test_cross_idl(self):
     lons = [-179.2, 178.0]
     lats = [3.0, 4.0]
     maximum_distance = {'Subduction IntraSlab': 200}
     sitecol = SiteCollection.from_points(lons, lats, SiteModelParam())
     tile = Tile(sitecol, maximum_distance)
     self.assertEqual(repr(tile), '<Tile 178 <= lon <= 180, 3 <= lat <= 4>')
     src = make_point_source(-179.3, 3.5)
     self.assertTrue(src in tile)
     src = make_point_source(178.2, 3.5)
     self.assertTrue(src in tile)
Пример #12
0
    def test_source_errors_with_sites(self):
        # exercise the case where an error occurs while computing on a given
        # seismic source; in this case, we expect an error to be raised which
        # signals the id of the source in question
        fail_source = self.FailSource(2, [self.r2_1])
        fake_sites = SiteCollection.from_points([0], [0])
        with self.assertRaises(ValueError) as ae:
            list(
                stochastic_event_set([self.source1, fail_source],
                                     sites=fake_sites))

        expected_error = (
            'An error occurred with source id=2. Error: Something bad happened'
        )
        self.assertEqual(expected_error, str(ae.exception))
Пример #13
0
def _setup_sites_liquefaction_zhu():
    """
    Returns a collection of sites for liquefaction hazard analysis using the
    HAZUS method
    """

    point_1 = Point(-64.98651, -0.15738)
    point_2 = Point(-64.77466, -0.45686)
    point_3 = Point(-64.92747, -0.38363)
    point_4 = Point(-65.05396, -0.17088)
    params = [[800., 0, 100., 0.0], [600., 1, 50., 1.0], [400., 2, 50., 2.0],
              [300., 3, 20., 5.0], [200., 4, 20., 7.0], [150., 5, 20., 10.0],
              [150., 5, 5., 15.0]]
    sites = []
    for locn in [point_1, point_2, point_3, point_4]:
        for vs30, hazus_cat, dw, cti in params:
            sites.append({
                "lon": locn.longitude,
                "lat": locn.latitude,
                "vs30": vs30,
                "vs30measured": False,
                "z1pt0": 48.0,
                "z2pt5": 0.607,
                "liquefaction_susceptibility": hazus_cat,
                "dw": dw,
                "cti": cti
            })
    site_model_dt = np.dtype([(p, site_param_dt[p]) for p in sorted(sites[0])])
    tuples = [
        tuple(site[name] for name in site_model_dt.names) for site in sites
    ]
    sites = np.array(tuples, site_model_dt)
    req_site_params = ("vs30", "liquefaction_susceptibility", "dw", "cti")
    return SiteCollection.from_points(sites["lon"],
                                      sites["lat"],
                                      sitemodel=sites,
                                      req_site_params=req_site_params)
Пример #14
0
 def setUpClass(cls):
     lons = numpy.array([-180, -178, 179, 180, 180], numpy.float32)
     lats = numpy.array([-27, -28, -26, -30, -28], numpy.float32)
     cls.sites = SiteCollection.from_points(lons, lats)
Пример #15
0
 def setUpClass(cls):
     lons = numpy.array([-180, -178, 179, 180, 180], numpy.float32)
     lats = numpy.array([-27, -28, -26, -30, -28], numpy.float32)
     cls.sites = SiteCollection.from_points(lons, lats)