In [1]:
%matplotlib inline
import matplotlib.pyplot as plt
from pylab import *
import numpy as np
from qutip import *
from scipy import linalg
In [2]:
#constants
hb=6.63*1e-34/(2*np.pi)#Planck constant
wl=2*np.pi*500*1e12 #frequency of driven laser
Nc =4 # Number of cavity states
Nm1 =10 # Number of mech2 states
wm1=2*np.pi*10**6 #mech1 frequency
kappa =0.1 # Cavity damping rate
gamma1 =1e-6 # Mech1 damping rate
n_th1 = 0
delta=1
eta=1e-4
g0=1e-4 #optomechanical coupling rate --cavity with mech1
plist =np.linspace(0.0001,10,1500) #range of normalized detuning delta
In [3]:
a= tensor(destroy(Nc), qeye(Nm1))
b1 = tensor(qeye(Nc), destroy(Nm1))
num_a = a.dag()*a
num_b1 = b1.dag()*b1
#quadratures
x1 = (a + a.dag()) / np.sqrt(2)
y1 = -1j * (a - a.dag()) / np.sqrt(2)
q1 = (b1 + b1.dag()) / np.sqrt(2)
p1 = -1j * (b1 - b1.dag()) / np.sqrt(2)
R=[x1,y1,q1,p1]
cc = np.sqrt(kappa)*a #cavity collapse
cm1 = np.sqrt(gamma1*(1.0 + n_th1))*b1#mech1
cp1 = np.sqrt(gamma1*n_th1)*b1.dag()#mech1
c_ops = [cc,cm1,cp1]
En=[]#Entanglement
var=[]#position variance for duffing oscillator
In [4]:
# definition of entanglement with one variable 'delta'
for P in plist:
E=np.sqrt(2*0.1*wm1*0.001*P/(hb*wl))/wm1
H =delta*(num_a) + num_b1 - g0*(b1.dag()+b1)*num_a + E*(a.dag()+a)+eta*(b1+b1.dag())**4
rho_ss= steadystate(H, c_ops)
#covariance matrix
varxc=variance(x1,rho_ss)
varpc=variance(y1,rho_ss)
varq1=variance(q1,rho_ss)
varp1=variance(p1,rho_ss)
covxcpc=1/2* expect(x1*y1+y1*x1,rho_ss)-expect(x1,rho_ss)*expect(y1,rho_ss)
covxcq1=1/2* expect(x1*q1+q1*x1,rho_ss)-expect(x1,rho_ss)*expect(q1,rho_ss)
covxcp1=1/2* expect(x1*p1+x1*p1,rho_ss)-expect(x1,rho_ss)*expect(p1,rho_ss)
covpcp1=1/2* expect(p1*y1+y1*p1,rho_ss)-expect(p1,rho_ss)*expect(y1,rho_ss)
covpcq1=1/2* expect(q1*y1+y1*q1,rho_ss)-expect(q1,rho_ss)*expect(y1,rho_ss)
covq1p1=1/2* expect(q1*p1+p1*q1,rho_ss)-expect(q1,rho_ss)*expect(p1,rho_ss)
V=array([[varxc,covxcpc,covxcq1,covxcp1],[covxcpc,varpc,covpcq1,covpcp1],[covxcq1,covpcq1,varq1,covq1p1],[covxcp1,covpcp1,covq1p1,varp1]]).astype('float64')# change the datatype
var.append(varq1)
def logarithmic_negativity(V):
A = array([[varxc,covxcpc],[covxcpc,varpc]])
B = array([[varq1,covq1p1],[covq1p1,varp1]])
C = array([[covxcq1,covxcp1],[covpcq1,covpcp1]])
sigma = linalg.det(A) +linalg.det(B) - 2*linalg.det(C)
eta = sigma/2 -np.sqrt(sigma**2 - 4 * linalg.det(V))/ 2
if eta < 0.0:
return 0.0
nu = np.sqrt(eta)
lognu = -np.log(2 * nu)
logneg = max(0, lognu)
return logneg
En.append(logarithmic_negativity(V))
In [5]:
fig=figure(1)
ax = fig.add_subplot(111)
ax.plot(plist,En,'r',lw=2)
ylabel('$E_N$')
xlabel('$P$')
show()
fig=figure(2)
ax = fig.add_subplot(111)
ax.plot(plist,var,'r',lw=2)
yticks = [0,0.1, 0.2, 0.3,0.4,0.5,0.6]
ax.set_yticks(yticks)
plt.xscale('log')
ylabel('$b1n$')
xlabel('$P$')
show()
In [ ]: