Пример #1
0
    def test_bounding_box(self):
        maxdist = IntegrationDistance({'default': [
            (3, 30), (4, 40), (5, 100), (6, 200), (7, 300), (8, 400)]})

        aae(maxdist('ANY_TRT'), MAX_DISTANCE)  # 2000 km
        bb = maxdist.get_bounding_box(0, 10, 'ANY_TRT')
        aae(bb, [-18.2638692, -7.9864, 18.2638692, 27.9864])

        aae(maxdist('ANY_TRT', mag=7.1), 400)
        bb = maxdist.get_bounding_box(0, 10, 'ANY_TRT', mag=7.1)
        aae(bb, [-3.6527738, 6.40272, 3.6527738, 13.59728])

        aae(maxdist('ANY_TRT', mag=6.9), 300)
        bb = maxdist.get_bounding_box(0, 10, 'ANY_TRT', mag=6.9)
        aae(bb, [-2.7395804, 7.30204, 2.7395804, 12.69796])
Пример #2
0
    def test_bounding_box(self):
        maxdist = IntegrationDistance({'default': [
            (3, 30), (4, 40), (5, 100), (6, 200), (7, 300), (8, 400)]})

        aae(maxdist('ANY_TRT'), 400)
        bb = maxdist.get_bounding_box(0, 10, 'ANY_TRT')
        aae(bb, [-3.6527738, 6.40272, 3.6527738, 13.59728])

        aae(maxdist('ANY_TRT', mag=7), 400)
        bb = maxdist.get_bounding_box(0, 10, 'default', mag=7)
        aae(bb, [-2.7395804, 7.30204,  2.7395804, 12.69796])

        aae(maxdist('default', mag=6), 200)
        bb = maxdist.get_bounding_box(0, 10, 'default', mag=6)
        aae(bb, [-1.8263869, 8.20136, 1.8263869, 11.79864])
Пример #3
0
def make_figure_effect_by_mag(extractors, what):
    """
    $ oq plot "effect_by_mag?"
    """
    # NB: matplotlib is imported inside since it is a costly import
    plt = import_plt()
    [ex] = extractors
    gsims_by_trt = ex.get('gsims_by_trt', asdict=True)
    mags = ex.get('source_mags').array
    try:
        effect = ex.get('effect')
    except KeyError:
        onesite = ex.get('sitecol').one()
        maximum_distance = IntegrationDistance(ex.oqparam.maximum_distance)
        imtls = ex.oqparam.imtls
        ebm = get_effect_by_mag(mags, onesite, gsims_by_trt, maximum_distance,
                                imtls)
        effect = numpy.array(list(ebm.values()))
    fig, ax = plt.subplots()
    trti = 0
    for trt in gsims_by_trt:
        ax.plot(mags, effect[:, -1, trti], label=trt)
        ax.set_xlabel('Mag')
        ax.set_ylabel('Intensity')
        ax.set_title('Effect at maximum distance')
        trti += 1
    ax.legend()
    return plt
Пример #4
0
 def test_single_site(self):
     # NB: the performance of get_mean_std is totally dominated by two
     # concomitant factors:
     # 1) source splitting (do not split the area source)
     # 2) collect the contexts in a single array
     # together they give a 200x speedup
     # numba is totally useless
     site = Site(Point(0, 0), vs30=760., z1pt0=48.0, z2pt5=0.607,
                 vs30measured=True)
     sitecol = SiteCollection([site])
     imtls = {"PGA": [.123]}
     for period in numpy.arange(.1, 1.3, .1):
         imtls['SA(%.2f)' % period] = [.123]
     assert len(imtls) == 13  # 13 periods
     oq = unittest.mock.Mock(
         imtls=DictArray(imtls),
         maximum_distance=IntegrationDistance.new('300'))
     mon = Monitor()
     hcurve = calc_hazard_curve(
         sitecol, asource, [ExampleA2021()], oq, mon)
     for child in mon.children:
         print(child)
     got = hcurve.array[:, 0]
     exp = [0.103379, 0.468937, 0.403896, 0.278772, 0.213645, 0.142985,
            0.103438, 0.079094, 0.062861, 0.051344, 0.04066, 0.031589,
            0.024935]
     numpy.testing.assert_allclose(got, exp, atol=1E-5)
