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
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
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
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