예제 #1
0
def eval_rdm1BF(dmrg,flmps,fname='top',spinfo=None):
   print '\n[mpo_dmrg_propsItrf.eval_rdm1BF]'
   t0 = time.time()
   nsite = dmrg.nsite
   if not dmrg.ifs2proj:
      rdm1 = numpy.zeros((nsite,nsite,2),dtype=dmrg_dtype)
      for p in range(nsite):
         for q in range(nsite):
	    if p > q: continue	 
            fop = mpo_dmrg_propsMPO.genMPO_Epq(nsite,p,q,fname,dmrg.ifQt)
            exphop = mpo_dmrg_props.evalProps(dmrg,flmps,flmps,fop,status='L')
            fop.close()
            rdm1[p,q] = exphop
            rdm1[q,p] = exphop
      rdm1 = rdm1.transpose(2,0,1)
      rdm1t = rdm1[0]+rdm1[1]  
      rdm1s = 0.5*(rdm1[0]-rdm1[1])
   else:
      npts,sval,sz = spinfo
      denorm,xts,wts = eval_P(dmrg,flmps,spinfo)
      # RDM1 = <Epq>
      rdm1t = numpy.zeros((nsite,nsite),dtype=dmrg_dtype)
      for p in range(nsite):
         for q in range(nsite):
	    if p > q: continue	 
            fop = mpo_dmrg_propsMPORpt.genMPO_EpqRpt(nsite,p,q,fname,xts,dmrg.ifQt)
            exphop = mpo_dmrg_props.evalProps(dmrg,flmps,flmps,fop,status='L')
            fop.close()
            rdm1t[p,q] = numpy.sum(wts*(exphop[:npts]+exphop[npts:]))/denorm
            rdm1t[q,p] = rdm1t[p,q]
      # Spin density matrix 0.5*<EpqA-EpqB>
      # Generation of additional quadrature points
      sz1 = sz-1.0
      xts1,wts1 = s2quad(npts,sval,sz1,sz)
      rdm1s = numpy.zeros((nsite,nsite),dtype=dmrg_dtype)
      for p in range(nsite):
         for q in range(nsite):
	    if p > q: continue	 
   	    # We use the same quadrature point		 
            fop = mpo_dmrg_propsMPORpt.genMPO_TpqRpt(nsite,p,q,fname,xts,dmrg.ifQt)
            exphop = mpo_dmrg_props.evalProps(dmrg,flmps,flmps,fop,status='L')
            fop.close()
            # Summarize results with different weights - wts,wts1
	    term1 = numpy.sum(wts*(exphop[:npts]-exphop[npts:2*npts]))/math.sqrt(2)
            term2 = numpy.sum(wts1*exphop[2*npts:])
            term1 = term1*sval/(sval+1.0)
            term2 = term2*math.sqrt(sval)/(sval+1.0)
            tpq = (term1+term2)/math.sqrt(2)
            rdm1s[p,q] = tpq/denorm
            rdm1s[q,p] = rdm1s[p,q]
   # Check skewness
   skewt = numpy.linalg.norm(rdm1t-rdm1t.T.conj())
   print ' skewness of rdm1t =',skewt
   assert skewt < 1.e-12
   skews = numpy.linalg.norm(rdm1s-rdm1s.T.conj())
   print ' skewness of rdm1s =',skews
   assert skews < 1.e-12
   t1 = time.time()
   print ' time for eval_rdm1BF = %.2f s'%(t1-t0)
   return rdm1t,rdm1s