Пример #5
0
def read_hparams(job_ini):
    """
    :param job_ini: path to a job.ini file
    :returns: dictionary of hazard parameters
    """
    jobdir = os.path.dirname(job_ini)
    cp = configparser.ConfigParser()
    cp.read([job_ini], encoding='utf8')
    params = {}
    for sect in cp.sections():
        for key, val in cp.items(sect):
            if key == 'intensity_measure_types_and_levels':
                key = 'imtls'
                val = valid.intensity_measure_types_and_levels(val)
            elif key == 'maximum_distance':
                val = IntegrationDistance.new(val)
            elif key == 'sites':
                val = valid.coordinates(val)
            elif key.endswith('_file'):
                val = os.path.join(jobdir, val)
            else:
                try:
                    val = ast.literal_eval(val)
                except (SyntaxError, ValueError):
                    if val == 'true':
                        val = True
                    elif val == 'false':
                        val = False
            params[key] = val
    return params
Пример #6
0
 def __init__(self,
              rupture,
              sites,
              imts,
              gsims,
              truncation_level=None,
              correlation_model=None,
              maximum_distance=IntegrationDistance(None)):
     if len(sites) == 0:
         raise ValueError('No sites')
     elif len(imts) == 0:
         raise ValueError('No IMTs')
     elif len(gsims) == 0:
         raise ValueError('No GSIMs')
     self.rupture = rupture
     self.sites = sites
     self.imts = [from_string(imt) for imt in imts]
     self.gsims = sorted(gsims)
     self.truncation_level = truncation_level
     self.correlation_model = correlation_model
     self.maximum_distance = maximum_distance
     # `rupture` can be a high level rupture object containing a low
     # level hazardlib rupture object as a .rupture attribute
     if hasattr(rupture, 'rupture'):
         rupture = rupture.rupture
     self.ctx = ContextMaker(gsims, maximum_distance).make_contexts(
         sites, rupture)
Пример #7
0
def maximum_distance(value):
    """
    :param value:
        input string corresponding to a valid maximum distance
    :returns:
        a IntegrationDistance mapping
    """
    return IntegrationDistance(MagDist.new(value).max())
Пример #8
0
 def __init__(self, gsims, maximum_distance=IntegrationDistance(None)):
     self.gsims = gsims
     self.maximum_distance = maximum_distance
     for req in self.REQUIRES:
         reqset = set()
         for gsim in gsims:
             reqset.update(getattr(gsim, 'REQUIRES_' + req))
         setattr(self, 'REQUIRES_' + req, reqset)
Пример #9
0
    def test_bounding_box(self):
        maxdist = IntegrationDistance({
            'default': [(3, 30), (4, 40), (5, 100), (6, 200), (7, 300),
                        (8, 400)]
        })

        aae(maxdist('ANY_TRT'), MAX_DISTANCE)  # 2000 km
        bb = maxdist.get_bounding_box(0, 10, 'ANY_TRT')
        aae(bb, [-18.2638692, -7.9864, 18.2638692, 27.9864])

        aae(maxdist('ANY_TRT', mag=7.1), 400)
        bb = maxdist.get_bounding_box(0, 10, 'ANY_TRT', mag=7.1)
        aae(bb, [-3.6527738, 6.40272, 3.6527738, 13.59728])

        aae(maxdist('ANY_TRT', mag=6.9), 300)
        bb = maxdist.get_bounding_box(0, 10, 'ANY_TRT', mag=6.9)
        aae(bb, [-2.7395804, 7.30204, 2.7395804, 12.69796])
Пример #10
0
def maximum_distance(value):
    """
    :param value:
        input string corresponding to a valid maximum distance
    :returns:
        a IntegrationDistance mapping
    """
    return IntegrationDistance(floatdict(value))
Пример #11
0
 def test_international_date_line_2(self):
     # from a bug affecting a calculation in New Zealand
     fname = gettemp(characteric_source)
     [[src]] = nrml.to_python(fname)
     os.remove(fname)
     maxdist = IntegrationDistance({'default': 200})
     sitecol = SiteCollection([
         Site(location=Point(176.919, -39.489),
              vs30=760, vs30measured=True, z1pt0=100, z2pt5=5)])
     srcfilter = SourceFilter(sitecol, maxdist)
     sites = srcfilter.get_close_sites(src)
     self.assertIsNotNone(sites)
