def genMPO_LocalRpt(nsite,ig,key,fname,xts,ifQt,debug=False): if debug: print('\n[mpo_dmrg_propsMPORpt.genMPO_LocalRpt] fname=',fname,' ig=',ig,' key=',key) 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.genLocalSpatial(nsite,isite,ig,key) 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.genLocalRSpatialQt(nsite,isite,ig,key,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_LocalRpt = %.2f s'%(t1-t0)) return fop
def genLocalSpatialQt(nsite,isite,ig,key): isym = 2 # (D,D,4,4) [D<=2] site = mpo_dmrg_spinopers.genLocalSpatial(nsite,isite,ig,key) # Status qt = qtensor.qtensor([False,True,False,True]) # Site physical indices qu,qd = qtensor_opers.genQphys(isym,isite) ql,qr = genSpinOpersQnums(nsite,isite,key) qt.fromDenseTensor(site,[ql,qr,qu,qd]) return qt
def genLocalRSpatialQt(nsite,isite,ig,key,phi): isym = 2 # (D,D,4,4) [D<=2] cop = mpo_dmrg_spinopers.genLocalSpatial(nsite,isite,ig,key) 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,key) # 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_Local(nsite, ig, key, fname, ifQt, debug=False): if debug: print '\n[mpo_dmrg_propsMPO.genMPO_Local] fname=', fname, ' ig=', ig, ' key=', key 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.genLocalSpatial(nsite, isite, ig, key) grp['op' + str(0)] = cop else: cop = qtensor_spinopers.genLocalSpatialQt(nsite, isite, ig, key) 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_Local = %.2f s' % (t1 - t0) return fop