SCMF.py 文件源码

python
阅读 27 收藏 0 点赞 0 评论 0

项目:HamiltonianPy 作者: waltergu 项目源码 文件源码
def update_ops(self,kspace=None):
        '''
        Update the order parameters of the system.

        Parameters
        ----------
        kspace : BaseSpace, optional
            The Brillouin zone of the system.
        '''
        self.update(**{name:order.value for name,order in self.ops.iteritems()})
        self.mu,nmatrix=super(SCMF,self).mu(self.filling,kspace),self.nmatrix
        f=(lambda e,mu: 1 if e<=mu else 0) if abs(self.temperature)<RZERO else (lambda e,mu: 1/(exp((e-mu)/self.temperature)+1))
        m=zeros((nmatrix,nmatrix),dtype=complex128)
        for matrix in self.matrices(kspace):
            eigs,eigvecs=eigh(matrix)
            for eig,eigvec in zip(eigs,eigvecs.T):
                m+=dot(eigvec.conj().reshape((nmatrix,1)),eigvec.reshape((1,nmatrix)))*f(eig,self.mu)
        nstate=(1 if kspace is None else kspace.rank('k'))*nmatrix/self.config.values()[0].nspin
        for key in self.ops.keys():
            self.ops[key].value=sum(m*self.ops[key].matrix)/nstate
            if self.ops[key].dtype in (float32,float64): self.ops[key].value=self.ops[key].value.real
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号