Пример #12
0
 def test_MagnitudeDistance_pickleable(self):
     md = IntegrationDistance(
         dict(default=[(1,
                        10), (2,
                              20), (3,
                                    30), (4,
                                          40), (5,
                                                100), (6,
                                                       200), (7,
                                                              400), (8,
                                                                     800)]))
     md2 = pickle.loads(pickle.dumps(md))
     self.assertEqual(md.dic, md2.dic)
Пример #13
0
 def __init__(self, trt, gsims, param=None, monitor=Monitor()):
     param = param or {}
     self.max_sites_disagg = param.get('max_sites_disagg', 10)
     self.collapse_level = param.get('collapse_level', False)
     self.point_rupture_bins = param.get('point_rupture_bins', 20)
     self.trt = trt
     self.gsims = gsims
     self.maximum_distance = (param.get('maximum_distance')
                              or IntegrationDistance({}))
     self.trunclevel = param.get('truncation_level')
     self.effect = param.get('effect')
     for req in self.REQUIRES:
         reqset = set()
         for gsim in gsims:
             reqset.update(getattr(gsim, 'REQUIRES_' + req))
         setattr(self, 'REQUIRES_' + req, reqset)
     # self.pointsource_distance is a dict mag -> dist, possibly empty
     if param.get('pointsource_distance'):
         self.pointsource_distance = param['pointsource_distance'][trt]
     else:
         self.pointsource_distance = {}
     self.filter_distance = 'rrup'
     if 'imtls' in param:
         self.imtls = param['imtls']
     elif 'hazard_imtls' in param:
         self.imtls = DictArray(param['hazard_imtls'])
     else:
         self.imtls = {}
     self.imts = [imt_module.from_string(imt) for imt in self.imtls]
     self.reqv = param.get('reqv')
     if self.reqv is not None:
         self.REQUIRES_DISTANCES.add('repi')
     if hasattr(gsims, 'items'):
         # gsims is actually a dict rlzs_by_gsim
         # since the ContextMaker must be used on ruptures with the
         # same TRT, given a realization there is a single gsim
         self.gsim_by_rlzi = {}
         for gsim, rlzis in gsims.items():
             for rlzi in rlzis:
                 self.gsim_by_rlzi[rlzi] = gsim
     self.mon = monitor
     self.ctx_mon = monitor('make_contexts', measuremem=False)
     self.loglevels = DictArray(self.imtls)
     self.shift_hypo = param.get('shift_hypo')
     with warnings.catch_warnings():
         # avoid RuntimeWarning: divide by zero encountered in log
         warnings.simplefilter("ignore")
         for imt, imls in self.imtls.items():
             if imt != 'MMI':
                 self.loglevels[imt] = numpy.log(imls)
Пример #14
0
def maximum_distance(value):
    """
    :param value:
        input string corresponding to a valid maximum distance
    :returns:
        a IntegrationDistance mapping
    """
    dic = floatdict(value)
    for trt, magdists in dic.items():
        if isinstance(magdists, list):  # could be a scalar otherwise
            magdists.sort()  # make sure the list is sorted by magnitude
            for mag, dist in magdists:  # validate the magnitudes
                magnitude(mag)
    return IntegrationDistance(dic)
Пример #15
0
 def __init__(self, trt, gsims, param=None, monitor=Monitor()):
     param = param or {}
     self.max_sites_disagg = param.get('max_sites_disagg', 10)
     self.trt = trt
     self.gsims = gsims
     self.maximum_distance = (
         param.get('maximum_distance') or IntegrationDistance({}))
     self.trunclevel = param.get('truncation_level')
     for req in self.REQUIRES:
         reqset = set()
         for gsim in gsims:
             reqset.update(getattr(gsim, 'REQUIRES_' + req))
         setattr(self, 'REQUIRES_' + req, reqset)
     self.collapse_factor = param.get('collapse_factor', 3)
     self.max_radius = param.get('max_radius')
     self.pointsource_distance = param.get('pointsource_distance')
     filter_distance = param.get('filter_distance')
     if filter_distance is None:
         if 'rrup' in self.REQUIRES_DISTANCES:
             filter_distance = 'rrup'
         elif 'rjb' in self.REQUIRES_DISTANCES:
             filter_distance = 'rjb'
         else:
             filter_distance = 'rrup'
     self.filter_distance = filter_distance
     self.imtls = param.get('imtls', {})
     self.imts = [imt_module.from_string(imt) for imt in self.imtls]
     self.reqv = param.get('reqv')
     self.REQUIRES_DISTANCES.add(self.filter_distance)
     if self.reqv is not None:
         self.REQUIRES_DISTANCES.add('repi')
     if hasattr(gsims, 'items'):
         # gsims is actually a dict rlzs_by_gsim
         # since the ContextMaker must be used on ruptures with the
         # same TRT, given a realization there is a single gsim
         self.gsim_by_rlzi = {}
         for gsim, rlzis in gsims.items():
             for rlzi in rlzis:
                 self.gsim_by_rlzi[rlzi] = gsim
     self.ctx_mon = monitor('make_contexts', measuremem=False)
     self.poe_mon = monitor('get_poes', measuremem=False)
     self.pne_mon = monitor('composing pnes', measuremem=False)
     self.gmf_mon = monitor('computing mean_std', measuremem=False)
     self.loglevels = DictArray(self.imtls)
     with warnings.catch_warnings():
         # avoid RuntimeWarning: divide by zero encountered in log
         warnings.simplefilter("ignore")
         for imt, imls in self.imtls.items():
             self.loglevels[imt] = numpy.log(imls)
