def VCAOP(engine,app):
'''
This method calculates the order parameters.
'''
engine.rundependences(app.name)
engine.cache.pop('pt_kmesh',None)
cgf,kmesh,nk=engine.apps[engine.preloads[0]],app.BZ.mesh('k'),app.BZ.rank('k')
ops,ms={},np.zeros((len(app.terms),engine.ncopt,engine.ncopt),dtype=np.complex128)
for i,term in enumerate(app.terms):
order=deepcopy(term)
order.value=1.0
for opt in HP.Generator(engine.lattice.bonds,engine.config,table=engine.config.table(mask=engine.mask),terms=[order],half=True).operators.itervalues():
ms[i,opt.seqs[0],opt.seqs[1]]+=opt.value
ms[i,:,:]+=ms[i,:,:].T.conjugate()
fx=lambda omega,m: (np.trace(engine.mgf_kmesh(omega=app.mu+1j*omega,kmesh=kmesh).dot(m),axis1=1,axis2=2)-np.trace(m)/(1j*omega-app.p)).sum().real
for term,m,dtype in zip(app.terms,ms,app.dtypes):
ops[term.id]=quad(fx,0,np.float(np.inf),args=m)[0]/nk/engine.ncopt*2/np.pi
if dtype in (np.float32,np.float64): ops[term.id]=ops[term.id].real
engine.log<<HP.Sheet(corner='Order',rows=['Value'],cols=ops.keys(),contents=np.array(ops.values()).reshape((1,-1)))<<'\n'
if app.returndata: return ops
评论列表
文章目录