qml.pulse.rydberg_interaction¶
- rydberg_interaction(register, wires=None, interaction_coeff=862690, max_distance=inf)[source]¶
Returns a
ParametrizedHamiltonian
representing the interaction of an ensemble of Rydberg atoms due to the Rydberg blockade∑i<jVijninjwhere ni corresponds to the projector on the Rydberg state of the atom i, and Vij is the van der Waals potential:
Vij=C6R6ijwhere Rij is the distance between the atoms i and j, and C6 is the Rydberg interaction constant, which defaults to 862690×2πMHz μm6. The unit of time for the evolution of this Rydberg interaction term is in μs. This interaction term can be combined with laser drive terms (
rydberg_drive()
) to create a Hamiltonian describing a driven Rydberg atom system.See also
- Parameters
register (list) – list of coordinates of the Rydberg atoms (in micrometers)
wires (list) – List of wires containing the wire values for all the atoms. This list should have the same length as
register
. IfNone
, each atom’s wire value will correspond to its index in theregister
list.interaction_coeff (float) – Defaults to 862690×2πMHz μm6. The value will be multiplied by 2π internally to convert to angular frequency, such that only the value in standard frequency (i.e., 862690 in the default example) should be passed.
max_distance (float) – Threshold for distance in μm between two Rydberg atoms beyond which their contribution to the interaction term is removed from the Hamiltonian.
- Returns
a
ParametrizedHamiltonian
representing the atom interaction- Return type
Example
We create a Hamiltonian describing the van der Waals interaction among 9 Rydberg atoms in a square lattice:
atom_coordinates = [[0, 0], [0, 5], [0, 10], [5, 0], [5, 5], [5, 10], [10, 0], [10, 5], [10, 10]] wires = [1, 5, 0, 2, 4, 3, 8, 6, 7] H_i = qml.pulse.rydberg_interaction(atom_coordinates, wires=wires)
>>> H_i HardwareHamiltonian: terms=36
As expected, we have N(N−1)2=36 terms for N=9 atoms.
The interaction term is dependent only on the number and positions of the Rydberg atoms. We can execute this pulse program, which corresponds to all driving laser fields being turned off and therefore has no trainable parameters. To add a driving laser field, see
rydberg_drive()
.import jax jax.config.update("jax_enable_x64", True) dev = qml.device("default.qubit", wires=9) @qml.qnode(dev, interface="jax") def circuit(): qml.evolve(H_i)([], t=[0, 10]) return qml.expval(qml.Z(0))
>>> circuit() Array(1., dtype=float64)