I am trying to display the spins on the site of the Ising Lattice Gauge theory which has spins placed on the bonds instead of the usual sites (in the case of the Ising Theory) in 2D. Basically the idea is that instead of the spins being on the sites as in the case of the Ising Model, they reside on the link between the two sites.
Using PIL in Python one can easily display these sites for the 2D Ising model by considering the spins to be in an N x N matrix. Here is the example of a 100 x 100 grid. But I am not sure how to do this in the case of the Lattice Gauge Theory where the spins are actually on the bonds. Can someone help me? Thanks it is my first time posting here.
Edit: Did not realise LaTex is not a thing here.
Assuming only nearest neighbour bonds (I'm not sure whether that is accurate), you have an N x (N-1) matrix for all horizontal bonds and an (N - 1) x N matrix for the vertical ones.
Assume these matrices are each populated with entries of +1 for spin-up and -1 for spin-down.
To visualize this structure (using PIL), you could use the following script:
array = np.zeros((2 * N - 1, 2 * N - 1))
for i in range(N):
for j in range(N):
if j < (N - 1):
array[2 * i, 2 * j + 1] = vert_bonds[i, j]
if i < (N - 1):
array[2 * i + 1, 2 * j] = hori_bonds[i, j]
We can then plot array
using PIL, but I would actually suggest using matplotlib
instead, as it is much more designed to handle this kind of data. With minimal modifications, we can get the following image:
small ising lattice gauge model plot
Or with a larger system:
large ising lattice gauge model plot
The full code for these figures is:
import numpy as np
import matplotlib.pyplot as plt
N = 10
if __name__ == "__main__":
# Your input data
vert_bonds = np.random.randint(2, size=(N, N - 1))
hori_bonds = np.random.randint(2, size=(N - 1, N))
# Make sure we differentiate spin-down from nodes
vert_bonds[vert_bonds == 0] = -1
hori_bonds[hori_bonds == 0] = -1
array = np.zeros((2 * N - 1, 2 * N - 1))
for i in range(N):
for j in range(N):
if j < (N - 1):
array[2 * i, 2 * j + 1] = vert_bonds[i, j]
if i < (N - 1):
array[2 * i + 1, 2 * j] = hori_bonds[i, j]
# more customiyable plotting tool
plt.imshow(array, cmap="seismic")
plt.savefig("ising-lattice-gauge-small.png")
plt.show()
Please let me know whether that answers your question, or whether you have any other queries!
edit: changed alt-text for large plot