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
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
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
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