Пример #1
0
def test_pure_dephasing():
    """
    pure_dephasing: Tests the pure_dephasing integrand.
    """
    coup_strength, bath_broad, bath_freq = 0.08, 0.4, 1.0

    # Test only at short times
    tlist = np.linspace(0, 20, 100)

    # Set qubit frequency to 0 to see only the dynamics due to the interaction.
    wq = 0
    # Zero temperature case
    beta = np.inf
    ck1, vk1 = nonmatsubara_exponents(coup_strength, bath_broad, bath_freq,
                                      beta)
    # ck2, vk2 = matsubara_exponents(lam, gamma, w0, beta, N_exp)

    mats_data_zero = matsubara_zero_analytical(coup_strength, bath_broad,
                                               bath_freq, tlist)
    ck20, vk20 = biexp_fit(tlist, mats_data_zero)

    ck = np.concatenate([ck1, ck20])
    vk = np.concatenate([vk1, vk20])

    pd_analytical = pure_dephasing_evolution(tlist, coup_strength, bath_broad,
                                             bath_freq, beta, wq)
    pd_numerical_fitting = pure_dephasing_evolution_analytical(
        tlist, wq, ck, vk)
    residue = np.abs(pd_analytical - pd_numerical_fitting)
    assert_(np.max(residue) < 1e-3)
Пример #2
0
def test_heom():
    """
    heom: Tests the HEOM method.
    """
    Q = sigmax()
    wq = 1.0
    lam, gamma, w0 = 0.2, 0.05, 1.0
    tlist = np.linspace(0, 200, 1000)
    Nc = 9
    # zero temperature case
    beta = np.inf

    Hsys = 0.5 * wq * sigmaz()
    initial_ket = basis(2, 1)
    rho0 = initial_ket * initial_ket.dag()
    omega = np.sqrt(w0 ** 2 - (gamma / 2.0) ** 2)
    a = omega + 1j * gamma / 2.0

    lam_coeff = lam ** 2 / (2 * (omega))

    options = Options(nsteps=1500, store_states=True, atol=1e-12, rtol=1e-12)

    ck1, vk1 = nonmatsubara_exponents(lam, gamma, w0, beta)
    mats_data_zero = matsubara_zero_analytical(lam, gamma, w0, tlist)
    ck20, vk20 = biexp_fit(tlist, mats_data_zero)

    hsolver = HeomUB(
        Hsys,
        Q,
        lam_coeff,
        np.concatenate([ck1, ck20]),
        np.concatenate([-vk1, -vk20]),
        ncut=Nc,
    )

    output = hsolver.solve(rho0, tlist)
    result = np.real(expect(output.states, sigmaz()))

    # Ignore Matsubara
    hsolver2 = HeomUB(Hsys, Q, lam_coeff, ck1, -vk1, ncut=Nc)
    output2 = hsolver2.solve(rho0, tlist)
    result2 = np.real(expect(output2.states, sigmaz()))

    steady_state_error = np.abs(result[-1] - result2[-1])
    assert_(steady_state_error > 0.0)
Пример #3
0
wq = 1.
delta = 0.
coup_strength, bath_broad, bath_freq = 0.2, 0.05, 1.
tlist = np.linspace(0, 200, 1000)
Nc = 9
Hsys = 0.5 * wq * sigmaz() + 0.5 * delta * sigmax()
initial_ket = basis(2, 1)
rho0 = initial_ket*initial_ket.dag()
omega = np.sqrt(bath_freq**2 - (bath_broad/2.)**2)
options = Options(nsteps=1500, store_states=True, atol=1e-12, rtol=1e-12)

# zero temperature case, renormalized coupling strength
beta = np.inf
lam_coeff = coup_strength**2/(2*(omega))

ck1, vk1 = nonmatsubara_exponents(coup_strength, bath_broad, bath_freq, beta)

# Ignore Matsubara
hsolver_no_matsubara = HeomUB(Hsys, Q, lam_coeff, ck1, -vk1, ncut=Nc)
output_no_matsubara = hsolver_no_matsubara.solve(rho0, tlist, options)
heom_result_no_matsubara = (np.real(expect(output_no_matsubara.states, sigmaz())) + 1)/2


# Add zero temperature Matsubara coefficients
mats_data_zero = matsubara_zero_analytical(coup_strength, bath_broad, bath_freq,
										   tlist)
ck20, vk20 = biexp_fit(tlist, mats_data_zero)
hsolver = HeomUB(Hsys, Q, lam_coeff, np.concatenate([ck1, ck20]),
	             np.concatenate([-vk1, -vk20]), ncut=Nc)
output = hsolver.solve(rho0, tlist, options)
heom_result_with_matsubara = (np.real(expect(output.states, sigmaz())) + 1)/2
Пример #4
0
def test_exponents():
    """
    correlation: Tests the Matsubara and non Matsubara exponents.
    """
    lam, gamma, w0 = 0.2, 0.05, 1.0
    tlist = np.linspace(0, 100, 1000)

    # Finite temperature cases
    beta = 0.1
    N_exp = 200
    ck_nonmats = [0.190164 - 0.004997j, 0.21017 + 0.004997j]
    vk_nonmats = [-0.025 + 0.999687j, -0.025 - 0.999687j]
    ck1, vk1 = nonmatsubara_exponents(lam, gamma, w0, beta)

    assert_array_almost_equal(ck1, ck_nonmats)
    assert_array_almost_equal(vk1, vk_nonmats)

    ck2, vk2 = matsubara_exponents(lam, gamma, w0, beta, N_exp)
    corr_fit = sum_of_exponentials(np.concatenate([ck1, ck2]),
                                   np.concatenate([vk1, vk2]), tlist)

    corr = sum_of_exponentials(ck_nonmats, vk_nonmats, tlist)
    max_residue = np.max(np.abs(corr_fit - corr))
    max_amplitude = np.max(np.abs(corr))

    assert_(max_residue < max_amplitude / 1e5)

    # Lower temperature
    beta = 1.0
    N_exp = 100
    ck_nonmats = [0.011636 - 0.00046j, 0.031643 + 0.00046j]
    vk_nonmats = [-0.025 + 0.999687j, -0.025 - 0.999687j]
    ck1, vk1 = nonmatsubara_exponents(lam, gamma, w0, beta)

    assert_array_almost_equal(ck1, ck_nonmats)
    assert_array_almost_equal(vk1, vk_nonmats)

    ck2, vk2 = matsubara_exponents(lam, gamma, w0, beta, N_exp)
    corr_fit = sum_of_exponentials(np.concatenate([ck1, ck2]),
                                   np.concatenate([vk1, vk2]), tlist)

    corr = sum_of_exponentials(ck_nonmats, vk_nonmats, tlist)
    max_residue = np.max(np.abs(corr_fit - corr))
    max_amplitude = np.max(np.abs(corr))

    assert_(max_residue < max_amplitude / 1e3)

    # Zero temperature case
    beta = np.inf
    N_exp = 100
    ck_nonmats = [0.0, 0.020006]
    vk_nonmats = [-0.025 + 0.999687j, -0.025 - 0.999687j]
    ck1, vk1 = nonmatsubara_exponents(lam, gamma, w0, beta)

    assert_array_almost_equal(ck1, ck_nonmats)
    assert_array_almost_equal(vk1, vk_nonmats)

    ck2, vk2 = matsubara_exponents(lam, gamma, w0, beta, N_exp)
    mats_data_zero = matsubara_zero_analytical(lam, gamma, w0, tlist)
    ck_mats_zero = [-0.000208, -0.000107]
    vk_mats_zero = [-1.613416, -0.329604]
    ck20, vk20 = biexp_fit(tlist, mats_data_zero)

    assert_array_almost_equal(ck20, ck_mats_zero)
    assert_array_almost_equal(vk20, vk_mats_zero)