예제 #2
0
def eval_SiSj(dmrg,flmps,groups,fname='top',spinfo=None):
   print '\n[mpo_dmrg_propsItrf.eval_SiSj]'
   t0 = time.time()
   nsite = dmrg.nsite
   ngroup = len(groups)
   expect = numpy.zeros((ngroup,ngroup),dtype=dmrg_dtype)
   if not dmrg.ifs2proj:
      for idx,ig in enumerate(groups):
         for jdx,jg in enumerate(groups):
	    if idx > jdx: continue
            fop = mpo_dmrg_propsMPO.genMPO_SiSj(nsite,ig,jg,fname,dmrg.ifQt)
            exphop = mpo_dmrg_props.evalProps(dmrg,flmps,flmps,fop,status='L')
            fop.close()
            expect[idx,jdx] = numpy.sum(exphop)
            expect[jdx,idx] = expect[idx,jdx]
   else:
      npts,sval,sz = spinfo
      denorm,xts,wts = eval_P(dmrg,flmps,spinfo)
      for idx,ig in enumerate(groups):
         for jdx,jg in enumerate(groups):
	    if idx > jdx: continue
            fop = mpo_dmrg_propsMPORpt.genMPO_SiSjRpt(nsite,ig,jg,fname,xts,dmrg.ifQt)
            exphop = mpo_dmrg_props.evalProps(dmrg,flmps,flmps,fop,status='L')
            fop.close()
            expect[idx,jdx] = numpy.sum(wts*(exphop[:npts]+exphop[npts:2*npts]+exphop[2*npts:]))/denorm
            expect[jdx,idx] = expect[idx,jdx]
   t1 = time.time()
   print ' time for eval_SiSj = %.2f s'%(t1-t0)
   return expect
예제 #3
0
def eval_Local2(dmrg,flmps,groups,ikey,jkey,fname='top',spinfo=None):
   print '\n[mpo_dmrg_propsItrf.eval_Local2] (ikey,jkey)=',(ikey,jkey)
   t0 = time.time()
   nsite = dmrg.nsite
   ngroup = len(groups)
   expect = numpy.zeros((ngroup,ngroup),dtype=dmrg_dtype)
   if not dmrg.ifs2proj:
      for idx,ig in enumerate(groups):
         for jdx,jg in enumerate(groups):
	    if idx > jdx: continue
            fop = mpo_dmrg_propsMPO.genMPO_Local2(nsite,ig,jg,ikey,jkey,1.0,fname,dmrg.ifQt)
            exphop = mpo_dmrg_props.evalProps(dmrg,flmps,flmps,fop,status='L')
            fop.close()
	    expect[idx,jdx] = exphop[0]
            expect[jdx,idx] = expect[idx,jdx]
   else:
      denorm,xts,wts = eval_P(dmrg,flmps,spinfo)
      for idx,ig in enumerate(groups):
         for jdx,jg in enumerate(groups):
	    if idx > jdx: continue
            fop = mpo_dmrg_propsMPORpt.genMPO_Local2Rpt(nsite,ig,jg,ikey,jkey,1.0,fname,xts,dmrg.ifQt)
            exphop = mpo_dmrg_props.evalProps(dmrg,flmps,flmps,fop,status='L')
            fop.close()
            expect[idx,jdx] = numpy.sum(wts*exphop)/denorm
            expect[jdx,idx] = expect[idx,jdx]
   t1 = time.time()
   print ' time for eval_Local2 = %.2f s'%(t1-t0)
   return expect 
예제 #4
0
def eval_Global(dmrg,flmps,key,fname='top',spinfo=None):
   nsite = dmrg.nsite
   if not dmrg.ifs2proj: 
      fop = mpo_dmrg_propsMPO.genMPO_Global(nsite,key,fname,dmrg.ifQt)
      exphop = mpo_dmrg_props.evalProps(dmrg,flmps,flmps,fop,status='L')
      fop.close()
      expect = exphop[0]
   else:
      denorm,xts,wts = eval_P(dmrg,flmps,spinfo)
      fop = mpo_dmrg_propsMPORpt.genMPO_GlobalRpt(nsite,key,fname,xts,dmrg.ifQt)
      exphop = mpo_dmrg_props.evalProps(dmrg,flmps,flmps,fop,status='L')
      fop.close()
      expect = numpy.sum(wts*exphop)/denorm
   return expect
예제 #5
0
def eval_Global(dmrg,flmps,key,fname='top',spinfo=None):
   print '\n[mpo_dmrg_propsItrf.eval_Global] key=',key
   t0 = time.time()
   nsite = dmrg.nsite
   if not dmrg.ifs2proj: 
      fop = mpo_dmrg_propsMPO.genMPO_Global(nsite,key,fname,dmrg.ifQt)
      exphop = mpo_dmrg_props.evalProps(dmrg,flmps,flmps,fop,status='L')
      fop.close()
      expect = exphop[0]
   else:
      denorm,xts,wts = eval_P(dmrg,flmps,spinfo)
      fop = mpo_dmrg_propsMPORpt.genMPO_GlobalRpt(nsite,key,fname,xts,dmrg.ifQt)
      exphop = mpo_dmrg_props.evalProps(dmrg,flmps,flmps,fop,status='L')
      fop.close()
      expect = numpy.sum(wts*exphop)/denorm
   t1 = time.time()
   print ' time for eval_Global = %.2f s'%(t1-t0)
   return expect
예제 #6
0
def eval_Local(dmrg,flmps,groups,key,fname='top',spinfo=None):
   nsite = dmrg.nsite
   ngroup = len(groups)
   expect = numpy.zeros(ngroup,dtype=dmrg_dtype)
   if not dmrg.ifs2proj: 
      for idx,ig in enumerate(groups):
         fop = mpo_dmrg_propsMPO.genMPO_Local(nsite,ig,key,fname,dmrg.ifQt)
         exphop = mpo_dmrg_props.evalProps(dmrg,flmps,flmps,fop,status='L')
         fop.close()
	 expect[idx] = exphop[0]
   else:
      denorm,xts,wts = eval_P(dmrg,flmps,spinfo)
      for idx,ig in enumerate(groups):
         fop = mpo_dmrg_propsMPORpt.genMPO_LocalRpt(nsite,ig,key,fname,xts,dmrg.ifQt)
         exphop = mpo_dmrg_props.evalProps(dmrg,flmps,flmps,fop,status='L')
         fop.close()
         expect[idx] = numpy.sum(wts*exphop)/denorm
   return expect
예제 #7
0
def eval_P2(dmrg,flmps0,flmps1,spinfo,debug=False):
   npts,sval,sz = spinfo
   xts,wts = s2quad(npts,sval,sz,sz)
   nsite = dmrg.nsite
   fname = './top'
   fop = mpo_dmrg_propsMPORpt.genMPO_Rpt(nsite,fname,xts,dmrg.ifQt)
   exphop = mpo_dmrg_props.evalProps(dmrg,flmps0,flmps1,fop,status='L')
   fop.close()
   denorm = numpy.sum(wts*exphop)
   if debug: print '<P>=',denorm
   return denorm,xts,wts
예제 #8
0
def eval_SiSj(dmrg,flmps,groups,fname='top',spinfo=None):
   nsite = dmrg.nsite
   ngroup = len(groups)
   expect = numpy.zeros((ngroup,ngroup),dtype=dmrg_dtype)
   if not dmrg.ifs2proj:
      for idx,ig in enumerate(groups):
         for jdx,jg in enumerate(groups):
            fop = mpo_dmrg_propsMPO.genMPO_SiSj(nsite,ig,jg,fname,dmrg.ifQt)
            exphop = mpo_dmrg_props.evalProps(dmrg,flmps,flmps,fop,status='L')
            fop.close()
            expect[idx,jdx] = numpy.sum(exphop)
   else:
      npts,sval,sz = spinfo
      denorm,xts,wts = eval_P(dmrg,flmps,spinfo)
      for idx,ig in enumerate(groups):
         for jdx,jg in enumerate(groups):
            fop = mpo_dmrg_propsMPORpt.genMPO_SiSjRpt(nsite,ig,jg,fname,xts,dmrg.ifQt)
            exphop = mpo_dmrg_props.evalProps(dmrg,flmps,flmps,fop,status='L')
            fop.close()
            expect[idx,jdx] = numpy.sum(wts*(exphop[:npts]+exphop[npts:2*npts]+exphop[2*npts:]))/denorm
   return expect