示例#1
0
fid = np.zeros((num_len, ))
fid_prod0 = np.zeros((num_len, ))
ent0_mid = np.zeros((num_len, ))
fid_ini = np.zeros((num_len,))

lattice = 'chain'
para_dmrg = Pm.generate_parameters_dmrg(lattice)
para_dmrg['spin'] = 'half'
para_dmrg['bound_cond'] = 'open'
para_dmrg['chi'] = 100
para_dmrg['l'] = 12
para_dmrg['jxy'] = 0
para_dmrg['jz'] = 1
para_dmrg['hx'] = 0.5
para_dmrg['hz'] = 0
para_dmrg = Pm.make_consistent_parameter_dmrg(para_dmrg)

para_dmps = parameters_dmps()
para_dmps['num_layers'] = 1
para_dmps['chi_overlap'] = 256
para_dmps['theta'] = 0
para_dmps['num_theta'] = 1

for n in range(num_len):
    print('var_para = ' + str(length[n]))
    para_dmrg['l'] = int(length[n])
    para_dmrg = Pm.make_consistent_parameter_dmrg(para_dmrg)

    if path.isfile(path.join(para_dmrg['data_path'], para_dmrg['data_exp'] + '.pr')):
        print('Load existing MPS data ...')
        a, ob = load_pr(path.join(para_dmrg['data_path'], para_dmrg['data_exp'] + '.pr'), ['a', 'ob'])
示例#2
0
    # para['data_path'] = '..\\dataQubism\\states_' + model + '\\'
    para['data_path'] = 'E:\\tmpData\\states_' + model + '\\'
    para[
        'image_path'] = '..\\dataQubism\\images_' + model + '\\train 0-' + str(
            delta)
    mkdir(para['data_path'])
    mkdir(para['image_path'])

    n_mid = int(para['l'] / 2)
    nj = len(j)
    nh = len(h)
    for n1 in range(0, nj):
        for n2 in range(0, nh):
            para['jz'] = j[n1]
            para['hz'] = h[n2]
            para = pm.make_consistent_parameter_dmrg(para)
            # Run DMRG
            if path.isfile(
                    path.join(para['data_path'], para['data_exp'] + '.pr')):
                print('Load existing data ...')
                a = load_pr(
                    path.join(para['data_path'], para['data_exp'] + '.pr'),
                    'a')
            else:
                print('Start DMRG calculation ...')
                ob, a, info, para = dmrg.dmrg_finite_size(para)
                save_pr(para['data_path'], para['data_exp'] + '.pr',
                        (ob, a, info, para), ('ob', 'a', 'info', 'para'))
            print('The entanglement gap is ' +
                  str((a.lm[n_mid][0] - a.lm[n_mid][1]) / a.lm[n_mid][0]))
            if (a.lm[n_mid][0] - a.lm[n_mid][1]) / a.lm[n_mid][0] < tol:
示例#3
0
    fidelities_to_original_state, act_umpo_on_mps
from library.TensorBasicModule import open_mps_product_state_spin_up
"""
NOTE: for Linux, add the fold "T-Nalg" in your system path
"""
para_dmrg = Pm.generate_parameters_dmrg(
    'chain')  # set default parameters of DMRG
para_dmrg['spin'] = 'half'  # spin-half model
para_dmrg['bound_cond'] = 'open'  # open boundary condition
para_dmrg['chi'] = 48  # dimension cut-off of DMRG
para_dmrg['l'] = 48  # system size
para_dmrg['jxy'] = 0  # coupling constant - jx and jy in the Heisenberg model
para_dmrg['jz'] = 1  # coupling constant - jz in the Heisenberg model
para_dmrg['hx'] = 0.3  # magnetic field in the x direction
para_dmrg['hz'] = 0  # magnetic field in the z direction
para_dmrg = Pm.make_consistent_parameter_dmrg(
    para_dmrg)  # check consistency of the parameters

para_dmps = parameters_dmps()  # set default parameters of MPS encoding
para_dmps['num_layers'] = 9  # number of the MPU layers in the circuit
para_dmps['chi_overlap'] = 256  # dimension cut-off of the disentangled MPS

# calculate the ground state by DMRG
pre_fix = path.basename(__file__)[:-3] + '_'
if path.isfile(path.join(para_dmrg['data_path'],
                         para_dmrg['data_exp'] + '.pr')):
    # check if data exist in para_dmrg['data_path']; load if exist.
    # Note: you may need to modify para_dmrg['data_path'] to a local folder when
    #       running this code with different computers or OS
    print('Load existing MPS data ...')
    a, ob = load_pr(
        path.join(para_dmrg['data_path'], para_dmrg['data_exp'] + '.pr'),