コード例 #1
0
    def test(self):
        # relies on mesh.get_convex_hull() and polygon.dilate
        source = self._make_source()
        poly = source.get_rupture_enclosing_polygon(dilation=5.0)

        mesh = Mesh(numpy.array([[-1., 1.], [-1., 1.]]),
                    numpy.array([[0., 0.], [0., 0.]]),
                    numpy.array([[0., 0.], [10., 10.]]))

        numpy.testing.assert_equal(poly.lons,
                                   mesh.get_convex_hull().dilate(5.0).lons)
        numpy.testing.assert_equal(poly.lats,
                                   mesh.get_convex_hull().dilate(5.0).lats)
コード例 #2
0
    def test(self):
        # relies on mesh.get_convex_hull() and polygon.dilate
        source = self._make_source()
        poly = source.get_rupture_enclosing_polygon(dilation=5.0)

        mesh = Mesh(numpy.array([[-1., 1.], [-1., 1.]]),
                    numpy.array([[0., 0.], [0., 0.]]),
                    numpy.array([[0., 0.], [10., 10.]]))

        numpy.testing.assert_equal(
            poly.lons, mesh.get_convex_hull().dilate(5.0).lons
        )
        numpy.testing.assert_equal(
            poly.lats, mesh.get_convex_hull().dilate(5.0).lats
        )
コード例 #3
0
ファイル: configure.py プロジェクト: QingleCheng/gmpe-smtk
    def get_target_sites_line(self,
                              maximum_distance,
                              spacing,
                              vs30,
                              line_azimuth=90.,
                              origin_point=(0.5, 0.5),
                              as_log=False,
                              vs30measured=True,
                              z1pt0=None,
                              z2pt5=None,
                              backarc=False):
        """
        Defines the target sites along a line with respect to the rupture
        """
        #input_origin_point = deepcopy(origin_point)
        azimuth, origin_location, z1pt0, z2pt5 = _setup_site_peripherals(
            line_azimuth, origin_point, vs30, z1pt0, z2pt5, self.strike,
            self.surface)

        self.target_sites = [
            Site(origin_location,
                 vs30,
                 vs30measured,
                 z1pt0,
                 z2pt5,
                 backarc=backarc)
        ]
        spacings = self._define_line_spacing(maximum_distance, spacing, as_log)
        for offset in spacings:
            target_loc = origin_location.point_at(offset, 0., azimuth)
            # Get Rupture distance
            temp_mesh = Mesh(np.array(target_loc.longitude),
                             np.array(target_loc.latitude),
                             np.array(target_loc.depth))
            distance = self.surface.get_min_distance(temp_mesh)
            self.target_sites.append(
                Site(target_loc,
                     vs30,
                     vs30measured,
                     z1pt0,
                     z2pt5,
                     backarc=backarc))
        self.target_sites_config = {
            "TYPE": "Line",
            "RMAX": maximum_distance,
            "SPACING": spacing,
            "AZIMUTH": line_azimuth,
            "ORIGIN": origin_point,
            "AS_LOG": as_log,
            "VS30": vs30,
            "VS30MEASURED": vs30measured,
            "Z1.0": z1pt0,
            "Z2.5": z2pt5,
            "BACKARC": backarc
        }
        self.target_sites = SiteCollection(self.target_sites)
        return self.target_sites
