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'])
# 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:
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'),