Пример #16
0
 def test_get_bounding_boxes(self):
     maxdist = IntegrationDistance({'default': [
         (3, 30), (4, 40), (5, 100), (6, 200), (7, 300), (8, 400)]})
     sitecol = SiteCollection([
         Site(location=Point(10, 20, 30),
              vs30=1.2, vs30measured=True,
              z1pt0=3.4, z2pt5=5.6, backarc=True),
         Site(location=Point(-1.2, -3.4, -5.6),
              vs30=55.4, vs30measured=False,
              z1pt0=66.7, z2pt5=88.9, backarc=False)])
     srcfilter = SourceFilter(sitecol, maxdist)
     bb1, bb2 = srcfilter.get_bounding_boxes(mag=4)
     # bounding boxes in the form min_lon, min_lat, max_lon, max_lat
     aae(bb1, (9.6171855, 19.640272, 10.3828145, 20.359728))
     aae(bb2, (-1.5603623, -3.759728, -0.8396377, -3.040272))
Пример #17
0
 def test_two_sites(self):
     site1 = Site(Point(0, 0), vs30=760., z1pt0=48.0, z2pt5=0.607,
                  vs30measured=True)
     site2 = Site(Point(0, 0.5), vs30=760., z1pt0=48.0, z2pt5=0.607,
                  vs30measured=True)
     sitecol = SiteCollection([site1, site2])
     srcfilter = SourceFilter(sitecol, IntegrationDistance.new('200'))
     imtls = {"PGA": [.123]}
     for period in numpy.arange(.1, .5, .1):
         imtls['SA(%.2f)' % period] = [.123]
     assert len(imtls) == 5  # 5 periods
     gsim_by_trt = {'Stable Continental Crust': ExampleA2021()}
     hcurves = calc_hazard_curves(
         [asource], srcfilter, DictArray(imtls), gsim_by_trt)
     print(hcurves)
Пример #18
0
 def test_international_date_line(self):
     maxdist = IntegrationDistance({'default': [
         (3, 30), (4, 40), (5, 100), (6, 200), (7, 300), (8, 400)]})
     sitecol = SiteCollection([
         Site(location=Point(179, 80),
              vs30=1.2, vs30measured=True,
              z1pt0=3.4, z2pt5=5.6, backarc=True),
         Site(location=Point(-179, 80),
              vs30=55.4, vs30measured=False,
              z1pt0=66.7, z2pt5=88.9, backarc=False)])
     srcfilter = SourceFilter(sitecol, maxdist)
     bb1, bb2 = srcfilter.get_bounding_boxes(mag=4)
     # bounding boxes in the form min_lon, min_lat, max_lon, max_lat
     aae(bb1, (176.928409, 79.640272, 181.071591, 80.359728))
     aae(bb2, (-181.071591, 79.640272, -176.928409, 80.359728))