コード例 #4
0
ファイル: multi_test.py プロジェクト: rcgee/oq-hazardlib
    def setUp(self):
        self.surfaces_mesh2D = [
            self.FakeSurface(numpy.array([[-1., 2., 3.], [4., 5., 6.]]),
                             numpy.array([[0.1, 0.2, 0.3], [0.4, 0.5, 0.6]]),
                             numpy.array([[1.1, 1.2, 1.3], [1.4, 1.5, 1.6]]),
                             numpy.array([[1.1, 1.2, 1.3], [1.4, 1.5, 1.6]]),
                             2.0, 45.0, 60.0, 10.0, 10.0),
            self.FakeSurface(numpy.array([[-0.5, 3., 2.], [5., 4., 5.]]),
                             numpy.array([[2.1, 2.2, 2.3], [2.4, 2.5, 2.6]]),
                             numpy.array([[3.1, 3.2, 3.3], [3.4, 3.5, 3.6]]),
                             numpy.array([[2.1, 2.2, 2.3], [2.4, 2.5, 2.6]]),
                             6, 70.0, 90.0, 8, 20.0),
            self.FakeSurface(numpy.array([[5., 4., 4.], [6., 6., 7.]]),
                             numpy.array([[4.1, 4.2, 4.3], [4.4, 4.5, 4.6]]),
                             numpy.array([[5.1, 5.2, 5.3], [5.4, 5.5, 5.6]]),
                             numpy.array([[6.1, 6.2, 6.3], [6.4, 6.5, 6.6]]),
                             10, 100.0, 40.0, 15, 60.0)
        ]

        self.mesh2D = Mesh(numpy.array([[1., 2., 3.], [4., 5., 6.]]),
                           numpy.array([[1., 2., 3.], [4., 5., 6.]]),
                           numpy.array([[1., 2., 3.], [4., 5., 6.]]))

        self.surfaces_mesh1D = [
            self.FakeSurface(numpy.array([-1., 2., 3.]),
                             numpy.array([0.1, 0.2, 0.3]),
                             numpy.array([1.1, 1.2, 1.3]),
                             numpy.array([1.1, 1.2, 1.3]), 2.0, 45.0, 60.0,
                             10.0, 10.0),
            self.FakeSurface(numpy.array([-0.5, 3., 2.]),
                             numpy.array([2.1, 2.2, 2.3]),
                             numpy.array([3.1, 3.2, 3.3]),
                             numpy.array([2.1, 2.2, 2.3]), 6, 70.0, 90.0, 8,
                             20.0),
            self.FakeSurface(numpy.array([5., 4., 4.]),
                             numpy.array([4.1, 4.2, 4.3]),
                             numpy.array([5.1, 5.2, 5.3]),
                             numpy.array([6.1, 6.2, 6.3]), 10, 100.0, 40.0, 15,
                             60.0)
        ]

        self.mesh1D = Mesh(numpy.array([1., 2., 3.]), numpy.array([1., 2.,
                                                                   3.]),
                           numpy.array([1., 2., 3.]))
コード例 #5
0
ファイル: configure.py プロジェクト: QingleCheng/gmpe-smtk
def _rup_to_point(distance,
                  surface,
                  origin,
                  azimuth,
                  distance_type='rjb',
                  iter_stop=1E-3,
                  maxiter=1000):
    """
    Place a point at a given distance from a rupture along a specified azimuth
    """
    pt0 = origin
    pt1 = origin.point_at(distance, 0., azimuth)
    #print pt0, pt1
    r_diff = np.inf
    dip = surface.dip
    sin_dip = np.sin(np.radians(dip))
    dist_sin_dip = distance / sin_dip
    #max_surf_dist = surface.width / np.cos(np.radians(dip))
    iterval = 0
    while (np.fabs(r_diff) >= iter_stop) and (iterval <= maxiter):
        pt1mesh = Mesh(np.array([pt1.longitude]), np.array([pt1.latitude]),
                       None)
        if distance_type == 'rjb' or np.fabs(dip - 90.0) < 1.0E-3:
            r_diff = (distance -
                      surface.get_joyner_boore_distance(pt1mesh)).flatten()
            pt0 = Point(pt1.longitude, pt1.latitude)
            if r_diff > 0.:
                pt1 = pt0.point_at(r_diff, 0., azimuth)
            else:
                pt1 = pt0.point_at(np.fabs(r_diff), 0.,
                                   (azimuth + 180.) % 360.)
        elif distance_type == 'rrup':
            rrup = surface.get_min_distance(pt1mesh).flatten()
            if azimuth >= 0.0 and azimuth <= 180.0:
                # On hanging wall
                r_diff = dist_sin_dip - (rrup / sin_dip)

            else:
                # On foot wall
                r_diff = distance - rrup
            pt0 = Point(pt1.longitude, pt1.latitude)

            #print azimuth, (azimuth + 180.0) % 360,  rrup, r_diff, np.fabs(r_diff)
            if r_diff > 0.:
                pt1 = pt0.point_at(r_diff, 0., azimuth)
            else:
                pt1 = pt0.point_at(np.fabs(r_diff), 0.,
                                   (azimuth + 180.) % 360.)

        else:
            raise ValueError('Distance type must be rrup or rjb!')
        iterval += 1
    return pt1
コード例 #6
0
 def get_distances(self, centroid, ruptures, lons, lats):
     """
     Calculates the source to site distances
     """
     nsites = len(lons)
     mesh = Mesh(lons, lats)
     distances = np.zeros([len(ruptures), nsites, 4])
     for i, rup in enumerate(ruptures):
         distances[i, :, 0] = rup.get_joyner_boore_distance(mesh)
         distances[i, :, 1] = rup.get_min_distance(mesh)
         distances[i, :, 2] = rup.get_rx_distance(mesh)
         distances[i, :, 3] = rup.get_ry0_distance(mesh)
     rhypo = centroid.distance_to_mesh(mesh)
     return distances, rhypo
