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
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])