Пример #1
0
def syn_sum_amp_iso_clvd(parameter1, parameter2):
    Gt_Z = parameter1[0]
    Gt_E = parameter1[1]
    Gt_N = parameter1[2]
    d_z = parameter1[3]
    d_e = parameter1[4]
    d_n = parameter1[5]
    index_left = parameter1[6]
    index_right = parameter1[7]
    list_input = parameter1[8]
    MTparameter = parameter2
    m_rr, m_tt, m_pp, m_rp, m_rt, m_tp = functions.nmtensor(
        MTparameter[0], MTparameter[1], MTparameter[2], MTparameter[3],
        MTparameter[4])
    m_tmp = np.array([m_rr, m_tt, m_pp, m_rt, m_rp, m_tp])
    #print(i, j, k)
    ### assemble the greens functions to synthetics
    d_syn_z = np.dot(Gt_Z, m_tmp)
    d_syn_e = np.dot(Gt_E, m_tmp)
    d_syn_n = np.dot(Gt_N, m_tmp)
    cc = 0.
    for _i, stid in enumerate(list_input):
        cc1 = functions.L1_L2misfit_amp(
            d_z[0][index_left[_i]:index_right[_i]],
            d_syn_z[index_left[_i]:index_right[_i]])
        cc2 = functions.L1_L2misfit_amp(
            d_e[0][index_left[_i]:index_right[_i]],
            d_syn_e[index_left[_i]:index_right[_i]])
        cc3 = functions.L1_L2misfit_amp(
            d_n[0][index_left[_i]:index_right[_i]],
            d_syn_n[index_left[_i]:index_right[_i]])
        cc += cc1 + cc2 + cc3
    corr_value = cc / len(list_input) / 3
    #print(corr_value)
    return corr_value
Пример #2
0
def syn_sum_fem_fpm(strike, dip, rake, iso, clvd, Gt_Z, Gt_E, Gt_N, d_z, d_e,
                    d_n, index_left, index_right):
    m_rr, m_tt, m_pp, m_rp, m_rt, m_tp = functions.nmtensor(strike, dip, rake)
    m_tmp = np.array([m_rr, m_tt, m_pp, m_rt, m_rp, m_tp])
    #print(i, j, k)
    ### assemble the greens functions to synthetics
    d_syn_z = np.dot(Gt_Z, m_tmp)
    d_syn_e = np.dot(Gt_E, m_tmp)
    d_syn_n = np.dot(Gt_N, m_tmp)
    cc = 0.
    for _i, stid in enumerate(list_input):
        cc1 = functions.TF_fem(d_z[0][index_left[_i]:index_right[_i]],
                               d_syn_z[index_left[_i]:index_right[_i]])
        cc2 = functions.TF_fem(d_e[0][index_left[_i]:index_right[_i]],
                               d_syn_e[index_left[_i]:index_right[_i]])
        cc3 = functions.TF_fem(d_n[0][index_left[_i]:index_right[_i]],
                               d_syn_n[index_left[_i]:index_right[_i]])
        cc1 += functions.TF_fpm(d_z[0][index_left[_i]:index_right[_i]],
                                d_syn_z[index_left[_i]:index_right[_i]])
        cc2 += functions.TF_fpm(d_e[0][index_left[_i]:index_right[_i]],
                                d_syn_e[index_left[_i]:index_right[_i]])
        cc3 += functions.TF_fpm(d_n[0][index_left[_i]:index_right[_i]],
                                d_syn_n[index_left[_i]:index_right[_i]])
        cc += cc1 + cc2 + cc3
    corr_value = cc / len(list_input) / 3
    return corr_value
Пример #3
0
def calculate_misfits(strike_store, dip_store, rake_store, iso_store,
                      clvd_store, Gt_Z, Gt_E, Gt_N, d_z, d_e, d_n, index_left,
                      index_right):
    from tqdm import tqdm
    import multiprocessing as mp
    pool = mp.Pool(processes=8)
    print(mp.cpu_count())
    parameter = [[
        strike_store[i], dip_store[j], rake_store[k], iso_store[m],
        clvd_store[n], Gt_Z, Gt_E, Gt_N, d_z, d_e, d_n, index_left, index_right
    ] for m in tqdm(np.arange(0, iso_store.size, 1, dtype=int))
                 for n in np.arange(0, clvd_store.size, 1, dtype=int)
                 for i in np.arange(0, strike_store.size, 1, dtype=int)
                 for j in np.arange(0, dip_store.size, 1, dtype=int)
                 for k in np.arange(0, rake_store.size, 1, dtype=int)]
    print(parameter)
    outs = pool.map_async(syn_sum_amp_iso_clvd, tqdm(parameter))
    pool.close()
    pool.join()
    output = outs.get()
    data = np.array(output)
    data_reshape = data.reshape(iso_store.size, clvd_store.size,
                                strike_store.size, dip_store.size,
                                rake_store.size)
    index = np.unravel_index(np.argmin(data_reshape, axis=None),
                             data_reshape.shape)
    m_rr, m_tt, m_pp, m_rp, m_rt, m_tp = functions.nmtensor(
        strike_store[index[2]], dip_store[index[3]], rake_store[index[4]],
        iso_store[index[0]], clvd_store[index[1]])
    fault = np.array(
        [strike_store[index[2]], dip_store[index[3]], rake_store[index[4]]])
    m_inverse = np.array([m_rr, m_tt, m_pp, m_rt, m_rp, m_tp])
    d_syn = np.dot(Gt, m_inverse)
    return data, m_inverse, d_syn
Пример #4
0
def syn_sum_L2_iso_clvd_weight_abs_M0(parameter1, parameter2):
    Gt_Z = parameter1[0]
    Gt_E = parameter1[1]
    Gt_N = parameter1[2]
    d_z = parameter1[3]
    d_e = parameter1[4]
    d_n = parameter1[5]
    weight = parameter1[9]
    index_left = parameter1[6]
    index_right = parameter1[7]
    list_input = parameter1[8]
    MTparameter = parameter2
    m_rr, m_tt, m_pp, m_rp, m_rt, m_tp = functions.nmtensor(
        MTparameter[0], MTparameter[1], MTparameter[2], MTparameter[3],
        MTparameter[4])
    #### here I inserted a amplification for the relative moment scalar for inverse the M0
    m_tmp = MTparameter[5] * np.array([m_rr, m_tt, m_pp, m_rt, m_rp, m_tp
                                       ])  #print(i, j, k)
    ### assemble the greens functions to synthetics
    d_syn_z = np.dot(Gt_Z, m_tmp)
    d_syn_e = np.dot(Gt_E, m_tmp)
    d_syn_n = np.dot(Gt_N, m_tmp)
    cc = 0.
    for _i, stid in enumerate(list_input):
        cc1 = functions.L2misfit_abs(d_z[0][index_left[_i]:index_right[_i]],
                                     d_syn_z[index_left[_i]:index_right[_i]])
        cc2 = functions.L2misfit_abs(d_e[0][index_left[_i]:index_right[_i]],
                                     d_syn_e[index_left[_i]:index_right[_i]])
        cc3 = functions.L2misfit_abs(d_n[0][index_left[_i]:index_right[_i]],
                                     d_syn_n[index_left[_i]:index_right[_i]])
        cc += weight[_i] * weight[_i] * (cc1 + cc2 + cc3)
    corr_value = cc / len(list_input) / 3
    #print(corr_value)
    return corr_value