示例#1
0
def make_calc(beta=2.0, h_field=0.0):
    
    # ------------------------------------------------------------------
    # -- Hubbard atom with two bath sites, Hamiltonian

    p = ParameterCollection(
        beta = beta,
        h_field = h_field,
        U = 5.0,
        ntau = 40,
        niw = 15,
        )

    p.mu = 0.5*p.U
    
    # ------------------------------------------------------------------

    print '--> Solving SIAM with parameters'
    print p
    
    # ------------------------------------------------------------------

    up, do = 'up', 'dn'
    docc = c_dag(up,0) * c(up,0) * c_dag(do,0) * c(do,0)
    mA = c_dag(up,0) * c(up,0) - c_dag(do,0) * c(do,0)
    nA = c_dag(up,0) * c(up,0) + c_dag(do,0) * c(do,0)

    p.H = -p.mu * nA + p.U * docc + p.h_field * mA
    
    # ------------------------------------------------------------------

    fundamental_operators = [c(up,0), c(do,0)]
    
    ed = TriqsExactDiagonalization(p.H, fundamental_operators, p.beta)

    g_tau = GfImTime(beta=beta, statistic='Fermion', n_points=40, indices=[0])
    g_iw = GfImFreq(beta=beta, statistic='Fermion', n_points=10, indices=[0])

    p.G_tau = BlockGf(name_list=[up,do], block_list=[g_tau]*2, make_copies=True)
    p.G_iw = BlockGf(name_list=[up,do], block_list=[g_iw]*2, make_copies=True)
    
    ed.set_g2_tau(p.G_tau[up], c(up,0), c_dag(up,0))
    ed.set_g2_tau(p.G_tau[do], c(do,0), c_dag(do,0))

    ed.set_g2_iwn(p.G_iw[up], c(up,0), c_dag(up,0))
    ed.set_g2_iwn(p.G_iw[do], c(do,0), c_dag(do,0))

    p.magnetization = ed.get_expectation_value(0.5 * mA)
    p.magnetization2 = ed.get_expectation_value(0.25 * mA * mA)
    
    # ------------------------------------------------------------------
    # -- Store to hdf5
    
    filename = 'data_pyed_h_field_%4.4f.h5' % h_field
    with HDFArchive(filename,'w') as res:
        res['p'] = p
示例#2
0
        O1 = dagger(o1) * o2
        O1 = O1 + dagger(O1)

        ed_p = TriqsExactDiagonalization(m.H + F * O1, m.op_full, m.beta)
        ed_m = TriqsExactDiagonalization(m.H - F * O1, m.op_full, m.beta)
        
        p.g_tau_field[(i1, i2)] = g_tau.copy()
        ed_p.set_g2_tau_matrix(p.g_tau_field[(i1, i2)], m.op_imp)

        for i3, i4 in itertools.product(range(4), repeat=2):

            o3, o4 = m.op_imp[i3], m.op_imp[i4]
            O2 = dagger(o3) * o4

            O2_vec = np.zeros(2, dtype=np.complex)
            O2_vec[0] = ed_m.get_expectation_value(O2)
            O2_vec[1] = ed_p.get_expectation_value(O2)

            p.chi_field[i1, i2, i3, i4] = -(O2_vec[1] - O2_vec[0])/(2*F)
            p.chi_field[i2, i1, i3, i4] = p.chi_field[i1, i2, i3, i4] 

            chi_tau = p.chi[i1, i2, i3, i4] + p.chi[i2, i1, i3, i4]
            chi_field = p.chi_field[i1, i2, i3, i4]

            np.testing.assert_almost_equal(chi_tau, chi_field, decimal=3)

            if(np.abs(chi_tau.real) > 1e-6):
                print i1, i2, i3, i4
                print 'chi_tau   = %+2.6f' % chi_tau.real
                print 'chi_field = %+2.6f' % chi_field.real
                print 'diff      = %+2.6E' % (chi_field.real - chi_tau.real)