Пример #19
0
 def __init__(self, gsims, maximum_distance=IntegrationDistance(None)):
     self.gsims = gsims
     self.maximum_distance = maximum_distance
     for req in self.REQUIRES:
         reqset = set()
         for gsim in gsims:
             reqset.update(getattr(gsim, 'REQUIRES_' + req))
         setattr(self, 'REQUIRES_' + req, reqset)
     if hasattr(gsims, 'items'):  # gsims is actually a dict rlzs_by_gsim
         # since the ContextMaker must be used on ruptures with all the
         # same TRT, given a realization there is a single gsim
         self.gsim_by_rlzi = {}
         for gsim, rlzis in gsims.items():
             for rlzi in rlzis:
                 self.gsim_by_rlzi[rlzi] = gsim
Пример #20
0
 def __init__(self,
              trt,
              gsims,
              maximum_distance=None,
              param=None,
              monitor=Monitor()):
     param = param or {}
     self.trt = trt
     self.gsims = gsims
     self.maximum_distance = maximum_distance or IntegrationDistance({})
     self.pointsource_distance = param.get('pointsource_distance', {})
     for req in self.REQUIRES:
         reqset = set()
         for gsim in gsims:
             reqset.update(getattr(gsim, 'REQUIRES_' + req))
         setattr(self, 'REQUIRES_' + req, reqset)
     filter_distance = param.get('filter_distance')
     if filter_distance is None:
         if 'rrup' in self.REQUIRES_DISTANCES:
             filter_distance = 'rrup'
         elif 'rjb' in self.REQUIRES_DISTANCES:
             filter_distance = 'rjb'
         else:
             filter_distance = 'rrup'
     self.filter_distance = filter_distance
     self.reqv = param.get('reqv')
     self.REQUIRES_DISTANCES.add(self.filter_distance)
     if self.reqv is not None:
         self.REQUIRES_DISTANCES.add('repi')
     if hasattr(gsims, 'items'):
         # gsims is actually a dict rlzs_by_gsim
         # since the ContextMaker must be used on ruptures with the
         # same TRT, given a realization there is a single gsim
         self.gsim_by_rlzi = {}
         for gsim, rlzis in gsims.items():
             for rlzi in rlzis:
                 self.gsim_by_rlzi[rlzi] = gsim
     self.ir_mon = monitor('iter_ruptures', measuremem=False)
     self.ctx_mon = monitor('make_contexts', measuremem=False)
     self.poe_mon = monitor('get_poes', measuremem=False)
Пример #21
0
 def test_international_date_line(self):
     maxdist = IntegrationDistance({
         'default': [(3, 30), (4, 40), (5, 100), (6, 200), (7, 300),
                     (8, 400)]
     })
     sitecol = SiteCollection([
         Site(location=Point(179, 80),
              vs30=1.2,
              vs30measured=True,
              z1pt0=3.4,
              z2pt5=5.6,
              backarc=True),
         Site(location=Point(-179, 80),
              vs30=55.4,
              vs30measured=False,
              z1pt0=66.7,
              z2pt5=88.9,
              backarc=False)
     ])
     srcfilter = SourceFilter(sitecol, maxdist)
     bb1, bb2 = srcfilter.get_bounding_boxes(mag=4.5)
     # bounding boxes in the form min_lon, min_lat, max_lon, max_lat
     aae(bb1, (173.8210225, 79.10068, 184.1789775, 80.89932))
     aae(bb2, (175.8210225, 79.10068, 186.1789775, 80.89932))
Пример #22
0
 def test_get_bounding_boxes(self):
     maxdist = IntegrationDistance({
         'default': [(3, 30), (4, 40), (5, 100), (6, 200), (7, 300),
                     (8, 400)]
     })
     sitecol = SiteCollection([
         Site(location=Point(10, 20, 30),
              vs30=1.2,
              vs30measured=True,
              z1pt0=3.4,
              z2pt5=5.6,
              backarc=True),
         Site(location=Point(-1.2, -3.4, -5.6),
              vs30=55.4,
              vs30measured=False,
              z1pt0=66.7,
              z2pt5=88.9,
              backarc=False)
     ])
     srcfilter = SourceFilter(sitecol, maxdist)
     bb1, bb2 = srcfilter.get_bounding_boxes(mag=4.5)
     # bounding boxes in the form min_lon, min_lat, max_lon, max_lat
     aae(bb1, (9.0429636, 19.10068, 10.9570364, 20.89932))
     aae(bb2, (-2.1009057, -4.29932, -0.2990943, -2.50068))
