Two-Level: Weak Pulse through Few Atoms¶
Define and Solve¶
[1]:
mb_solve_json = """
{
"atom": {
"fields": [
{
"coupled_levels": [[0, 1]],
"detuning": 0.0,
"rabi_freq": 1.0e-3,
"rabi_freq_t_args": {
"ampl": 1.0,
"centre": 0.0,
"fwhm": 1.0
},
"rabi_freq_t_func": "gaussian"
}
],
"num_states": 2
},
"t_min": -2.0,
"t_max": 10.0,
"t_steps": 100,
"z_min": -0.2,
"z_max": 1.2,
"z_steps": 10,
"interaction_strengths": [
0.1
]
}
"""
[2]:
from maxwellbloch import mb_solve
mbs = mb_solve.MBSolve().from_json_str(mb_solve_json)
[3]:
Omegas_zt, states_zt = mbs.mbsolve()
10.0%. Run time: 0.00s. Est. time left: 00:00:00:00
20.0%. Run time: 0.18s. Est. time left: 00:00:00:00
30.0%. Run time: 0.35s. Est. time left: 00:00:00:00
40.0%. Run time: 0.54s. Est. time left: 00:00:00:00
50.0%. Run time: 0.72s. Est. time left: 00:00:00:00
60.0%. Run time: 0.89s. Est. time left: 00:00:00:00
70.0%. Run time: 1.06s. Est. time left: 00:00:00:00
80.0%. Run time: 1.24s. Est. time left: 00:00:00:00
90.0%. Run time: 1.40s. Est. time left: 00:00:00:00
Total run time: 1.58s
Field Output¶
[4]:
import matplotlib.pyplot as plt
%matplotlib inline
import seaborn as sns
import numpy as np
sns.set_style('darkgrid')
fig = plt.figure(1, figsize=(16, 6))
ax = fig.add_subplot(111)
cmap_range = np.linspace(0.0, 1.0e-3, 11)
cf = ax.contourf(mbs.tlist, mbs.zlist,
np.abs(mbs.Omegas_zt[0]/(2*np.pi)),
cmap_range, cmap=plt.cm.Blues)
ax.set_title('Rabi Frequency ($\Gamma / 2\pi $)')
ax.set_xlabel('Time ($1/\Gamma$)')
ax.set_ylabel('Distance ($L$)')
for y in [0.0, 1.0]:
ax.axhline(y, c='grey', lw=1.0, ls='dotted')
plt.colorbar(cf);