示例#3
0
def make_calc(beta=2.0, h_field=0.0):

    # ------------------------------------------------------------------
    # -- Hubbard atom with two bath sites, Hamiltonian

    p = ParameterCollection(
        beta=beta,
        V1=2.0,
        V2=5.0,
        epsilon1=0.10,
        epsilon2=3.00,
        h_field=h_field,
        mu=0.0,
        U=5.0,
        ntau=800,
        niw=15,
    )

    # ------------------------------------------------------------------

    print '--> Solving SIAM with parameters'
    print p

    # ------------------------------------------------------------------

    up, do = 'up', 'dn'
    docc = c_dag(up, 0) * c(up, 0) * c_dag(do, 0) * c(do, 0)
    mA = c_dag(up, 0) * c(up, 0) - c_dag(do, 0) * c(do, 0)

    nA = c_dag(up, 0) * c(up, 0) + c_dag(do, 0) * c(do, 0)
    nB = c_dag(up, 1) * c(up, 1) + c_dag(do, 1) * c(do, 1)
    nC = c_dag(up, 2) * c(up, 2) + c_dag(do, 2) * c(do, 2)

    p.H = -p.mu * nA + p.U * docc + p.h_field * mA + \
        p.epsilon1 * nB + p.epsilon2 * nC + \
        p.V1 * (c_dag(up,0)*c(up,1) + c_dag(up,1)*c(up,0) + \
              c_dag(do,0)*c(do,1) + c_dag(do,1)*c(do,0) ) + \
        p.V2 * (c_dag(up,0)*c(up,2) + c_dag(up,2)*c(up,0) + \
              c_dag(do,0)*c(do,2) + c_dag(do,2)*c(do,0) )

    # ------------------------------------------------------------------

    fundamental_operators = [
        c(up, 0), c(do, 0),
        c(up, 1), c(do, 1),
        c(up, 2), c(do, 2)
    ]

    ed = TriqsExactDiagonalization(p.H, fundamental_operators, p.beta)

    g_tau = GfImTime(beta=beta, statistic='Fermion', n_points=400, indices=[0])
    g_iw = GfImFreq(beta=beta, statistic='Fermion', n_points=10, indices=[0])

    p.G_tau = BlockGf(name_list=[up, do],
                      block_list=[g_tau] * 2,
                      make_copies=True)
    p.G_iw = BlockGf(name_list=[up, do],
                     block_list=[g_iw] * 2,
                     make_copies=True)

    ed.set_g2_tau(p.G_tau[up][0, 0], c(up, 0), c_dag(up, 0))
    ed.set_g2_tau(p.G_tau[do][0, 0], c(do, 0), c_dag(do, 0))

    ed.set_g2_iwn(p.G_iw[up][0, 0], c(up, 0), c_dag(up, 0))
    ed.set_g2_iwn(p.G_iw[do][0, 0], c(do, 0), c_dag(do, 0))

    p.magnetization = ed.get_expectation_value(0.5 * mA)

    p.O_tau = Gf(mesh=MeshImTime(beta, 'Fermion', 400), target_shape=[])
    ed.set_g2_tau(p.O_tau, n(up, 0), n(do, 0))
    p.O_tau.data[:] *= -1.

    p.exp_val = ed.get_expectation_value(n(up, 0) * n(do, 0))

    # ------------------------------------------------------------------
    # -- Store to hdf5

    filename = 'data_pyed_h_field_%4.4f.h5' % h_field
    with HDFArchive(filename, 'w') as res:
        res['p'] = p
示例#4
0
                         target_shape=(4, 4, 4, 4))

    p.chi = np.zeros_like(p.chi_static)

    tau = np.array([float(tau) for tau in p.chi_tau.mesh])

    for i1, i2, i3, i4, in itertools.product(range(4), repeat=4):

        print i1, i2, i3, i4

        o1, o2, o3, o4 = m.op_imp[i1], m.op_imp[i2], m.op_imp[i3], m.op_imp[i4]

        O1 = dagger(o1) * o2
        O2 = dagger(o3) * o4

        p.O1_exp[i1, i2] = ed.get_expectation_value(O1)
        p.O2_exp[i3, i4] = ed.get_expectation_value(O2)

        p.chi_dissconn[i1, i2, i3, i4] = p.O1_exp[i1, i2] * p.O2_exp[i3, i4]

        p.chi_static[i1, i2, i3, i4] = ed.get_expectation_value(O1 * O2)

        ed.set_g2_tau(p.chi_tau[i1, i2, i3, i4], O1, O2)

        chi_tau = p.chi_tau[i1, i2, i3, i4]
        chi_tau *= -1.  # cancel gf -1 prefactor

        chi_dissconn = p.chi_dissconn[i1, i2, i3, i4]
        chi_tau.data[:] -= chi_dissconn

        p.chi[i1, i2, i3, i4] = np.trapz(chi_tau.data, x=tau) / m.beta