def std_boxcar_mesh( n_upper_mantle=20, n_mtz=10, n_lower_mantle=12, n_dpp=6, types=[ParameterType.VSH], verbose=0): '''Boxcar mesh using ak135 as reference model for the structure of the upper mantle and transition zone down to 1000 km depth. ''' model_ref = SeismicModel.prem() # model parameters depth_moho = 6371. - 6336.6 depth_410 = 410. depth_660 = 660. depth_dpp = 2491. depth_cmb = 2891. rs_upper_mantle = np.linspace(depth_410, depth_moho, n_upper_mantle) rs_mtz = np.linspace(depth_660, depth_410, n_mtz, endpoint=(n_upper_mantle==0)) rs_lower_mantle = np.linspace( depth_dpp, depth_660, n_lower_mantle, endpoint=(n_mtz==0)) rs_dpp = np.linspace( depth_cmb, depth_dpp, n_dpp, endpoint=(n_lower_mantle==0)) radii = 6371. - np.round( np.hstack((rs_lower_mantle, rs_mtz, rs_upper_mantle, rs_dpp)), 4) if verbose > 1: print('dr_um={}, dr_mtz={}, dr_lm={}'.format( rs_upper_mantle[1] - rs_upper_mantle[0], rs_mtz[1] - rs_mtz[0], rs_lower_mantle[1] - rs_lower_mantle[0])) model_params = ModelParameters(types, radii, mesh_type='boxcar') # mesh # model, mesh = ak135.boxcar_mesh(model_params) return model_ref, model_params
def get_model_syntest1_prem(): types = [ParameterType.VSH] radii = np.array([3480. + 100 * i for i in range(5)]) model_params = ModelParameters(types, radii, mesh_type='boxcar') model = SeismicModel.prem().boxcar_mesh(model_params) values = np.array( [.2 * (-1)**i if i < 2 else 0. for i in range(model_params.get_n_grd_params())]) values_dict = {param_type: values for param_type in types} values_mat = model_params.get_values_matrix(values_dict) model_updated = model.multiply(values_mat) return model_updated
def get_model_syntest_vshvsv_4(): model_ref = SeismicModel.prem() types = [ParameterType.VSH, ParameterType.VSV] radii = np.linspace(3480., 3980., 3, endpoint=True) model_params = ModelParameters( types, radii, mesh_type='lininterp') model = model_ref.lininterp_mesh( model_params) values = np.zeros(model_params.get_n_grd_params()) values[2] = model_ref.get_value_at(radii[1], ParameterType.VSH) * 0.03 value_dict = { ParameterType.VSH: values, ParameterType.VSV: -values } model_updated = model.build_model( model, model_params, value_dict) return model_updated
def get_model_syntest1_prem_vshvsv(): types = [ParameterType.VSH, ParameterType.VSV] radii = np.array([3480. + 20 * i for i in range(21)]) model_params = ModelParameters(types, radii, mesh_type='boxcar') model = SeismicModel.prem().boxcar_mesh(model_params) values_vsh = np.array( [0.2 * (-1)**(i//5) if i <= 9 else 0. for i in range(model_params.get_n_grd_params())]) values_vsv = np.array( [-0.2 * (-1) ** (i // 5) if i <= 4 else 0. for i in range(model_params.get_n_grd_params())] ) values_dict = { ParameterType.VSH: values_vsh, ParameterType.VSV: values_vsv } values_mat = model_params.get_values_matrix(values_dict) model_updated = model.multiply(values_mat) return model_updated
return variance, corr, ratio def check_data(data, syn, var, corr, ratio): var_, corr_, ratio_ = misfits(data, syn) return (np.isfinite(var_) and np.isfinite(corr_) and np.isfinite(ratio_) and var_ <= var and corr_ >= corr and 1 / ratio <= ratio_ <= ratio) if __name__ == '__main__': types = [ParameterType.VSH] radii = [3480. + 20 * i for i in range(41)] model_params = ModelParameters(types=types, radii=radii, mesh_type='boxcar') model = SeismicModel.prem().boxcar_mesh(model_params) n_param = model_params.get_n_params() its, itypes, igrds = model_params.get_free_all_indices() order_types = [model_params.get_types()[itypes[i]] for i in its] order_radii = [model_params.get_grd_params()[igrds[i]] for i in its] # sac_files = glob.glob(os.path.join(root_sac, '*[RZT]')) # dataset = Dataset.dataset_from_sac( # sac_files, headonly=False) t_before = 20. t_after = 40. sampling_hz = 20 window_npts = int((t_before + t_after) * 20) tlen = 1638.4
shifts = [i * np.pi / 10 for i in range(11)] arrs = [np.sin(x + s) for s in shifts] roll_vars = [ rolling_variance(arr1, arrs[i], 500, 250) for i in range(len(arrs))] vars = [variance(arr1, arrs[i]) for i in range(len(arrs))] plt.plot(shifts, roll_vars) plt.plot(shifts, vars) plt.show() types = [ParameterType.VSH, ParameterType.VPH] radii = np.array([5701., 5971.]) model_params = ModelParameters(types, radii) model = SeismicModel.prem() range_dict = {ParameterType.VSH: [-0.15, 0.15], ParameterType.VPH: [-0.1, 0.1]} umc = UniformMonteCarlo( model, model_params, range_dict, mesh_type='triangle', seed=0) sample_models = umc.sample_models(50) fig, ax = sample_models[0].plot( types=[ParameterType.VSH, ParameterType.VPH]) for sample in sample_models[1:]: sample.plot( ax=ax, types=[ParameterType.VSH, ParameterType.VPH]) ax.get_legend().remove() plt.show()
from mpi4py import MPI import os import sys comm = MPI.COMM_WORLD n_core = comm.Get_size() rank = comm.Get_rank() input_file = sys.argv[1] # model parameters n_nodes = 3 types = [ParameterType.VSH, ParameterType.VSV, ParameterType.RADIUS] radii = np.linspace(3480., 3980., n_nodes, endpoint=True) model_params = ModelParameters(types, radii, mesh_type='lininterp') model = SeismicModel.prem().lininterp_mesh(model_params) # set D'' layer to constant velocity and density for r in radii[:-1]: izone = model.get_zone(r) for p_type in ParameterType.structure_types(): v_dpp = model.get_value_at(radii[-1], p_type) model.set_value( izone, p_type, np.array([v_dpp, 0., 0., 0.])) # constraints to parameters mask_dict = dict() for p_type in ParameterType.structure_types(): mask_dict[p_type] = np.zeros( model_params.get_n_grd_params(), dtype='bool') for p_type in types: