Ejemplo n.º 1
0
def liouvillian_build(H_0, A, gamma, wRC, T_C):
    # Now this function has to construct the liouvillian so that it can be passed to mesolve
    H_0, A, Chi, Xi = RCME_operators(H_0, A, gamma, beta_f(T_C))
    L = 0
    L -= spre(A * Chi)
    L += sprepost(A, Chi)
    L += sprepost(Chi, A)
    L -= spost(Chi * A)

    L += spre(A * Xi)
    L += sprepost(A, Xi)
    L -= sprepost(Xi, A)
    L -= spost(Xi * A)

    return L, Chi + Xi
Ejemplo n.º 2
0
def liouvillian_build_new(H_0, A, gamma, wRC, T_C):
    # Now this function has to construct the liouvillian so that it can be passed to mesolve
    H_0, A, Chi, Xi = RCME_operators(H_0, A, gamma, beta_f(T_C))
    Z = Chi + Xi
    Z_dag = Z.dag()
    L = 0
    #L+=spre(A*Z_dag)
    #L-=sprepost(A, Z)
    #L-=sprepost(Z_dag, A)
    #L+=spost(Z_dag*A)

    L -= spre(A * Z_dag)
    L += sprepost(A, Z)
    L += sprepost(Z_dag, A)
    L -= spost(Z * A)

    print("new L built")
    return L, Z
Ejemplo n.º 3
0
def L_wc_analytic(detuning=0.,
                  Rabi=0,
                  alpha=0.,
                  w0=0.,
                  Gamma=0.,
                  T=0.,
                  tol=1e-7):
    energies, states = exciton_states(detuning, Rabi)
    dark_proj = states[0] * states[0].dag()
    bright_proj = states[1] * states[1].dag()
    ct_p = states[1] * states[0].dag()
    ct_m = states[0] * states[1].dag()
    cross_term = (ct_p + ct_m)
    epsilon = -detuning
    V = Rabi / 2

    eta = sqrt(epsilon**2 + 4 * V**2)

    # Bath 1 (only one bath)
    G = (lambda x: (DecayRate(x,
                              beta_f(T),
                              _J_underdamped,
                              Gamma,
                              w0,
                              imag_part=True,
                              alpha=alpha,
                              tol=tol)))
    G_0 = G(0.)
    G_p = G(eta)
    G_m = G(-eta)

    site_1 = (0.5 / eta) * ((eta + epsilon) * bright_proj +
                            (eta - epsilon) * dark_proj + 2 * V * cross_term)

    Z_1 = (0.5 / eta) * (G_0 * ((eta + epsilon) * bright_proj +
                                (eta - epsilon) * dark_proj) + 2 * V *
                         (ct_p * G_p + ct_m * G_m))

    L = -qt.spre(site_1 * Z_1) + qt.sprepost(Z_1, site_1)
    L += -qt.spost(Z_1.dag() * site_1) + qt.sprepost(site_1, Z_1.dag())

    return L
Ejemplo n.º 4
0
def L_non_rwa(H_vib,
              A,
              w_0,
              Gamma,
              T_EM,
              J,
              principal=False,
              silent=False,
              alpha=0.,
              tol=1e-5):
    ti = time.time()
    beta = beta_f(T_EM)
    eVals, eVecs = H_vib.eigenstates()
    #J=J_minimal # J_minimal(omega, Gamma, omega_0)
    d_dim = len(eVals)
    G = 0
    for i in range(d_dim):
        for j in range(d_dim):
            eta = eVals[i] - eVals[j]
            s = eVecs[i] * (eVecs[j].dag())
            #print A.matrix_element(eVecs[i].dag(), eVecs[j])
            overlap = A.matrix_element(eVecs[i].dag(), eVecs[j])
            s *= A.matrix_element(eVecs[i].dag(), eVecs[j])
            s *= DecayRate(eta,
                           beta,
                           J,
                           Gamma,
                           w_0,
                           imag_part=principal,
                           alpha=alpha,
                           tol=tol)
            G += s
    G_dag = G.dag()
    # Initialise liouvilliian
    L = qt.spre(A * G) - qt.sprepost(G, A)
    L += qt.spost(G_dag * A) - qt.sprepost(A, G_dag)
    if not silent:
        print(("Calculating non-RWA Liouvilliian took {} seconds.".format(
            time.time() - ti)))
    return -L