Source code for pysit.gallery.marmousi

import numpy as np

from pysit import *

from pysit.gallery.gallery_base import PrecomputedGalleryModel

__all__ = ['MarmousiModel', 'marmousi']

[docs]class MarmousiModel(PrecomputedGalleryModel): """ Marmousi community velocity model. """ # Names model_name = "Marmousi" # A sanitized name for filesystem work fs_full_name = "marmousi" fs_short_name = "marm" # Available data supported_physics = ['acoustic', 'variable-density-acoustic'] supported_physical_parameters = ['density', 'vp'] # Descriptive data valid_dimensions = (2,) @property #read only def dimension(self): return 2 # File information _local_parameter_filenames = { 'vp' : 'velocity_rev1.segy.gz', 'density' : 'density_rev1.segy.gz'} _parameter_scale_factor = { 'vp' : 1.0, 'density' : 1.0} _vp_file_sources = ['http://math.mit.edu/~rhewett/pysit/marmousi/velocity_rev1.segy.gz'] _density_file_sources = ['http://math.mit.edu/~rhewett/pysit/marmousi/density_rev1.segy.gz'] _remote_file_sources = {'vp' : _vp_file_sources, 'density' : _density_file_sources} _model_transposed = True # Model specification base_physical_origin = np.array([0.0, 0.0]) base_physical_size = np.array([9200.0, 3000.0]) base_physical_dimensions_units = ('m', 'm') base_pixels = np.array([2301, 751]) base_pixel_scale = np.array([4.0, 4.0]) base_pixel_units = ('m', 'm') # Water properties specify the way the water masking is handled # (None, ) indicates no water # ('depth', <depth: float>) specifies that a preset depth from the base_physical_origin is to be used # ('mask', ) indicates that the specified mask name should be used water_properties = ('depth', 32.0) _initial_configs = {'smooth_width': {'sigma':300.0}, 'smooth_low_pass': {'freq':1./300.}, 'constant': {'velocity': 3000.0}, 'gradient': {'min':1500.0, 'max':3000}} _scale_map = {'full': np.array([ 4.0, 4.0]), 'large': np.array([ 8.0, 8.0]), 'medium': np.array([12.0, 12.0]), 'small': np.array([16.0, 16.0]), 'mini': np.array([20.0, 20.0]),} # old marmousi mini-square had dx=24m patches = { 'mini-square' : {'origin': np.array([195*24.0, 0.0]), 'size': np.array([3000.0, 3000.0])}, }
def download(parameter='all'): if parameter == 'all': for p in MarmousiModel.supported_physical_parameters: MarmousiModel._download_and_prepare(p) for p in MarmousiModel.supported_masks: MarmousiModel._download_and_prepare(p) else: MarmousiModel._download_and_prepare(parameter)
[docs]def marmousi(patch=None, compact=False, **kwargs): """ Friendly wrapper for instantiating the Marmousi model. """ model_config = dict(physics='acoustic', origin=None, size=None, pixel_scale='mini', pixels=None, initial_model_style='smooth_low_pass', initial_config={}, fix_water_layer=True,) # Make any changes model_config.update(kwargs) if patch in MarmousiModel.patches: model_config.update(MarmousiModel.patches[patch]) C, C0, m, d = MarmousiModel(**model_config).get_setup() if compact: # we have to specify in the PML that we want to use the compact version of Helmholtz # operator (without auxiliary fields) m.x.lbc.domain_bc.compact = True return C, C0, m, d
if __name__ == '__main__': import matplotlib.pyplot as plt # M = MarmousiModel(initial_model_style='smooth_low_pass', pixel_scale='full') # C, C0, m, d = marmousi(patch='mini-square') C, C0, m, d = marmousi(pixel_scale='small', initial_model_style='smooth_width', patch='mini-square') # C, C0, m, d = marmousi(pixel_scale='medium', initial_model_style='smooth_low_pass') # C, C0, m, d = marmousi(pixel_scale='medium', initial_model_style='constant') fig = plt.figure() fig.add_subplot(2,1,1) vis.plot(C, m) fig.add_subplot(2,1,2) vis.plot(C0, m) plt.show() # C, C0, m, d = marmousi(pixel_scale='medium', initial_model_style='smooth_width') C, C0, m, d = marmousi(pixel_scale='medium', initial_model_style='smooth_low_pass', patch='mini-square') # C, C0, m, d = marmousi(pixel_scale='medium', initial_model_style='constant') fig = plt.figure() fig.add_subplot(2,1,1) vis.plot(C, m) fig.add_subplot(2,1,2) vis.plot(C0, m) plt.show()