PAOFLOW
PAOFLOW copied to clipboard
On-site Zeeman field
What would be the correct way to implement an on-site exchange field in PAOFLOW?
To add this on-site Zeeman field, i did:
if arrays['Bfield'].any() != 0.0:
field = arrays['Bfield'][0] * arrays['Sj'][0] + arrays['Bfield'][1] * arrays['Sj'][1] + arrays['Bfield'][2] * arrays['Sj'][2]
for n in range(nawf):
for m in range(nawf):
arrays['HRs'][n,m,0,:] -= field[n,m]
Testing on a QSH system, the bands (bulk and ribbon) and SHC seems to respond, but the calculation of z2, either from PAOFLOW, or using z2pack, still yields 1.
The main.py file is:
from PAOFLOW import PAOFLOW
def main():
paoflow = PAOFLOW.PAOFLOW(savedir='../bi.save', inputfile='inputfile.xml',npool=1,verbose=True)
paoflow.projectability(pthr=.9)
paoflow.pao_hamiltonian()
paoflow.spin_operator(sh=[0,1,2,0,1,2,0,1,2,0,1,2,0,0,0,0],nl=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1])
paoflow.add_external_fields(Bfield=[0.5,0.,0.])
paoflow.bands(ibrav=8, nk=400, band_path='X-G-M-X-G-Y-M-G', high_sym_points={'M': [.5,.5,.0], 'X': [.5,.0,.0], 'Y': [.0,.5,.0], 'G': [0.,0.,0.]})
paoflow.z2_pack('z2pack_hamiltonian.dat')
paoflow.topology(Berry=True, eff_mass=True, spin_Hall=True, spol=2, ipol=0, jpol=1)
paoflow.interpolated_hamiltonian(nfft1=20,nfft2=20,nfft3=1)
paoflow.pao_eigh()
paoflow.gradient_and_momenta()
paoflow.adaptive_smearing()
#paoflow.dos(do_pdos=False, emin=-4., emax=4.)
paoflow.spin_Hall(emin=-4., emax=4., s_tensor=[[0,1,2]])
paoflow.finish_execution()
if __name__== '__main__':
main()