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)
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))
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(
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