Пример #1
0
def test_PoststackLinearModelling1d(par):
    """Dot-test, comparison of dense vs lop implementation and
    inversion for PoststackLinearModelling in 1d with stationary wavelet
    """
    # Dense
    PPop_dense = PoststackLinearModelling(wav, nt0=nt0, explicit=True)
    assert dottest(PPop_dense, nt0, nt0, tol=1e-4)

    # Linear operator
    PPop = PoststackLinearModelling(wav, nt0=nt0, explicit=False)
    assert dottest(PPop, nt0, nt0, tol=1e-4)

    # Compare data
    d = PPop * m.flatten()
    d_dense = PPop_dense * m.T.flatten()
    assert_array_almost_equal(d, d_dense, decimal=4)

    # Inversion
    for explicit in [True, False]:
        if par['epsR'] is None:
            dict_inv = {}
        else:
            dict_inv = dict(damp=0 if par['epsI'] is None else par['epsI'],
                            iter_lim=80)
        minv = PoststackInversion(d,
                                  wav,
                                  m0=mback,
                                  explicit=explicit,
                                  epsR=par['epsR'],
                                  epsI=par['epsI'],
                                  simultaneous=par['simultaneous'],
                                  **dict_inv)[0]
        assert np.linalg.norm(m - minv) / np.linalg.norm(minv) < 1e-2
Пример #2
0
def test_PoststackLinearModelling2d(par):
    """Dot-test and inversion for PoststackLinearModelling in 2d
    """
    PPop = PoststackLinearModelling(wav,
                                    nt0=nz,
                                    ndims=nx,
                                    explicit=par['explicit'])
    assert dottest(PPop, nz * nx, nz * nx, tol=1e-4)

    # Data
    d = (PPop * m2d.flatten()).reshape(nz, nx)

    # Inversion
    if par['explicit'] and not par['simultaneous'] and par['epsR'] is None:
        dict_inv = {}
    elif par['explicit'] and not par['simultaneous'] and par[
            'epsR'] is not None:
        dict_inv = dict(damp=0 if par['epsI'] is None else par['epsI'],
                        iter_lim=80)
    else:
        dict_inv = dict(damp=0 if par['epsI'] is None else par['epsI'],
                        iter_lim=80)

    minv2d = PoststackInversion(d,
                                wav,
                                m0=mback2d,
                                explicit=par['explicit'],
                                epsR=par['epsR'],
                                epsI=par['epsI'],
                                simultaneous=par['simultaneous'],
                                **dict_inv)[0]
    assert np.linalg.norm(m2d - minv2d) / np.linalg.norm(minv2d) < 2e-1
Пример #3
0
def test_PoststackLinearModelling1d(par):
    """Dot-test and inversion for PoststackLinearModelling in 1d
    """
    PPop = PoststackLinearModelling(wav, nt0=nt0, explicit=par['explicit'])
    print(PPop)
    print(nt0)
    assert dottest(PPop, nt0, nt0, tol=1e-4)

    # Data
    d = PPop * m
    print(d.shape)

    # Inversion
    if par['epsR'] is None:
        dict_inv = {}
    else:
        dict_inv = dict(damp=0 if par['epsI'] is None else par['epsI'],
                        iter_lim=80)
    minv = PoststackInversion(d,
                              wav,
                              m0=mback,
                              explicit=par['explicit'],
                              epsR=par['epsR'],
                              epsI=par['epsI'],
                              simultaneous=par['simultaneous'],
                              **dict_inv)[0]
    assert np.linalg.norm(m - minv) / np.linalg.norm(minv) < 1e-2
Пример #4
0
def test_PoststackLinearModelling2d(par):
    """Dot-test and inversion for PoststackLinearModelling in 2d"""

    # Dense
    PPop_dense = PoststackLinearModelling(wav,
                                          nt0=nz,
                                          spatdims=nx,
                                          explicit=True)
    assert dottest(PPop_dense, nz * nx, nz * nx, tol=1e-4)

    # Linear operator
    PPop = PoststackLinearModelling(wav, nt0=nz, spatdims=nx, explicit=False)
    assert dottest(PPop, nz * nx, nz * nx, tol=1e-4)

    # Compare data
    d = (PPop * m2d.ravel()).reshape(nz, nx)
    d_dense = (PPop_dense * m2d.ravel()).reshape(nz, nx)
    assert_array_almost_equal(d, d_dense, decimal=4)

    # Inversion
    for explicit in [True, False]:
        if explicit and not par["simultaneous"] and par["epsR"] is None:
            dict_inv = {}
        elif explicit and not par["simultaneous"] and par["epsR"] is not None:
            dict_inv = dict(damp=0 if par["epsI"] is None else par["epsI"],
                            iter_lim=10)
        else:
            dict_inv = dict(damp=0 if par["epsI"] is None else par["epsI"],
                            iter_lim=10)
        minv2d = PoststackInversion(d,
                                    wav,
                                    m0=mback2d,
                                    explicit=explicit,
                                    epsI=par["epsI"],
                                    epsR=par["epsR"],
                                    epsRL1=par["epsRL1"],
                                    simultaneous=par["simultaneous"],
                                    **dict_inv)[0]
        assert np.linalg.norm(m2d - minv2d) / np.linalg.norm(m2d) < 1e-1