Пример #23
0
 def test_maximum_magnitude(self):
     maxdist = IntegrationDistance.new(
         '[(4, 200), (7, 200), (7.01, 0), (8, 0)]')
     interp = maxdist('default')
     aae(interp([5, 6, 7, 7.2, 8]), [200., 200., 200.,   0.,   0.])
Пример #24
0
def main(params):
    # example with 2x2=4 realizations with weights .36, .24, .24, .16
    inp = read_input(params)
    print(inp)
    print(inp.gsim_lt.get_rlzs_by_gsim_trt())
    acc = AccumDict(accum=[])
    ebrs = sample_ebruptures(inp.groups, inp.cmakerdict)
    ne = sum(ebr.n_occ for ebr in ebrs)
    print('There are %d ruptures and %d events' % (len(ebrs), ne))
    df = get_ebr_df(ebrs, inp.cmakerdict)
    print(df.groupby('rlz').count())  # there are 8, 9, 11, 8 events per rlz
    for ebr in ebrs:
        cmaker = inp.cmakerdict[ebr.rupture.tectonic_region_type]
        gmf_dict, _ = GmfComputer(ebr, inp.sitecol, cmaker).compute_all()
        acc += gmf_dict
    print(pandas.DataFrame(acc))


if __name__ == '__main__':
    params = dict(maximum_distance=IntegrationDistance.new('200'),
                  imtls={'PGA': [0]},
                  source_model_file="source_model.xml",
                  area_source_discretization=10,
                  ses_seed=24,
                  ses_per_logic_tree_path=20,
                  investigation_time=1,
                  site_model_file="site_model.csv",
                  gsim_logic_tree_file="gmpe_logic_tree.xml")
    main(params)
Пример #25
0
    def test_point_sources(self):
        sources = [
            openquake.hazardlib.source.PointSource(
                source_id='point1', name='point1',
                tectonic_region_type="Active Shallow Crust",
                mfd=openquake.hazardlib.mfd.EvenlyDiscretizedMFD(
                    min_mag=4, bin_width=1, occurrence_rates=[5]
                ),
                nodal_plane_distribution=openquake.hazardlib.pmf.PMF([
                    (1, openquake.hazardlib.geo.NodalPlane(strike=0.0,
                                                           dip=90.0,
                                                           rake=0.0))
                ]),
                hypocenter_distribution=openquake.hazardlib.pmf.PMF([(1, 10)]),
                upper_seismogenic_depth=0.0,
                lower_seismogenic_depth=10.0,
                magnitude_scaling_relationship=
                openquake.hazardlib.scalerel.PeerMSR(),
                rupture_aspect_ratio=2,
                temporal_occurrence_model=PoissonTOM(1.),
                rupture_mesh_spacing=1.0,
                location=Point(10, 10)
            ),
            openquake.hazardlib.source.PointSource(
                source_id='point2', name='point2',
                tectonic_region_type="Active Shallow Crust",
                mfd=openquake.hazardlib.mfd.EvenlyDiscretizedMFD(
                    min_mag=4, bin_width=2, occurrence_rates=[5, 6, 7]
                ),
                nodal_plane_distribution=openquake.hazardlib.pmf.PMF([
                    (1, openquake.hazardlib.geo.NodalPlane(strike=0,
                                                           dip=90,
                                                           rake=0.0)),
                ]),
                hypocenter_distribution=openquake.hazardlib.pmf.PMF([(1, 10)]),
                upper_seismogenic_depth=0.0,
                lower_seismogenic_depth=10.0,
                magnitude_scaling_relationship=
                openquake.hazardlib.scalerel.PeerMSR(),
                rupture_aspect_ratio=2,
                temporal_occurrence_model=PoissonTOM(1.),
                rupture_mesh_spacing=1.0,
                location=Point(10, 11)
            ),
        ]
        sites = [openquake.hazardlib.site.Site(Point(11, 10), 1, 2, 3),
                 openquake.hazardlib.site.Site(Point(10, 16), 2, 2, 3),
                 openquake.hazardlib.site.Site(Point(10, 10.6, 1), 3, 2, 3),
                 openquake.hazardlib.site.Site(Point(10, 10.7, -1), 4, 2, 3)]
        sitecol = openquake.hazardlib.site.SiteCollection(sites)
        gsims = {"Active Shallow Crust": SadighEtAl1997()}
        truncation_level = 1
        imts = {'PGA': [0.1, 0.5, 1.3]}
        s_filter = SourceFilter(sitecol, IntegrationDistance.new('30'))
        result = calc_hazard_curves(
            sources, s_filter, imts, gsims, truncation_level)['PGA']
        # there are two sources and four sites. The first source contains only
        # one rupture, the second source contains three ruptures.
        #
        # the first source has 'maximum projection radius' of 0.707 km
        # the second source has 'maximum projection radius' of 500.0 km
        #
        # the epicentral distances for source 1 are: [ 109.50558394,
        # 667.16955987,   66.71695599,   77.83644865]
        # the epicentral distances for source 2 are: [ 155.9412148 ,
        # 555.97463322,   44.47797066,   33.35847799]
        #
        # Considering that the source site filtering distance is set to 30 km,
        # for source 1, all sites have epicentral distance larger than
        # 0.707 + 30 km. This means that source 1 ('point 1') is not considered
        # in the calculation because too far.
        # for source 2, the 1st, 3rd and 4th sites have epicentral distances
        # smaller than 500.0 + 30 km. This means that source 2 ('point 2') is
        # considered in the calculation for site 1, 3, and 4.
        #
        # JB distances for rupture 1 in source 2 are: [ 155.43860273,
        #  555.26752644,   43.77086388,   32.65137121]
        # JB distances for rupture 2 in source 2 are: [ 150.98882575,
        #  548.90356541,   37.40690285,   26.28741018]
        # JB distances for rupture 3 in source 2 are: [ 109.50545819,
        # 55.97463322,    0.        ,    0.        ]
        #
        # Considering that the rupture site filtering distance is set to 30 km,
        # rupture 1 (magnitude 4) is not considered because too far, rupture 2
        # (magnitude 6) affect only the 4th site, rupture 3 (magnitude 8)
        # affect the 3rd and 4th sites.

        self.assertEqual(result.shape, (4, 3))  # 4 sites, 3 levels
        numpy.testing.assert_allclose(result[0], 0)  # no contrib to site 1
        numpy.testing.assert_allclose(result[1], 0)  # no contrib to site 2
