Generating Lattices#

We have several functions in the qse.lattices submodule to directly generate known lattices and geometries.

import numpy as np

import qse

One Dimensional Chain#

qchain = qse.lattices.chain(lattice_spacing=3, repeats=10)
qchain.draw(radius="nearest")
../_images/9c370fd7d24b1c67c67873e01eaa1b45afd53ea885347b501b96fde396803067.png

Ring geometry#

qring = qse.lattices.ring(spacing=2.0, nqbits=12)
qring.draw(radius="nearest")
../_images/666b584b3682d162e5fb63657e56c209f542d42fbbb94c3f1919bfda1fbe5b45.png

Square lattice#

qsquare = qse.lattices.square(1, repeats_x=6, repeats_y=6)
qsquare.set_centroid(0.0)
qsquare.draw(radius=2)
../_images/23712c3d90f756f88496e3f3aafd352be6a7383cd557ebc7dc3167f5a7ee187c.png

Triangular lattice#

qtriangle = qse.lattices.triangular(1, repeats_x=6, repeats_y=5)
qtriangle.draw(radius="nearest")
../_images/c8eace79044bf15a46ba84759d31cce542e35420ac5eac713eedba853a663e29.png

Hexagonal lattice#

qhexagon = qse.lattices.hexagonal(1, repeats_x=5, repeats_y=5)
qhexagon.draw(radius="nearest", show_labels=True)
../_images/5e3b74ad1f38953a22d2ef919e6822819fea58011865c0fd93e4d49ab654623f.png
del qhexagon[[0, 49]]
qhexagon.draw(radius="nearest")
../_images/a0ff49c442cb061ce5d10a9ad83fe28a86469efbb2d7a43a3748892fcd5577de.png

Kagome lattice#

qkagome = qse.lattices.kagome(1, repeats_x=5, repeats_y=5)
qkagome.set_centroid(0.0)
qkagome.draw(radius=3)
../_images/e9952d63d5226a87e3c148debead04b9fe1c63656fb2196284f572270ca7c18b.png

Constructing lattices via lattice vectors#

Rectangluar lattice#

spacing = 1.0
cell = spacing * np.array([[2.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 0.0]])

# qbits object with one qubit at origin
q_unit = qse.Qbits(positions=np.zeros((1, 3)), cell=cell)

# now repeat the pattern to get lattice of desired size
qrectangle = q_unit.repeat((5, 5, 1))
qrectangle.draw(radius=2)
../_images/8a31f7a81bee0b558ac8cfcd4f88fc4017dd40d2594408e353c8b86183244c6b.png

Simple Cubic lattice#

spacing = 1.0
cell = spacing * np.array([[1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0]])

# qbits object with one qubit at origin
q_unit = qse.Qbits(positions=np.zeros((1, 3)), cell=cell)

# now repeat the pattern to get lattice of desired size
qsquare = q_unit.repeat((5, 5, 5))
qsquare.draw(radius="nearest")
../_images/c1953052d1cdb05096f0d574d0a1879e3fc4fceafb5df44f53323786cc64e7b1.png

Some special geometries#

Torus geometry#

qtorus = qse.lattices.torus(n_outer=15, n_inner=15, inner_radius=2.0, outer_radius=6.0)
qtorus.draw(radius=2.0)
../_images/7529caf31d399e114affc34fac84bf280fae4043eed29b7dd660fa4c26b035e0.png

Version#

qse.utils.print_environment()
Python version: 3.12.3
qse version: 1.1.21