def viscoelastic_setup(shape=(50, 50), spacing=(15.0, 15.0), tn=500., space_order=4, nbl=10, constant=True, **kwargs): preset = 'constant-viscoelastic' if constant else 'layers-viscoelastic' model = demo_model(preset, space_order=space_order, shape=shape, nbl=nbl, dtype=kwargs.pop('dtype', np.float32), spacing=spacing) # Source and receiver geometries geometry = setup_geometry(model, tn) # Create solver object to provide relevant operators solver = ViscoelasticWaveSolver(model, geometry, space_order=space_order, **kwargs) return solver
def viscoelastic_setup(shape=(50, 50), spacing=(15.0, 15.0), tn=500., space_order=4, nbl=10, constant=True, **kwargs): nrec = 2*shape[0] preset = 'constant-viscoelastic' if constant else 'layers-viscoelastic' model = demo_model(preset, space_order=space_order, shape=shape, nbl=nbl, dtype=kwargs.pop('dtype', np.float32), spacing=spacing) # Source and receiver geometries src_coordinates = np.empty((1, len(spacing))) src_coordinates[0, :] = np.array(model.domain_size) * .5 if len(shape) > 1: src_coordinates[0, -1] = model.origin[-1] + 2 * spacing[-1] rec_coordinates = np.empty((nrec, len(spacing))) rec_coordinates[:, 0] = np.linspace(0., model.domain_size[0], num=nrec) if len(shape) > 1: rec_coordinates[:, 1] = np.array(model.domain_size)[1] * .5 rec_coordinates[:, -1] = model.origin[-1] + 2 * spacing[-1] geometry = AcquisitionGeometry(model, rec_coordinates, src_coordinates, t0=0.0, tn=tn, src_type='Ricker', f0=0.12) # Create solver object to provide relevant operators solver = ViscoelasticWaveSolver(model, geometry, space_order=space_order, **kwargs) return solver