0
$\begingroup$

In quantum optics, we often work in second-quantization Heisenberg picture where we have states like:

$$|\Psi\rangle=\int\mathrm{d}\omega_s\mathrm{d}\omega_i~f(\omega_s,\omega_i)~\hat{a}^{\dagger}(\omega_s)\hat{a}^{\dagger}(\omega_i)|\text{vac}\rangle\tag{1}$$

Where $\hat{a}^{\dagger}(\omega)$ is the creation operator that creates one photon at frequency $\omega$ into the field.

I'd like to simulate these sorts of operators in QuTIP but QuTIP doesn't have a native $\hat{a}^{\dagger}(\omega)$ functionality, it just has create(n) and destroy(n). My first instinct was to create an occupation state like psi_occupation_vac = tensor(fock(n,0), basis(n,0)) and a list of omega's like Omega = np.arange(w_0, w_max, d_omega) and then define a function that returns the creation operator at a given omega as follows:

def a_dagger(ω):
a = destroy(n)
k = np.argmin(abs(Omega - ω))
alpha = 0
for j in range(0, n):
    v = basis(n, j)
    if j == k:
        alpha += tensor(a.dag() , v.proj())
    else:
        alpha += tensor(qeye(n) , v.proj())
return alpha

Which works but is way too 'greedy'. Moreover when I try to construct a Hamiltonian like $\hat{H} = \kappa~\hat{a}^{\dagger}_s(\omega_s)\hat{a}^{\dagger}_i(\omega_i)\hat{a}_p(\omega_p)$ out of the creation operators constructed in the above way, it calls a memory error because doing that tensor product would apparently take on the order of terrabytes of RAM.

I'm thinking there's a better way and that my problem is that I'm trying to get QuTIP to work in Heisenberg picture when it natively works in Schrodinger picture. I am inclined to think that the documentation relating to time-dependent Hamiltonians in QuTIP might be helpful if I can somehow find a way to "cheat" by defining the operators like $\hat{a}^{\dagger}(\omega)=f(\omega)\hat{a}^{\dagger}$ and then exploiting the built-in ways of dealing with time-dependent Hamiltonians to encode that into QuTIP, but I'm at a loss as to what form $f(\omega)$ has to make it work in the way I'm desiring. I strongly suspect that $\hat{a}^{\dagger}(\omega) = \delta(\omega)\hat{a}^{\dagger}$ but I don't know if this will be implemented correctly in QuTIP.

Any help would be appreciated.

$\endgroup$

0

Browse other questions tagged or ask your own question.