def set(self,gse):
'''
Set the Lambda matrix, Q matrix and QT matrix of the block.
Parameters
----------
gse : number
The groundstate energy.
'''
sign=self.controllers['sign']
if self.method=='S':
lczs,Qs=self.controllers['lczs'],self.controllers['Qs']
self.data['niters']=np.zeros(Qs.shape[0],dtype=np.int32)
self.data['Lambdas']=np.zeros((Qs.shape[0],Qs.shape[2]),dtype=np.float64)
self.data['Qs']=np.zeros(Qs.shape,dtype=Qs.dtype)
self.data['QTs']=np.zeros((Qs.shape[0],Qs.shape[2]),dtype=Qs.dtype)
for i,(lcz,Q) in enumerate(zip(lczs,Qs)):
E,V=sl.eigh(lcz.T,eigvals_only=False)
self.data['niters'][i]=lcz.niter
self.data['Lambdas'][i,0:lcz.niter]=sign*(E-gse)
self.data['Qs'][i,:,0:lcz.niter]=Q[:,0:lcz.niter].dot(V)
self.data['QTs'][i,0:lcz.niter]=lcz.P[0,0]*V[0,:].conjugate()
else:
lanczos=self.controllers['lanczos']
E,V=sl.eigh(lanczos.T,eigvals_only=False)
self.data['Lambda']=sign*(E-gse)
self.data['Q']=lanczos.P[:min(lanczos.nv0,lanczos.niter),:].T.conjugate().dot(V[:min(lanczos.nv0,lanczos.niter),:])
self.data['QT']=HM.dagger(self.data['Q'])
评论列表
文章目录