示例#1
0
from latticemaker import makeSquareLattice


if __name__ == "__main__":
    print(makeSquareLattice(3, 3))
示例#2
0
文件: task3_oop.py 项目: FSund/FY8904
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={
示例#3
0
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]
示例#4
0
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")