from latticemaker import makeSquareLattice if __name__ == "__main__": print(makeSquareLattice(3, 3))
plt.close("all") fig, ax = plt.subplots(figsize=[5, 5], tight_layout={"pad": 0.1}) ax.tick_params( axis='both', which='both', bottom=False, left=False, labelbottom=False, labelleft=False, length=0, ) L = 1000 N = L * L sites = Sites(L, L) bonds = makeSquareLattice(L, L) bonds = shuffleList(bonds) nSteps = 10 step = round(len(bonds) / nSteps) # assert nSteps*step == len(bonds), "nSteps should be a divisor of len(bonds)" if nSteps * step != len(bonds): print("warning: nSteps not a divisor of len(bonds)") nn = round(len(bonds) / step) print("step: " + str(step)) print("nn: " + str(nn)) fig2, axes = plt.subplots(2, ceil(nSteps / 2), figsize=[10, 3.5], gridspec_kw={
from latticemaker import makeSquareLattice, makeTriangularLattice, makeHoneycombLattice bonds = makeSquareLattice(3, 3) nodes = set([node for node, _ in bonds]) # use set() to remove duplicates nodes = list(nodes) # convert to list again nodes.sort() # sort list with open("squareLattice.csv", "w") as f: f.write("{}, {}\n".format(len(nodes), len(bonds))) for bond in bonds: f.write("{}, {}\n".format(bond[0], bond[1])) # bonds = makeTriangularLattice(2, 2) # [print("{} {}".format(a, b)) for a, b in bonds]
def runTests(): from latticemaker import makeSquareLattice, shuffleList import numpy as np print("Testing Sites()") ## some simple tests of a square 3x3 lattice sites = Sites(3, 3) sites.activate([0, 1]) assert sites.sizeOfLargestCluster == 2, "Test failed" check = [1, -2, -1, -1, -1, -1, -1, -1, -1] assert (set(sites.sites) - set(check)) == set(), "Test failed" sites.activate([1, 2]) assert sites.sizeOfLargestCluster == 3, "Test failed" check = [1, 2, -3, -1, -1, -1, -1, -1, -1] assert (set(sites.sites) - set(check)) == set(), "Test failed" sites.activate([3, 4]) assert sites.sizeOfLargestCluster == 3, "Test failed" check = [1, 2, -3, 4, -2, -1, -1, -1, -1] assert (set(sites.sites) - set(check)) == set(), "Test failed" sites.activate([4, 5]) assert sites.sizeOfLargestCluster == 3, "Test failed" check = [1, 2, -3, 4, 5, -3, -1, -1, -1] assert (set(sites.sites) - set(check)) == set(), "Test failed" sites.activate([0, 3]) assert sites.sizeOfLargestCluster == 6, "Test failed" check = [1, 2, 5, 4, 5, -6, -1, -1, -1] assert (set(sites.sites) - set(check)) == set(), "Test failed" ## test merging two bigger clusters sites = Sites(3, 3) sites.activate([[0, 1], [1, 2]]) # size 3 cluster sites.activate([[3, 4], [4, 5], [4, 7]]) # size 4 cluster sites.activate([[0, 3]]) assert sites.sizeOfLargestCluster == 7, "Test failed" sites2 = Sites(3, 3) sites2.activate([[0, 1], [1, 2]]) # size 3 cluster sites2.activate([[3, 4], [4, 5], [4, 7]]) # size 4 cluster sites2.activate([[1, 4]]) assert sites2.sizeOfLargestCluster == 7, "Test failed" sites3 = Sites(3, 3) sites3.activate([[0, 1], [1, 2]]) # size 3 cluster sites3.activate([[3, 4], [4, 5], [4, 7]]) # size 4 cluster sites3.activate([[2, 5]]) assert sites3.sizeOfLargestCluster == 7, "Test failed" # check that the order of merging doesn't matter for i in range(len(sites.sites)): assert sites.sites[i] == sites2.sites[i], "Test failed" assert sites2.sites[i] == sites3.sites[i], "Test failed" ## test merging across periodic boundaries sites = Sites(3, 3) sites.activate([[0, 1], [1, 2]]) # size 3 cluster sites.activate([[6, 7], [7, 8], [4, 7]]) # size 4 cluster sites.activate([[0, 6]]) assert sites.sizeOfLargestCluster == 7, "Test failed" ## test larger lattice sites = Sites(10, 10) bonds = makeSquareLattice(10, 10) bonds = shuffleList(bonds) sites.activate(bonds[0:80]) assert abs(np.min( sites.sites)) == sites.sizeOfLargestCluster, "Test failed" assert np.argmin(sites.sites) == sites.largestCluster, "Test failed" sites.activate(bonds[80:105]) assert abs(np.min( sites.sites)) == sites.sizeOfLargestCluster, "Test failed" assert np.argmin(sites.sites) == sites.largestCluster, "Test failed" sites.activate(bonds[105:]) assert abs(np.min(sites.sites)) == 100, "Test failed" assert abs(np.min( sites.sites)) == sites.sizeOfLargestCluster, "Test failed" assert np.argmin(sites.sites) == sites.largestCluster, "Test failed" ## test that the _findRoot works as expected sites = Sites(3, 3) sites.activate([[1, 0], [1, 2]]) # make a cluster sites.activate([[3, 4], [4, 5]]) # make another cluster sites.activate( [4, 1]) # merge in a specific order, so upper left becomes the root node sites.activate([[6, 7], [7, 8]]) # make a third cluster sites.activate([1, 7]) # merge assert sites.sites[8] == 7, "Test failed" assert sites._findRoot( 8) == 0, "Test failed" # this should modify sites.sites[8] assert sites.sites[8] == 0, "Test failed" ## test larger cluster and many activations sites = Sites(100, 100) bonds = makeSquareLattice(100, 100) # don't shuffle # sites.activate(bonds[::2][:9]) # activate 10 first nodes # assert sites.sizeOfLargestCluster == 10, "Test failed" sites.activate(bonds[::2][-10:-1]) # activate 10 last nodes # print(sites.sites[:100]) print(sites.sites[-200:]) print(bonds[-1]) print(bonds[-2]) print(bonds[:105]) print(" -- All tests passed")