def VCAEB(engine,app):
'''
This method calculates the single particle spectrum along a path in the Brillouin zone.
'''
engine.rundependences(app.name)
engine.cache.pop('pt_kmesh',None)
erange,kmesh,nk=np.linspace(app.emin,app.emax,app.ne),app.path.mesh('k'),app.path.rank('k')
result=np.zeros((nk,app.ne,3))
result[:,:,0]=np.tensordot(np.array(xrange(nk)),np.ones(app.ne),axes=0)
result[:,:,1]=np.tensordot(np.ones(nk),erange,axes=0)
for i,omega in enumerate(erange):
result[:,i,2]=-(np.trace(engine.gf_kmesh(omega+app.mu+app.eta*1j,kmesh),axis1=1,axis2=2)).imag/engine.nopt/np.pi
name='%s_%s'%(engine,app.name)
if app.savedata: np.savetxt('%s/%s.dat'%(engine.dout,name),result.reshape((nk*app.ne,3)))
if app.plot: app.figure('P',result,'%s/%s'%(engine.dout,name))
if app.returndata: return result
评论列表
文章目录