struc_disorder_one = kite.StructuralDisorder(lattice, concentration=conc)
    struc_disorder_two = kite.StructuralDisorder(lattice, concentration=conc)
    struc_disorder_one.add_structural_disorder(
        # in this way we can add onsite disorder in the form [unit cell], 'sublattice', value
        ([+0, +0], 'Aup', +disorder_strength),
        ([+0, +0], 'Adown', -disorder_strength),
    )
    # It is possible to add multiple different disorder type which should be forwarded to the export_lattice function
    # as a list.
    struc_disorder_two.add_structural_disorder(
        # in this way we can add onsite disorder in the form [unit cell], 'sublattice', value
        ([+0, +0], 'Bup', +disorder_strength),
        ([+0, +0], 'Bdown', -disorder_strength),
    )

    disorder = kite.Disorder(lattice)  # Disorder definition
    disorder_deviation_and = disorder_strength_and / (2 * sqrt(3))
    disorder.add_disorder(['Aup', 'Adown'],
                          dis_type='uniform',
                          mean_value=0,
                          standard_deviation=disorder_deviation_and)
    disorder.add_disorder(['Bup', 'Bdown'],
                          dis_type='uniform',
                          mean_value=0,
                          standard_deviation=disorder_deviation_and)

    b1, b2 = lattice.reciprocal_vectors()

    vf = 1.5 * a_cc * np.abs(
        t)  #: [ev * nm] redefined fermi velocity in natural units
    k = np.abs(energy / vf)  #: [nm^-1] find the wavevector length
Beispiel #2
0
def square_lattice(onsite=0):
    a1 = np.array([1, 0])
    a2 = np.array([0, 1])

    lat = pb.Lattice(a1=a1, a2=a2)
    lat.add_sublattices(('A', [0, 0], onsite))
    lat.add_hoppings(([1, 0], 'A', 'A', -1), ([0, 1], 'A', 'A', -1))
    return lat


std_dev = W * W / 12.0
mean = 0

lattice = square_lattice()
disorder = kite.Disorder(lattice)
disorder.add_disorder('A', 'Uniform', mean, std_dev)

# min_B = 2.019368814847448*(2048.0/L)*B
# mod   = kite.Modification(magnetic_field=min_B)

nx = ny = 8
lx = ly = L
energy = -3.5
# name = 'square_lattice_WL_B' + str(B) + '_W' + str(W) + '_N' + str(N) + '_L' + str(L) + '.h5'
name = 'square_lattice_WL' + '_W' + str(W) + '_N' + str(N) + '_L' + str(
    L) + '.h5'

b1, b2 = lattice.reciprocal_vectors()
Gamma = [0, 0]
R = b1[0:2] + b2[0:2]
Beispiel #3
0
def graphene_initial(onsite=(0, 0)):
    """Return the basic lattice specification for monolayer graphene with nearest neighbor"""

    theta = np.pi / 3
    a1 = np.array([1 + np.cos(theta), np.sin(theta)])
    a2 = np.array([0, 2 * np.sin(theta)])

    # create a lattice with 2 primitive vectors
    lat = pb.Lattice(a1=a1, a2=a2)

    # Add sublattices
    lat.add_sublattices(
        # name, position, and onsite potential
        ('A', [0, 0], onsite[0]),
        ('B', [1, 0], onsite[1]))

    # Add hoppings
    lat.add_hoppings(
        # inside the main cell, between which atoms, and the value
        ([0, 0], 'A', 'B', -1 / EnergyScale),
        # between neighboring cells, between which atoms, and the value
        ([-1, 0], 'A', 'B', -1 / EnergyScale),
        ([-1, 1], 'A', 'B', -1 / EnergyScale))

    # Add disorder
    # Each sublattice can have different disorder. If there are multiple orbitals at one sublattice, one needs to add
    # disorder vector of the same size as the number of orbitals. Type of disorder available are Gaussian,
    # Deterministic and Uniform. Each of the needs the have mean value, and standard deviation, where standard deviation
    # of deterministic disorder should be 0.

    disorder = kite.Disorder(lat)
    disorder.add_disorder('A', 'Deterministic', 0.0, 0)
    disorder.add_disorder('B', 'Deterministic', 0.0, 0)

    # Same procedure as adding the hopping + concentration
    node0 = [[+0, +0], 'A']
    node1 = [[+0, +0], 'B']
    node2 = [[+1, +0], 'A']
    node3 = [[+0, +1], 'B']
    node4 = [[+0, +1], 'A']
    node5 = [[-1, +1], 'B']

    struc_disorder_one = kite.StructuralDisorder(lat, concentration=0.035)
    struc_disorder_one.add_structural_disorder(
        (*node0, *node1, timp / EnergyScale),
        (*node1, *node2, timp / EnergyScale),
        (*node2, *node3, timp / EnergyScale),
        (*node3, *node4, timp / EnergyScale),
        (*node4, *node5, timp / EnergyScale),
        (*node5, *node0, timp / EnergyScale),
        #
        (*node0, *node2, nu / EnergyScale),
        (*node2, *node4, nu / EnergyScale),
        (*node4, *node0, nu / EnergyScale),
        (*node1, *node3, nu / EnergyScale),
        (*node3, *node5, nu / EnergyScale),
        (*node5, *node1, nu / EnergyScale),
        #
        (*node0, *node3, rho / EnergyScale),
        (*node1, *node4, rho / EnergyScale),
        (*node2, *node5, rho / EnergyScale),
        # in this way we can add onsite disorder again
        (*node0, 0.))

    # if there is disorder it should be returned separately from the lattice
    return lat, disorder, [struc_disorder_one]