def test_forward_model(): class args(object): def __init__(self): self.source_model = os.path.join('test', 'testdata_v1', 'testsource_v1') self.step = 0 self.steplengthrun = False, self.ignore_network = True args = args() all_config = config_params(args, comm, size, rank) assert all_config.auto_corr ns = get_ns(all_config) assert (ns[0] == 3600) assert (ns[1] == 7200) p = define_correlationpairs(all_config.source_config['project_path'], all_config.auto_corr) assert len(p) == 3 assert p[0][0].split()[-1] == 'STA1' input_files = add_input_files(p[1], all_config)[0] assert os.path.basename(input_files[0]) == 'NET.STA1..MXZ.h5' nsrc = os.path.join('test', 'testdata_v1', 'testsource_v1', 'iteration_0', 'starting_model.h5') # use a one-sided taper: The seismogram probably has a non-zero end, # being cut off wherever the solver stopped running. taper = cosine_taper(ns[0], p=0.01) taper[0:ns[0] // 2] = 1.0 correlation, sta1, sta2 = compute_correlation(input_files, all_config, NoiseSource(nsrc), ns, taper) corr_saved = np.load( os.path.join('test', 'testdata_v1', 'testdata', 'NET.STA1..MXZ--NET.STA2..MXZ.npy')) assert np.allclose(correlation, corr_saved)
grad_dq_1 = np.dot(grad[1, :, 0], d_q_1) grad_dq = grad_dq_0 + grad_dq_1 dcheck = [] # loop: for step in steps: # add perturbation to archived model --> current model os.system('cp {} temp.h5'.format(source_file)) n = h5py.File('temp.h5', 'r+') n['model'][:, 0] += 10.**step * d_q_0 n['model'][:, 1] += 10.**step * d_q_1 n.flush() n.close() with NoiseSource('temp.h5') as nsrc: correlation = compute_correlation(input_files, all_config, nsrc, all_ns, taper) # evaluate misfit and add to list. syntest = Trace(data=correlation[0]) syntest.stats.sac = {} syntest.stats.sac['dist'] = obs.stats.sac['dist'] syntest.write('temp.sac', format='SAC') syntest = read('temp.sac')[0] msr_sh = m_func(syntest, **m_a_options) # plt.plot(correlation[0]) # plt.plot(syn.data, '--') # plt.title(str(step)) # plt.show() if mtype in ['ln_energy_ratio']: jh = 0.5 * (msr_sh - msr_o)**2