コード例 #1
0
def test_bloch_H_same(nx, ny, nz, dtype):
    H = get_H()
    b = Bloch([nx, ny, nz])

    if dtype == np.complex64:
        atol = 1e-6
    else:
        atol = 1e-8

    HB = H.tile(nx, 0).tile(ny, 1).tile(nz, 2)

    KX = [0, 0.1, 0.4358923]
    KY = [0, 0.128359, -0.340925]
    KZ = [0, 0.445]
    for kx, ky, kz in product(KX, KY, KZ):
        K = [kx, ky, kz]
        k_unfold = b.unfold_points(K)

        HK = [H.Hk(k, format='array', dtype=dtype) for k in k_unfold]
        H_unfold = b.unfold(HK, k_unfold)
        H_big = HB.Hk(K, format='array', dtype=dtype)

        assert np.allclose(H_big, H_big.T.conj(), atol=atol)
        assert np.allclose(H_unfold, H_unfold.T.conj(), atol=atol)
        assert np.allclose(H_unfold, H_big, atol=atol)
コード例 #2
0
ファイル: test_bloch.py プロジェクト: fyalcin/sisl
def test_bloch_call():
    b = Bloch([2] * 3)
    H = get_H()

    # Manual
    k_unfold = b.unfold_points([0] * 3)
    m = b.unfold([H.Hk(k, format='array') for k in k_unfold], k_unfold)

    assert np.allclose(m, b(H.Hk, [0] * 3, format='array'))
コード例 #3
0
ファイル: test_bloch.py プロジェクト: fyalcin/sisl
def test_bloch_one_direction(nx, ny, nz):
    H = get_H()
    b = Bloch([nx, ny, nz])

    HB = H.tile(nx, 0).tile(ny, 1).tile(nz, 2)

    KX = [0, 0.1, 0.4358923]
    KY = [0, 0.128359, -0.340925]
    KZ = [0, 0.445]
    for kx, ky, kz in product(KX, KY, KZ):
        K = [kx, ky, kz]
        k_unfold = b.unfold_points(K)

        HK = [H.Hk(k, format='array') for k in k_unfold]
        H_unfold = b.unfold(HK, k_unfold)
        H_big = HB.Hk(K, format='array')

        assert np.allclose(H_unfold, H_big)
コード例 #4
0
ファイル: test_bloch.py プロジェクト: lwk205/sisl
def test_bloch_one_direction(nx, ny, nz, dtype):
    H = get_H()
    b = Bloch([nx, ny, nz])

    if dtype == np.complex64:
        atol = 1e-6
    else:
        atol = 1e-8

    HB = H.tile(nx, 0).tile(ny, 1).tile(nz, 2)

    KX = [0, 0.1, 0.4358923]
    KY = [0, 0.128359, -0.340925]
    KZ = [0, 0.445]
    for kx, ky, kz in product(KX, KY, KZ):
        K = [kx, ky, kz]
        k_unfold = b.unfold_points(K)

        HK = [H.Hk(k, format='array', dtype=dtype) for k in k_unfold]
        H_unfold = b.unfold(np.stack(HK), k_unfold)
        H_big = HB.Hk(K, format='array', dtype=dtype)

        print(np.amax(np.absolute(H_unfold - H_big)))
        assert np.allclose(H_unfold, H_big, atol=atol)
コード例 #5
0
def test_sancho_bloch_zero_off_diag(setup):
    # check whether the bloch-expansion with 0 transverse
    # connections returns a block-diagonal matrix
    H = setup.H.copy()
    # disconnect transverse directions
    H.set_nsc(b=1)
    no = len(H)
    SE = RecursiveSI(H, '+A')

    for nb in [2, 4, 5]:
        bloch = Bloch(1, nb, 1)
        for E in [-0.1, 0.2, 0.4, -0.5]:
            se = bloch(SE.self_energy, [0.2, 0.2, 0.2], E=E)
            for b in range(1, nb):
                off = b*no
                assert np.allclose(se[:no, :no], se[off:off+no, off:off+no])
                se[off:off+no, off:off+no] = 0.
            se[:no, :no] = 0.
            assert np.allclose(se, 0.)
コード例 #6
0
def test_bloch_method():
    b = Bloch([1] * 3)
    assert 'Bloch' in str(b)
コード例 #7
0
def test_bloch_create(nx, ny, nz):
    b = Bloch([nx, ny, nz])
    assert len(b) == nx * ny * nz
    assert len(b.unfold_points([0] * 3)) == nx * ny * nz