Skip to content

Rydberg Atoms Simulation #198

Open
Open
@marcorossignolo

Description

@marcorossignolo

Describe the missing feature

The current Qubit class in the chip module is not suitable for a Rydberg Atom simulation.
In particular, I am interested in the position of a qubit in a lattice and the pairwise long-range Van Der Walls (VdW) interaction.
What I have in mind is the simulation of the dynamics for the following Ising-type Hamiltonian for N qubits:

H = \Omega(t) \sum_{i} \sigma_{x, i} + \delta(t) \sum_{i} \sigma_{z, i} + \sum_{i<j} U_{i,j} n_{i} n_{j}

where

  • \sigma_{a, i} with a={x, y, z} and i={1, ..., N} is the pauli matrix acting on the ith qubit
  • \Omega(t) is the amplitude pulse
  • \delta(t) is the detuning pulse
  • U_{i, j} is the long range VdW interaction
  • n_{i} = (1 + \sigma_{z, i}) is the number operator for the i-th qubit

Describe the solution you'd like

I would like to introduce a new subclass called RydergAtom that inherits the functionalities of the PhysicalComponent class. The RydbergAtom will then contain the position of the atom in the lattice.
In order to build the VdW term, a new Coupling class could be written in which the relative position of the two atoms has to be considered.
The Hamiltonian function for the VdW will then be specified in the "hamiltonians" module.

Describe alternatives you've considered

To create the RydbergAtom subclass the following alternatives were considered:

  • Subclass the Qubit class in chip.py
  • Subclass the PhysicalComponent class
  • First, make the Qubit class more generic such that it is not only a superconducting qubit and then subclass this Qubit class
    I am opting for the second option, as specified in the previous section, since it is a compromise between generality and speed.

Additional context

The components for the model are
q_i = chip.RydbergAtom(..., position=[a, b],...) : the i-th atom in the lattice at the position [a,b]
The drives, i.e. the amplitude and the detuning are:
amplitude = chip.Drive(..., connected=[q_1, ..., q_N], ...)
detuning = chip.Drive(..., connected=[q_1, ..., q_N], ...)

and finally the interaction:
interaction = chip.VanDerWalls(connected=[[q_1, q_2], ..., [q_{N-1}, q_{N}]])

All of those components will be then given as parameter to the Model class:

model = Mdl(None, # individual, self-contained components
[amplitude, detuning, interaction], # Interaction between components
)

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions