示例#1
0
def test_load():
    print '\n[test_load]'
    shape = (nr,nc)
    # simple peps
    vec = np.load('data/peps_vec3by3.npy')
    peps0 = peps.aspeps(vec, (nr,nc), pdim, bond)
    ovlp,php = nAverage_fpeps3by3(peps0)
    print 'nAveraged=',ovlp,php,php/ovlp
    ovlp,etot = energy_fpeps3by3(peps0,0.0)
    print 'ovlp,etot=',ovlp,etot,etot/ovlp

    ne = 4.0
    npts = 5
    xts = np.array([(2.0*i-1.0)/(2*npts)*np.pi for i in range(1,npts+1)])
    wts = np.array([np.pi/npts]*npts)*[np.exp(-1.j*x*ne) for x in xts]
    print '\nQuadrature[Chebyshev-Gauss]'
    print 'xts=',xts
    print 'wts=',wts

    def energy_fn2(vec, pdim, bond):
        P = peps.aspeps(vec, (nr,nc), pdim, bond)
	PP_tot = 0.
	PHP_tot = 0.
	for ipt in range(npts):
           PP,PHP = energy_fpeps3by3(P,xts[ipt])
	   PP_tot += PP*wts[ipt]
	   PHP_tot += PHP*wts[ipt]
	   #print ' PHP,PP',PHP,PP
	e = PHP_tot/PP_tot
	print ' PHP_tot,PP_tot=',PHP_tot,PP_tot
	print ' e_tot=',e
        return e

    def energy_fn(vec, pdim, bond):
        P = peps.aspeps(vec, (nr,nc), pdim, bond)
        PP,PHP = energy_fpeps3by3(P)
	e = PHP/PP
        print ' PHP,PP,PHP/PP,eav=',PHP,PP,e,e/(nr*nc)
        return PHP/PP

    def bound_energy_fn(vec):
        return energy_fn2(vec, pdim, bond)

    vec = peps.flatten(peps0)
    import scipy.optimize
    import autograd
    
    deriv = autograd.grad(bound_energy_fn)
    print 'nparams=',len(vec)
    def save_vec(vec):
	fname = 'peps_vec1_3by3'
	np.save(fname,vec)
	print ' --- save vec into fname=',fname
	return 0
    # Optimize
    result = scipy.optimize.minimize(bound_energy_fn, jac=deriv, x0=vec,\
		    		     tol=1.e-3, callback=save_vec)
    P0 = peps.aspeps(result.x, (nr,nc), pdim, bond)
    print "final =",bound_energy_fn(peps.flatten(P0))
    return 0
示例#2
0
def test_plot():
    elst = np.load('data/energy.npy')
    import matplotlib.pyplot as plt
    efci = -3.700331728271
    plt.plot(np.log10(elst - efci), 'ro-')
    plt.savefig('data/convergence.pdf')
    plt.show()
    return 0
示例#3
0
def test_opt():
    print '\n[test_opt]'
    shape = (nr, nc)
    # simple peps
    vec = np.load('peps_vec1_3by3.npy')
    vec = vec / 5
    peps0 = peps.aspeps(vec, (nr, nc), pdim, bond)
    bondL = bond + 1
    pepsc = peps.random(peps0.shape, pdim, 1, fac=1.e-2)
    peps0 = peps.add(peps0, pepsc)

    ovlp, php = nAverage_fpeps3by3(peps0)
    print 'nAveraged=', ovlp, php, php / ovlp
    ovlp, etot = energy_fpeps3by3(peps0)
    print 'ovlp,etot=', ovlp, etot, etot / ovlp

    def energy_fn(vec, pdim, bondL):
        P = peps.aspeps(vec, (nr, nc), pdim, bondL)
        PP, PHP = energy_fpeps3by3(P)
        e = PHP / PP
        print ' PHP,PP,PHP/PP,eav=', PHP, PP, e, e / (nr * nc)
        return PHP / PP

    def bound_energy_fn(vec):
        return energy_fn(vec, pdim, bondL)

    vec = peps.flatten(peps0)
    import scipy.optimize
    import autograd

    deriv = autograd.grad(bound_energy_fn)
    print 'nparams=', len(vec)

    def save_vec(vec):
        fname = 'peps_vec2_3by3'
        np.save(fname, vec)
        print ' --- save vec into fname=', fname
        return 0

    # Optimize
    result = scipy.optimize.minimize(bound_energy_fn, jac=deriv, x0=vec,\
             tol=1.e-4, callback=save_vec)
    P0 = peps.aspeps(result.x, (nr, nc), pdim, bondL)
    print "final =", energy_fn(peps.flatten(P0), pdim, bondL)
    return 0
示例#4
0
def test_load():
    print '[test_load]'
    shape = (nr, nc)
    # simple peps
    vec = np.load('data/peps_vec2by2.npy')
    peps0 = peps.aspeps(vec, (nr, nc), pdim, bond)
    ovlp, etot = energy_fpeps2by2(peps0)
    ovlp, php = nAverage_fpeps2by2(peps0)
    print 'etot=', ovlp, etot, etot / ovlp
    print 'nAverage=', ovlp, php, php / ovlp
    exit()

    def energy_fn(vec, pdim, bond):
        P = peps.aspeps(vec, (nr, nc), pdim, bond)
        PP, PHP = energy_fpeps2by2(P)
        e = PHP / PP
        print ' PHP,PP,PHP/PP,eav=', PHP, PP, e, e / (nr * nc)
        return PHP / PP

    def bound_energy_fn(vec):
        return energy_fn(vec, pdim, bond)

    vec = peps.flatten(peps0)
    import scipy.optimize
    import autograd

    deriv = autograd.grad(bound_energy_fn)
    print 'nparams=', len(vec)
    elst = []

    def save_vec(vec):
        fname = 'data/peps_vec1'
        np.save(fname, vec)
        e = bound_energy_fn(vec)
        elst.append(e)
        print ' --- save vec into fname=', fname, ' e=', e
        return 0

    # Optimize
    result = scipy.optimize.minimize(bound_energy_fn, jac=deriv, x0=vec,\
             tol=1.e-4, callback=save_vec)
    P0 = peps.aspeps(result.x, (nr, nc), pdim, bond)
    print "final =", energy_fn(peps.flatten(P0), pdim, bond)
    np.save('data/energy', elst)
    return 0