Beispiel #1
0
    def gethkmesh(self,kmesh=None,append=False,params={}):
        '''
        Get hk mesh.

        kmesh: 
            specify the k-mesh.
        append: 
            append one if True.
        params:
            asign params instead of registered ones.
        '''
        if kmesh is not None:
            hkmesh=mpido(inputlist=reshape(kmesh,(-1,kmesh.shape[-1])),func=lambda k:self.Hk(k))
            return hkmesh
        hkmesh=0
        for op in self.operatordict.keys():
            operator=self.operatordict[op]
            paramname=self.op_param_map[operator.label]
            param=params.get(paramname,self.params.get(paramname))
            if param==None or abs(param)<1e-8:
                #print 'Warning! Small parameter ',param,'! Ignored'
                continue
            hkmesh+=param*operator.weight*operator.Hk(self.kspace.kmesh)
        if self.propergauge and self.spaceconfig.natom>1:
            hkmesh=self.properize(hkmesh)
        return hkmesh
Beispiel #2
0
    def getemesh(self,evalvk=False):
        '''
        Get an Ek(with or without vk) mesh.

        evalvk:
            Evaluate vkmesh if True.
        '''
        nband=self.nband
        dmesh=mpido(func=eigh if evalvk else eigvalsh,inputlist=self.data.reshape([-1,nband,nband]))
        if evalvk:
            ekl,vkl=[],[]
            for ek,vk in dmesh:
                ekl.append(ek)
                vkl.append(vk)
            return reshape(ekl,self.data.shape[:,-1]),reshape(vkl,self.data.shape)
        else:
            return reshape(dmesh,self.data.shape[:-1])