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)
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))