Ejemplo n.º 1
0
mol = mol.move(-mol.center(what='xyz'))

# 3NN tight-binding model
Hsp2 = sp2(mol, t1=2.7, t2=0.2, t3=.18, dim=2)
H = HubbardHamiltonian(Hsp2)
H.random_density()
H.set_polarization(up=[6], dn=[28])
n_AFM = H.n

f = open('FM-AFM.dat', 'w')

mixer = sisl.mixing.PulayMixer(0.7, history=7)

for u in np.arange(5, 0, -0.25):
    # We approach the solutions for different U values
    H.U = u
    mixer.clear()

    # AFM case first
    success = H.read_density(
        'clar-goblet.nc')  # Try reading, if we already have density on file
    if not success:
        H.n = n_AFM.copy()

    dn = H.converge(density.calc_n_insulator, tol=1e-10, mixer=mixer)
    eAFM = H.Etot
    H.write_density('clar-goblet.nc')
    n_AFM = H.n.copy()

    if u == 3.5:
        p = plot.SpinPolarization(H, colorbar=True, vmax=0.4, vmin=-0.4)
Ejemplo n.º 2
0
mol.sc.set_nsc([1, 1, 1])
mol = mol.move(-mol.center(what='xyz'))

# 3NN tight-binding model
Hsp2 = sp2(mol, t1=2.7, t2=0.2, t3=.18)
H = HubbardHamiltonian(Hsp2)

# Output file to collect the energy difference between
# FM and AFM solutions
f = open('FM-AFM.dat', 'w')

mixer = sisl.mixing.PulayMixer(0.7, history=7)

for u in np.linspace(0.0, 4.0, 5):
    # We approach the solutions from above, starting at U=4eV
    H.U = 4.0 - u

    # AFM case first
    success = H.read_density(
        mol_file + '.nc')  # Try reading, if we already have density on file
    if not success:
        H.random_density()
        H.set_polarization([1, 6, 15])  # polarize lower zigzag edge
    mixer.clear()
    dn = H.converge(density.calc_n_insulator, mixer=mixer)
    eAFM = H.Etot
    H.write_density(mol_file + '.nc')

    p = plot.SpinPolarization(H, colorbar=True, vmax=0.4, vmin=-0.4)
    p.annotate()
    p.savefig('%s-spin-U%i.pdf' % (mol_file, H.U * 1000))
Ejemplo n.º 3
0
from hubbard import HubbardHamiltonian, plot, density, sp2
import sys
import numpy as np
import sisl

# Build sisl Geometry object
mol = sisl.get_sile('type1.xyz').read_geometry()
mol.sc.set_nsc([1, 1, 1])
mol = mol.move(-mol.center(what='xyz')).rotate(220, [0, 0, 1])
# 3NN tight-binding model
Hsp2 = sp2(mol, t1=2.7, t2=0.2, t3=.18)

H = HubbardHamiltonian(Hsp2)

# Plot the single-particle TB (U = 0.0) wavefunction (SO) for Type 1
H.U = 0.0
ev, evec = H.eigh(eigvals_only=False, spin=0)
N = H.q[0]
midgap = H.find_midgap()
ev -= midgap
f = 3800
v = evec[:, int(round(N)) - 1]
j = np.argmax(abs(v))
wf = f * v**2 * np.sign(v[j]) * np.sign(v)
p = plot.Wavefunction(H, wf)
p.set_title(r'$E = %.3f$ eV' % (ev[int(round(N)) - 1]))
p.savefig('Fig3_SOMO.pdf')

# Plot MFH spin polarization for U = 3.5 eV
H.U = 3.5
success = H.read_density(
Ejemplo n.º 4
0
mol = sisl.get_sile('junction-2-2.XV').read_geometry()
mol.sc.set_nsc([1, 1, 1])
# 3NN tight-binding model
Hsp2 = sp2(mol, t1=2.7, t2=0.2, t3=.18)

H = HubbardHamiltonian(Hsp2)

# Output file to collect the energy difference between
# FM and AFM solutions
f = open('FM-AFM.dat', 'w')

mixer = sisl.mixing.PulayMixer(0.7, history=7)
H.set_polarization([77], dn=[23])
for u in np.linspace(0.0, 1.4, 15):
    # We approach the solutions from above, starting at U=4eV
    H.U = 4.4 - u
    # AFM case first
    success = H.read_density(
        'fig_S15.nc')  # Try reading, if we already have density on file

    mixer.clear()
    dn = H.converge(density.calc_n_insulator, mixer=mixer, tol=1e-6)
    eAFM = H.Etot
    H.write_density('fig_S15.nc')

    # Now FM case
    H.q[0] += 1  # change to two more up-electrons than down
    H.q[1] -= 1
    success = H.read_density(
        'fig_S15.nc')  # Try reading, if we already have density on file