Time evolution of an open lambda type system

47 views
Skip to first unread message

Arpita Das

unread,
Oct 24, 2022, 9:08:12 AM10/24/22
to pylcp
Hi,      
   I want to simulate time evolution of an open lambda type system for STIRAP purpose in python. For our system, we have a Lindblad for spontaneous decay to a loss channel and dephasing term for the linewidth of the lasers. I know that it can be possible to simulate a closed system with pylcp package. My question is, can we use the same for an open system also?  Because, in that case I have to put decay term from |2> -> |3> and |2> -> |1> as zero. 

I have attached the level scheme herewith. Please have a look and if you can guide me for the above-mentioned purpose, it will be helpful.

Best Regards,
Arpita

 
Lambda_Opensystem.jpeg

Barker, Daniel S. (Fed)

unread,
Oct 24, 2022, 9:38:52 AM10/24/22
to Arpita Das, pylcp

Hello Arpita,

 

I believe that pylcp can handle this case. I would start with the STIRAP example: https://python-laser-cooling-physics.readthedocs.io/en/latest/examples/basics/08_stirap.html. You can then add another H_0 block, (say ‘d’), by hand and couple it to the excited state by adding a corresponding d_q_block (this is all in the 2nd cell of the example). As long as there is no laser coupling ‘d->e’, the system should behave in the way that you want.

 

If you need a more complicated level structure that, say, includes hyperfine couplings, the approach of adding a new manifold should still work. However, it’ll be a bit more cumbersome to implement.

 

Daniel

--
You received this message because you are subscribed to the Google Groups "pylcp" group.
To unsubscribe from this group and stop receiving emails from it, send an email to pylcp+un...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/pylcp/5e22181e-e22a-41fe-8bfe-23db239a827an%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Arpita Das

unread,
Oct 24, 2022, 10:26:30 AM10/24/22
to pylcp
Hi Daniel,
        Thanks for the quick response. I have already started with the example you mentioned. I also added the level ('l'). But the problem I am finding is the following, when I put gamma=0.1 in the d_q block for g->e and r->e and keeping l->e as 3 then it seems that the plot is not correct. At this point, I could not understand if I am doing anything wrong as I am new in python. I guess, I can put the dephasing gamma due to laser linewidth in d_q block as I am currently putting. For your reference I have attached the code. We need to transfer population from r->g, so I choose the initial population as [0,1,0,0]. 

Best Regards,
Arpita
STIRAP.py

Eckel, Stephen P. (Fed)

unread,
Oct 25, 2022, 2:06:32 PM10/25/22
to Arpita Das, pylcp

Hello Arpita,

 

I just went through your code and have two suggestions:

  1. Try to keep the g->e and r->e gamma = 1, and scale the l->e gamma accordingly.  By changing the g->e and r->e, you are also changing the duration of your STIRAP pulse, since that is measured in units of gamma).  This way you can more easily separate out the effect of the “l” state.
  2. I think most of your trouble was in plotting the results. I changed around your plotting code to make it a little more clear what it is that you are seeing.  Rather than defining the factors before the loop, as was done in the example, I calculate them just before plotting each of the populations and update a legend entry appropriately.

 

fig, ax = plt.subplots(2, 1, figsize=(3.25, 2.))

linespecs = ['-', '--', '-.',':']

labels = ['gg','rr','ll','ee']

for ii in range(4):

    factor = 10**-np.ceil(np.log10(np.amax(np.real(sol1.rho[ii, ii]))))

    ax[0].plot(sol1.t/1e3, factor*np.real(sol1.rho[ii, ii]),

               linespecs[ii], color='C%d'%ii, linewidth=0.75,

               label='$\\rho_{%s}$'%labels[ii] if factor==1. else '$10^{%d}\\rho_{%s}$'%(np.log10(factor),labels[ii]))

    factor = 10**-np.ceil(np.log10(np.amax(np.real(sol2.rho[ii, ii]))))

    ax[1].plot(sol2.t/1e3, factor*np.real(sol2.rho[ii, ii]),

               linespecs[ii], color='C%d'%ii, linewidth=0.75,

               label='$\\rho_{%s}$'%labels[ii] if factor==1. else '$10^{%d}\\rho_{%s}$'%(np.log10(factor),labels[ii]))

 

[ax[ii].set_ylabel('$\\rho_{ii}$') for ii in range (2)];

[ax[ii].set_xlim((0, 1)) for ii in range(2)];

ax[0].legend(fontsize=7)

ax[1].legend(fontsize=7)

ax[1].set_xlabel('$\Gamma t$')

ax[0].xaxis.set_ticklabels('')

fig.subplots_adjust(bottom=0.18, left=0.14)

plt.show()

 

With this plotting I get the attached plots for the l->e gamma equal to 30 (and r->e and g->e gamma=1), which, at least at first glance, look correct to me.  When STIRAP is done in the incorrect order with r->e pulse applied first (top plot), you get a lot of population into the excited state which get dumps mostly into the l state (note the \rho_{gg} population is scaled by a factor of 10).  Then the g->e pulse comes along and takes the small amount of population that ended up in g and dumps it into l.  In the correct order (bottom plot) you avoid accumulating population in the excited state and get roughly 50 % transfer to the g state.  What little population you had in the excited state mostly gets dumped to the “l” state, ruining your transfer efficiency.  But the correct order is significantly better than the incorrect order.

 

Hope that helps!

 

-Steve

STIRAP_with_l_state.png
Reply all
Reply to author
Forward
0 new messages