예제 #1
0
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)
예제 #2
0
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