コード例 #7
0
def _get_min_distance_to_volcanic_front(lons, lats):
    """
    Compute and return minimum distance between volcanic front and points
    specified by 'lon' and 'lat'.

    Distance is negative if point is located east of the volcanic front,
    positive otherwise.

    The method uses the same approach as :meth:`_get_min_distance_to_sub_trench`
    but final distance is returned without taking the absolute value.
    """
    vf = _construct_surface(VOLCANIC_FRONT_LONS, VOLCANIC_FRONT_LATS, 0., 10.)
    sites = Mesh(lons, lats, None)
    return vf.get_rx_distance(sites)
コード例 #8
0
def get_distances_from_surface(catalogue, surface):
    """
    This computes distances
    """
    nel = len(catalogue.data['longitude'])
    dsts = np.empty((nel))
    delta = 4000
    if nel < delta:
        mesh = Mesh(catalogue.data['longitude'][0:nel],
                    catalogue.data['latitude'][0:nel],
                    catalogue.data['depth'][0:nel])
        dsts = surface.get_min_distance(mesh)
    else:
        i = 0
        upp = 0
        while upp < nel - 1:
            upp = min([i + delta, nel - 1])
            mesh = Mesh(catalogue.data['longitude'][i:upp],
                        catalogue.data['latitude'][i:upp],
                        catalogue.data['depth'][i:upp])
            tmp = surface.get_min_distance(mesh)
            dsts[i:upp] = tmp
            i = upp + 1
    return dsts
コード例 #9
0
ファイル: configure.py プロジェクト: QingleCheng/gmpe-smtk
 def _site_collection_to_mesh(self):
     """
     Returns a collection of sites as an instance of the :class:
     `openquake.hazardlib.geo.Mesh`
     """
     if isinstance(self.target_sites, SiteCollection):
         locations = np.array([len(self.target_sites.sites), 3],
                              dtype=float)
         for iloc, site in enumerate(self.target_sites.sites):
             locations[iloc, 0] = site.location.longitude
             locations[iloc, 1] = site.location.latitude
             locations[iloc, 2] = site.location.depth
         return Mesh(locations[:, 0], locations[:, 1], locations[:, 2])
     else:
         raise ValueError('Target sites must be an instance of '
                          'openquake.hazardlib.site.SiteCollection')
コード例 #10
0
def _get_min_distance_to_sub_trench(lons, lats):
    """
    Compute and return minimum distance between subduction trench
    and points specified by 'lon' and 'lat'

    The method creates an instance of
    :class:`openquake.hazardlib.geo.SimpleFaultSurface` to model the subduction
    trench. The surface is assumed vertical and extending from 0 to 10 km
    depth.
    The 10 km depth value is arbitrary given that distance calculation depend
    only on top edge depth. The method calls then
    :meth:`openquake.hazardlib.geo.base.BaseSurface.get_rx_distance`
    and return its absolute value.
    """
    trench = _construct_surface(SUB_TRENCH_LONS, SUB_TRENCH_LATS, 0., 10.)
    sites = Mesh(lons, lats, None)
    return np.abs(trench.get_rx_distance(sites))
コード例 #11
0
ファイル: multi_kite_test.py プロジェクト: khosak/oq-engine
    def setUp(self):

        # First surface
        prf1 = Line([Point(0, 0, 0), Point(0, -0.001, 20.)])
        prf2 = Line([Point(0.15, 0, 0), Point(0.15, -0.001, 20.)])
        prf3 = Line([Point(0.3, 0, 0), Point(0.3, -0.001, 20.)])
        sfcA = KiteSurface.from_profiles([prf1, prf2, prf3], 5., 5.)

        # Second surface
        prf3 = Line([Point(0.32, 0, 0), Point(0.32, 0.001, 20.)])
        prf4 = Line([Point(0.45, 0.15, 0), Point(0.45, 0.1501, 20.)])
        sfcB = KiteSurface.from_profiles([prf3, prf4], 5., 5.)

        self.msrf = MultiSurface([sfcA, sfcB])

        coo = np.array([[-0.1, 0.0], [0.0, 0.1]])
        self.mesh = Mesh(coo[:, 0], coo[:, 1])
