Example #1
0
def test_scenario():

    observations = [
        grond_scenario.WaveformObservation(nstations=20,
                                           store_id=STORE_WAVEFORMS),
        grond_scenario.InSARObservation(store_id=STORE_STATIC),
        grond_scenario.GNSSCampaignObservation(nstations=20,
                                               store_id=STORE_STATIC)
    ]

    problems = [
        grond_scenario.DCSourceProblem(nevents=1),
        grond_scenario.RectangularSourceProblem()
    ]

    for prob in problems:
        with tempfile.TemporaryDirectory(prefix='grond') as project_dir:

            scenario = grond_scenario.GrondScenario(project_dir,
                                                    center_lat=41.,
                                                    center_lon=33.3,
                                                    radius=200. * km)
            for obs in observations:
                scenario.add_observation(obs)

            scenario.set_problem(prob)

            scenario.build(force=True, interactive=False)
Example #2
0
def command_scenario(args):

    STORE_STATIC = 'crust2_ib_static'
    STORE_WAVEFORMS = 'crust2_ib'

    def setup(parser):
        parser.add_option(
            '--targets', action='callback', dest='targets', type=str,
            callback=multiple_choice, callback_kwargs={
                'choices': ('waveforms', 'gnss', 'insar')
            },
            default='waveforms',
            help='forward modelling targets for the scenario. Select from:'
                 ' waveforms, gnss and insar. '
                 '(default: --targets=%default,'
                 ' multiple selection by --targets=waveforms,gnss,insar)')
        parser.add_option(
            '--problem', dest='problem', default='cmt',
            type='choice', choices=['cmt', 'rectangular'],
            help='problem to generate: \'dc\' (double couple)'
                 ' or \'rectangular\' (rectangular finite fault)'
                 ' (default: \'%default\')')
        parser.add_option(
            '--magnitude-range', dest='magnitude_range', type=str,
            action='callback', callback=magnitude_range, default=[6.0, 7.0],
            help='Magnitude range min_mag-max_mag (default: %default)')
        parser.add_option(
            '--nstations', dest='nstations', type=int, default=20,
            help='number of seismic stations to create (default: %default)')
        parser.add_option(
            '--gnss_nstations', dest='gnss_nstations', type=int, default=20,
            help='number of GNSS campaign stations to create'
                 ' (default: %default)')
        parser.add_option(
            '--nevents', dest='nevents', type=int, default=1,
            help='number of events to create (default: %default)')
        parser.add_option(
            '--lat', dest='lat', type=float, default=41.0,
            help='center latitude of the scenario (default: %default)')
        parser.add_option(
            '--lon', dest='lon', type=float, default=33.3,
            help='center latitude of the scenario (default: %default)')
        parser.add_option(
            '--radius', dest='radius', type=float, default=100.,
            help='radius of the the scenario in [km] (default: %default)')
        parser.add_option(
            '--gf-waveforms', dest='store_waveforms', type=str,
            default=STORE_WAVEFORMS,
            help='Green\'s function store for waveform modelling, '
                 '(default: %default)')
        parser.add_option(
            '--gf-static', dest='store_statics', type=str,
            default=STORE_STATIC,
            help='Green\'s function store for static modelling, '
                 '(default: %default)')
        parser.add_option(
            '--force', dest='force', action='store_true',
            help='overwrite existing project folder.')
        parser.add_option(
            '--gf-store-superdirs',
            dest='gf_store_superdirs',
            help='Comma-separated list of directories containing GF stores')

    parser, options, args = cl_parse('scenario', args, setup)

    gf_store_superdirs = None
    if options.gf_store_superdirs:
        gf_store_superdirs = options.gf_store_superdirs.split(',')

    if len(args) == 1:
        project_dir = args[0]
    else:
        parser.print_help()
        sys.exit(1)

    from grond import scenario as grond_scenario
    try:
        scenario = grond_scenario.GrondScenario(
            project_dir,
            center_lat=options.lat, center_lon=options.lon,
            radius=options.radius*km)

        if 'waveforms' in options.targets:
            obs = grond_scenario.WaveformObservation(
                nstations=options.nstations,
                store_id=options.store_waveforms)
            scenario.add_observation(obs)

        if 'insar' in options.targets:
            obs = grond_scenario.InSARObservation(
                store_id=options.store_statics)
            scenario.add_observation(obs)

        if 'gnss' in options.targets:
            obs = grond_scenario.GNSSCampaignObservation(
                nstations=options.gnss_nstations,
                store_id=options.store_statics)
            scenario.add_observation(obs)

        if options.problem == 'cmt':
            problem = grond_scenario.DCSourceProblem(
                nevents=options.nevents,
                magnitude_min=options.magnitude_range[0],
                magnitude_max=options.magnitude_range[1])
        elif options.problem == 'rectangular':
            problem = grond_scenario.RectangularSourceProblem(
                nevents=options.nevents)
        scenario.set_problem(problem)

        scenario.build(
            force=options.force,
            interactive=True,
            gf_store_superdirs=gf_store_superdirs)

        logger.info(CLIHints('scenario',
                             config=scenario.get_grond_config_path(),
                             project_dir=project_dir))

    except grond.GrondError as e:
        die(str(e))