qml.spin.haldane¶
- haldane(lattice, n_cells, hopping=1.0, hopping_next=1.0, phi=1.0, boundary_condition=False, mapping='jordan_wigner')[source]¶
Generates the Hamiltonian for the Haldane model on a lattice.
The Hamiltonian for the Haldane model is represented as:
ˆH=−t1∑⟨i,j⟩,σc†iσcjσ−t2∑⟨⟨i,j⟩⟩,σ(eiϕc†iσcjσ+e−iϕc†jσciσ)where t1 is the hopping amplitude between neighbouring sites ⟨i,j⟩, t2 is the hopping amplitude between next-nearest neighbour sites ⟨⟨i,j⟩⟩, ϕ is the phase factor that breaks time-reversal symmetry in the system, and σ is the spin degree of freedom. This function assumes two fermions with opposite spins on each lattice site.
- Parameters
lattice (str) – Shape of the lattice. Input values can be
'chain'
,'square'
,'rectangle'
,'triangle'
,'honeycomb'
,'kagome'
,'lieb'
,'cubic'
,'bcc'
,'fcc'
or'diamond'
.n_cells (list[int]) – Number of cells in each direction of the grid.
hopping (float or tensor_like[float]) – Hopping strength between nearest neighbouring sites. It can be a number, or a square matrix of size
(n_sites, n_sites)
, wheren_sites
is the total number of sites. Default value is 1.0.hopping_next (float or tensor_like[float]) – Hopping strength between next-nearest neighbouring sites. It can be a number, or a square matrix of size
(n_sites, n_sites)
, wheren_sites
is the total number of sites. Default value is 1.0.phi (float or tensor_like[float]) – Phase factor in the system. It can be a number, or a square matrix of size
(n_sites, n_sites)
, wheren_sites
is the total number of sites. Default value is 1.0.boundary_condition (bool or list[bool]) – Specifies whether or not to enforce periodic boundary conditions for the different lattice axes. Default is
False
indicating open boundary condition.mapping (str) – Specifies the fermion-to-qubit mapping. Input values can be
'jordan_wigner'
,'parity'
or'bravyi_kitaev'
.
- Raises
ValueError – If
hopping
,hopping_next
, orphi
doesn’t have correct dimensions, or ifmapping
is not available.- Returns
Hamiltonian for the Haldane model.
- Return type
Example
>>> n_cells = [2] >>> h1 = 0.5 >>> h2 = 1.0 >>> phi = 0.1 >>> spin_ham = qml.spin.haldane("chain", n_cells, hopping=h1, hopping_next=h2, phi=phi) >>> spin_ham ( -0.25 * (Y(0) @ Z(1) @ Y(2)) + -0.25 * (X(0) @ Z(1) @ X(2)) + -0.25 * (Y(1) @ Z(2) @ Y(3)) + -0.25 * (X(1) @ Z(2) @ X(3)) )