Пример #26
0
    def test_bounding_box(self):
        maxdist = IntegrationDistance({'default': 400})

        aae(maxdist('ANY_TRT'), 400)
        bb = maxdist.get_bounding_box(0, 10, 'ANY_TRT')
        aae(bb, [-3.6527738, 6.40272, 3.6527738, 13.59728])
Пример #27
0
from openquake.hazardlib import read_input, valid, contexts
from openquake.hazardlib.cross_correlation import BakerJayaram2008
from openquake.hazardlib.calc.filters import IntegrationDistance

OVERWRITE_EXPECTED = False

CWD = os.path.dirname(__file__)
SOURCES_XML = os.path.join(CWD, 'data', 'sm01.xml')
GSIM_XML = os.path.join(CWD, 'data', 'lt02.xml')
PARAM = dict(source_model_file=SOURCES_XML,
             gsim_logic_tree_file=GSIM_XML,
             sites=[(0, -0.8)],
             reference_vs30_value=600,
             reference_depth_to_2pt5km_per_sec=5,
             reference_depth_to_1pt0km_per_sec=100,
             maximum_distance=IntegrationDistance.new('200'),
             rupture_mesh_spacing=5.,
             width_of_mfd_bin=1.,
             investigation_time=1,
             truncation_level=3,
             cross_correl=BakerJayaram2008(),
             imtls={
                 "SA(0.05)": valid.logscale(0.005, 2.13, 45),
                 "SA(0.075)": valid.logscale(0.005, 2.13, 45),
                 "SA(0.1)": valid.logscale(0.005, 2.13, 45),
                 "SA(0.15)": valid.logscale(0.005, 2.13, 45),
                 "SA(0.2)": valid.logscale(0.005, 2.13, 45),
                 "SA(0.25)": valid.logscale(0.005, 2.13, 45),
                 "SA(0.3)": valid.logscale(0.005, 2.13, 45),
                 "SA(0.5)": valid.logscale(0.005, 2.13, 45),
                 "SA(0.75)": valid.logscale(0.005, 2.13, 45),
Пример #28
0
 def test_bounding_box(self):
     maxdist = IntegrationDistance.new('400')
     bb = maxdist.get_bounding_box(0, 10, 'ANY_TRT')
     aae(bb, [-3.6527738, 6.40272, 3.6527738, 13.59728])