Exemple #1
0
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
Exemple #2
0
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
Exemple #3
0
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
Exemple #4
0
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
Exemple #5
0
    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
Exemple #6
0
    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()
Exemple #7
0
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: