def genMPO_S2GlobalRpt(nsite,fname,xts,ifQt,debug=False): if debug: print('\n[mpo_dmrg_propsMPORpt.genMPO_S2GlobalRpt] fname=',fname) t0 = time.time() fop = h5py.File(fname,'w') npt = len(xts) nop = 1*npt fop['nop'] = nop for isite in range(nsite): ti = time.time() gname = 'site'+str(isite) grp = fop.create_group(gname) if not ifQt: cop = mpo_dmrg_spinopers.genS2GlobalSpatial(nsite,isite) for ipt in range(npt): rop = mpo_dmrg_opers.genExpISyPhiMat(xts[ipt]) wop = numpy.tensordot(cop,rop,axes=([3],[0])) grp['op'+str(ipt)] = wop else: for ipt in range(npt): cop = qtensor_spinopers.genS2GlobalRSpatialQt(nsite,isite,xts[ipt]) cop.dump(grp,'op'+str(ipt)) tf = time.time() if debug: print(' isite =',isite,' time = %.2f s'%(tf-ti)) t1 = time.time() if debug: print(' time for genMPO_S2GlobalRpt = %.2f s'%(t1-t0)) return fop
def genS2GlobalSpatialQt(nsite,isite): isym = 2 # (5,5,4,4) site = mpo_dmrg_spinopers.genS2GlobalSpatial(nsite,isite) # Status qt = qtensor.qtensor([False,True,False,True]) # Site physical indices qu,qd = qtensor_opers.genQphys(isym,isite) ql,qr = genSpinOpersQnums(nsite,isite,'S2') qt.fromDenseTensor(site,[ql,qr,qu,qd]) return qt
def genS2GlobalRSpatialQt(nsite,isite,phi): isym = 2 # (D,D,4,4) [D<=2] cop = mpo_dmrg_spinopers.genS2GlobalSpatial(nsite,isite) rop = mpo_dmrg_opers.genExpISyPhiMat(phi) site = numpy.tensordot(cop,rop,axes=([3],[0])) # Status qt = qtensor.qtensor([False,True,False,True]) # Site physical indices qu,qd = qtensor_opers.genQphys(isym,isite) ql,qr = genSpinOpersQnums(nsite,isite,'S2') # Reduce symmetry qu = qtensor_util.reduceQnumsToN(qu) qd = qtensor_util.reduceQnumsToN(qd) ql = qtensor_util.reduceQnumsToN(ql) qr = qtensor_util.reduceQnumsToN(qr) qt.fromDenseTensor(site,[ql,qr,qu,qd],ifcollect=[0,0,0,0]) return qt
def genMPO_S2Global(nsite, fname, ifQt, debug=False): if debug: print '\n[mpo_dmrg_propsMPO.genMPO_S2Global] fname=', fname t0 = time.time() fop = h5py.File(fname, 'w') nop = 1 fop['nop'] = nop for isite in range(nsite): ti = time.time() gname = 'site' + str(isite) grp = fop.create_group(gname) if not ifQt: cop = mpo_dmrg_spinopers.genS2GlobalSpatial(nsite, isite) grp['op' + str(0)] = cop else: cop = qtensor_spinopers.genS2GlobalSpatialQt(nsite, isite) cop.dump(grp, 'op' + str(0)) tf = time.time() if debug: print ' isite =', isite, ' time = %.2f s' % (tf - ti) t1 = time.time() if debug: print ' time for genMPO_S2Global = %.2f s' % (t1 - t0) return fop