def spectrum_ss(H, wlist, c_op_list, a_op, b_op): """ Calculate the spectrum corresponding to a correlation function :math:`\left<A(\\tau)B(0)\\right>`, i.e., the Fourier transform of the correlation function: .. math:: S(\omega) = \int_{-\infty}^{\infty} \left<A(\\tau)B(0)\\right> e^{-i\omega\\tau} d\\tau. Parameters ---------- H : :class:`qutip.qobj` system Hamiltonian. wlist : *list* / *array* list of frequencies for :math:`\\omega`. c_op_list : list of :class:`qutip.qobj` list of collapse operators. a_op : :class:`qutip.qobj` operator A. b_op : :class:`qutip.qobj` operator B. Returns ------- spectrum: *array* An *array* with spectrum :math:`S(\omega)` for the frequencies specified in `wlist`. """ # contruct the Liouvillian L = liouvillian(H, c_op_list) # find the steady state density matrix and a_op and b_op expecation values rho0 = steady(L) a_op_ss = expect(a_op, rho0) b_op_ss = expect(b_op, rho0) # eseries solution for (b * rho0)(t) es = ode2es(L, b_op * rho0) # correlation corr_es = expect(a_op, es) # covarience cov_es = corr_es - np.real(np.conjugate(a_op_ss) * b_op_ss) # spectrum spectrum = esspec(cov_es, wlist) return spectrum
def correlation_es(H, rho0, tlist, taulist, c_op_list, a_op, b_op): """ Internal function for calculating correlation functions using the exponential series solver. See :func:`correlation` usage. """ # contruct the Liouvillian L = liouvillian(H, c_op_list) if rho0 is None: rho0 = steady(L) C_mat = np.zeros([np.size(tlist), np.size(taulist)], dtype=complex) solES_t = ode2es(L, rho0) for t_idx in range(len(tlist)): rho_t = esval(solES_t, [tlist[t_idx]]) solES_tau = ode2es(L, b_op * rho_t) C_mat[t_idx, :] = esval(expect(a_op, solES_tau), taulist) return C_mat
def correlation_es(H, rho0, tlist, taulist, c_op_list, a_op, b_op): """ Internal function for calculating correlation functions using the exponential series solver. See :func:`correlation` usage. """ # contruct the Liouvillian L = liouvillian(H, c_op_list) if rho0 == None: rho0 = steady(L) C_mat = np.zeros([np.size(tlist), np.size(taulist)], dtype=complex) solES_t = ode2es(L, rho0) for t_idx in range(len(tlist)): rho_t = esval_op(solES_t, [tlist[t_idx]]) solES_tau = ode2es(L, b_op * rho_t) C_mat[t_idx, :] = esval(expect(a_op, solES_tau), taulist) return C_mat
def _correlation_es_2op_1t(H, rho0, tlist, c_ops, a_op, b_op, reverse=False, args=None, options=Odeoptions()): """ Internal function for calculating correlation functions using the exponential series solver. See :func:`correlation_ss` usage. """ if debug: print(inspect.stack()[0][3]) # contruct the Liouvillian L = liouvillian(H, c_ops) # find the steady state if rho0 is None: rho0 = steady(L) elif rho0 and isket(rho0): rho0 = ket2dm(rho0) # evaluate the correlation function if reverse: # <A(t)B(t+tau)> solC_tau = ode2es(L, rho0 * a_op) return esval(expect(b_op, solC_tau), tlist) else: # default: <A(t+tau)B(t)> solC_tau = ode2es(L, b_op * rho0) return esval(expect(a_op, solC_tau), tlist)
def spectrum_ss(H, wlist, c_op_list, a_op, b_op): """ Calculate the spectrum corresponding to a correlation function :math:`\left<A(\\tau)B(0)\\right>`, i.e., the Fourier transform of the correlation function: .. math:: S(\omega) = \int_{-\infty}^{\infty} \left<A(\\tau)B(0)\\right> e^{-i\omega\\tau} d\\tau. Parameters ---------- H : :class:`qutip.Qobj` system Hamiltonian. wlist : *list* / *array* list of frequencies for :math:`\\omega`. c_op_list : list of :class:`qutip.Qobj` list of collapse operators. a_op : :class:`qutip.Qobj` operator A. b_op : :class:`qutip.Qobj` operator B. Returns ------- spectrum: *array* An *array* with spectrum :math:`S(\omega)` for the frequencies specified in `wlist`. """ # contruct the Liouvillian L = liouvillian(H, c_op_list) # find the steady state density matrix and a_op and b_op expecation values rho0 = steady(L) a_op_ss = expect(a_op, rho0) b_op_ss = expect(b_op, rho0) # eseries solution for (b * rho0)(t) es = ode2es(L, b_op * rho0) # correlation corr_es = expect(a_op, es) # covarience cov_es = corr_es - np.real(np.conjugate(a_op_ss) * b_op_ss) # spectrum spectrum = esspec(cov_es, wlist) return spectrum
def correlation_ss_ode(H, tlist, c_op_list, a_op, b_op, rho0=None): """ Internal function for calculating correlation functions using the master equation solver. See :func:`correlation_ss` usage. """ L = liouvillian(H, c_op_list) if rho0 is None: rho0 = steady(L) return mesolve(H, b_op * rho0, tlist, c_op_list, [a_op]).expect[0]
def correlation_ss_ode(H, tlist, c_op_list, a_op, b_op, rho0=None): """ Internal function for calculating correlation functions using the master equation solver. See :func:`correlation_ss` usage. """ L = liouvillian(H, c_op_list) if rho0 == None: rho0 = steady(L) return mesolve(H, b_op * rho0, tlist, c_op_list, [a_op]).expect[0]
def correlation_ss_es(H, tlist, c_op_list, a_op, b_op, rho0=None): """ Internal function for calculating correlation functions using the exponential series solver. See :func:`correlation_ss` usage. """ # contruct the Liouvillian L = liouvillian(H, c_op_list) # find the steady state if rho0 is None: rho0 = steady(L) # evaluate the correlation function solC_tau = ode2es(L, b_op * rho0) return esval(expect(a_op, solC_tau), tlist)
def correlation_ss_es(H, tlist, c_op_list, a_op, b_op, rho0=None): """ Internal function for calculating correlation functions using the exponential series solver. See :func:`correlation_ss` usage. """ # contruct the Liouvillian L = liouvillian(H, c_op_list) # find the steady state if rho0 == None: rho0 = steady(L) # evaluate the correlation function solC_tau = ode2es(L, b_op * rho0) return esval(expect(a_op, solC_tau), tlist)
def _correlation_es_2op_2t(H, rho0, tlist, taulist, c_ops, a_op, b_op, reverse=False, args=None, options=Odeoptions()): """ Internal function for calculating correlation functions using the exponential series solver. See :func:`correlation` usage. """ if debug: print(inspect.stack()[0][3]) # contruct the Liouvillian L = liouvillian(H, c_ops) if rho0 is None: rho0 = steady(L) elif rho0 and isket(rho0): rho0 = ket2dm(rho0) C_mat = np.zeros([np.size(tlist), np.size(taulist)], dtype=complex) solES_t = ode2es(L, rho0) # evaluate the correlation function if reverse: # <A(t)B(t+tau)> for t_idx in range(len(tlist)): rho_t = esval(solES_t, [tlist[t_idx]]) solES_tau = ode2es(L, rho_t * a_op) C_mat[t_idx, :] = esval(expect(b_op, solES_tau), taulist) else: # default: <A(t+tau)B(t)> for t_idx in range(len(tlist)): rho_t = esval(solES_t, [tlist[t_idx]]) solES_tau = ode2es(L, b_op * rho_t) C_mat[t_idx, :] = esval(expect(a_op, solES_tau), taulist) return C_mat