Source code for qutip.three_level_atom

r'''
This module provides functions that are useful for simulating the
three level atom with QuTiP.  A three level atom (qutrit) has three states,
which are linked by dipole transitions so that 1 <-> 2 <-> 3.
Depending on there relative energies they are in the ladder, lambda or
vee configuration. The structure of the relevant operators is the same
for any of the three configurations::

    Ladder:          Lambda:                 Vee:
                                |two>                       |three>
      -------|three>           -------                      -------
         |                       / \             |one>         /
         |                      /   \           -------       /
         |                     /     \             \         /
      -------|two>            /       \             \       /
         |                   /         \             \     /
         |                  /           \             \   /
         |                 /        --------           \ /
      -------|one>      -------      |three>         -------
                         |one>                       |two>

References
----------
The naming of qutip operators follows the convention in [1]_ .

.. [1] Shore, B. W., "The Theory of Coherent Atomic Excitation",
   Wiley, 1990.

Notes
-----
Contributed by Markus Baden, Oct. 07, 2011

'''

__all__ = ['three_level_basis', 'three_level_ops']

import numpy as np
from qutip.states import qutrit_basis


[docs]def three_level_basis(): ''' Basis states for a three level atom. Returns ------- states : array `array` of three level atom basis vectors. ''' # A three level atom has the same representation as a qutrit, i.e. # three states return qutrit_basis()
[docs]def three_level_ops(): ''' Operators for a three level system (qutrit) Returns -------- ops : array `array` of three level operators. ''' out = np.empty((5,), dtype=object) one, two, three = qutrit_basis() # Note that the three level operators are different # from the qutrit operators. A three level atom only # has transitions 1 <-> 2 <-> 3, so we define the # operators seperately from the qutrit code out[0] = one * one.dag() out[1] = two * two.dag() out[2] = three * three.dag() out[3] = one * two.dag() out[4] = three * two.dag() return out