コード例 #12
0
    def build_sites_distances_contexts(self,
                                       event,
                                       sites,
                                       vs30measured=False,
                                       backarc=False):
        """
        Builds the contexts from the event and sites
        """
        # Get distances
        mesh = Mesh(sites["lon"], sites["lat"])
        mshape = mesh.lons.shape
        dctx = DistancesContext()
        for param in self.context.REQUIRES_DISTANCES:
            setattr(dctx, param, get_distances(event.get_rupture(), mesh,
                                               param))
        # Get sites context
        sctx = SitesContext()
        for key in self.site_attribs:
            if key.startswith("z1pt0") and not "z1pt0" in sites:
                setattr(sctx, "z1pt0",
                        vs30_to_z1pt0_cy14(sites["vs30"], japan=False))

            elif key.startswith("z2pt5") and not "z5pt5" in sites:
                setattr(sctx, "z2pt5",
                        vs30_to_z2pt5_cb14(sites["vs30"], japan=False))

            elif key.startswith(
                    "vs30measured") and not "vs30measured" in sites:
                if vs30measured:
                    setattr(sctx, "vs30measured", np.ones(mshape, dtype=bool))
                else:
                    setattr(sctx, "vs30measured", np.zeros(mshape, dtype=bool))
            elif key.startswith(
                    "vs30measured") and not "vs30measured" in sites:
                if vs30measured:
                    setattr(sctx, "vs30measured", np.ones(mshape, dtype=bool))
                else:
                    setattr(sctx, "vs30measured", np.zeros(mshape, dtype=bool))
            elif key.startswith("backarc") and not "backarc" in sites:
                if vs30measured:
                    setattr(sctx, "backarc", np.ones(mshape, dtype=bool))
                else:
                    setattr(sctx, "backarc", np.zeros(mshape, dtype=bool))
            else:
                setattr(sctx, key, sites[key])
        return sctx, dctx
コード例 #13
0
def gdfs(catalogue, surface):
    """
    :parameter catalogue:
    :parameter surface:
    """
    nel = len(catalogue.data['longitude'])
    # MN: 'dsts' assigned but never used
    dsts = np.empty((nel))
    delta = 4000
    #
    # preparing the sub meshes, each containing a subset of earthquakes
    inputs = []
    for i in np.arange(0, nel, delta):
        upp = min([i + delta, nel - 1])
        mesh = Mesh(catalogue.data['longitude'][i:upp],
                    catalogue.data['latitude'][i:upp],
                    catalogue.data['depth'][i:upp])
        inputs.append([mesh, surface])
    #
    # multiprocessing
    pool = mp.Pool(processes=6)
    # MN: 'results' assigned but never used
    results = pool.map(aaa, inputs)
コード例 #14
0
ファイル: configure.py プロジェクト: cuijwyn/gmpe-smtk
 def _append_target_sites(self, distances, azimuth, origin_location, vs30,
                          line_azimuth=90., origin_point=(0.5, 0.5),
                          as_log=False,  vs30measured=True, z1pt0=None,
                          z2pt5=None, backarc=False):
     """
     Appends the target sites along a line with respect to the rupture,
     given an already set origin target site
     """
     for offset in distances:
         target_loc = origin_location.point_at(offset, 0., azimuth)
         # Get Rupture distance
         temp_mesh = Mesh(np.array(target_loc.longitude),
                          np.array(target_loc.latitude),
                          np.array(target_loc.depth))
         distance = self.surface.get_min_distance(temp_mesh)
         self.target_sites.append(Site(target_loc, 
                                       vs30, 
                                       vs30measured, 
                                       z1pt0,
                                       z2pt5,
                                       backarc=backarc))
     self.target_sites_config = {
         "TYPE": "Line",
         "RMAX": distances[-1],
         "SPACING": np.nan if len(distances) < 2 else \
         distances[1] - distances[0],  # FIXME does it make sense?
         "AZIMUTH": line_azimuth,
         "ORIGIN": origin_point,
         "AS_LOG": as_log,
         "VS30": vs30,
         "VS30MEASURED": vs30measured,
         "Z1.0": z1pt0,
         "Z2.5": z2pt5,
         "BACKARC": backarc}
     self.target_sites = SiteCollection(self.target_sites)
     return self.target_sites
コード例 #15
0
ファイル: disagg_test.py プロジェクト: rcgee/oq-hazardlib
 def get_closest_points(self, sites):
     assert len(sites) == 1
     return Mesh(numpy.array([self.lon], float),
                 numpy.array([self.lat], float),
                 depths=None)
コード例 #16
0
ファイル: gc2_test.py プロジェクト: maswiet/oq-engine
 def setUp(self):
     self.data = numpy.genfromtxt(DISCORDANT_FILE, delimiter=",")
     self.mesh = Mesh(self.data[:, 0], self.data[:, 1], self.data[:, 2])
     self.model = MultiSurface(FRANK2.surfaces)
コード例 #17
0
ファイル: multi_test.py プロジェクト: rcgee/oq-hazardlib
 def get_closest_points(self, mesh):
     assert mesh.shape == self.lons.shape
     return Mesh(self.lons, self.lats, self.depths)