para['l'] = 10 # number of sites para['jxy'] = 0 # Jxy coupling constant para['jz'] = 1 # Jz coupling constant para['hx'] = 0.5 # magnetic field in x direction para['hz'] = 0 # magnetic field in z direction para['alpha'] = 0 # decaying parameter of the interaction strength para['chi'] = 80 # dimension cut-off of DMRG para['bound_cond'] = 'open' # boundary condition: open or periodic para['is_pauli'] = True para['data_path'] = '.\\data_dmrg\\fullyConnected\\' mkdir(para['data_path']) nt = len(theta) na = len(alpha) for n1 in range(0, nt): for n2 in range(0, na): para['theta'] = theta[n1] para['alpha'] = alpha[n2] para['hx'] = np.cos(theta[n1]) para['jz'] = np.sin(theta[n1]) para = pm.make_consistent_parameter_dmrg(para) # Run DMRG ob, A, info, para = dmrg.dmrg_finite_size(para) save(para['data_path'], para['data_exp'] + '.pr', (ob, A, info, para), ('ob', 'A', 'info', 'para')) # Calculate the two-body RDM of the p1 and p2 sites # p1 = 2 # p2 = 3 # rho = A.reduced_density_matrix_two_body(p1, p2)
def super_orthogonalization_honeycomb(para=None): if para is None: para = pm.generate_parameters_so_honeycomb() peps = PepsInfinite(para['lattice'], para['chi'], para['state_type'], ini_way=para['ini_way'], is_debug=para['is_debug']) h = hm.hamiltonian_heisenberg(para['spin'], para['jxy'], para['jxy'], para['jz'], para['hx'], para['hz']) op = hm.spin_operators(para['spin']) ob = dict() if para['state_type'] is 'pure': ob['mx'] = np.zeros((para['tau'].__len__(), peps.nTensor)) ob['mz'] = np.zeros((para['tau'].__len__(), peps.nTensor)) ob['eb'] = np.zeros((para['tau'].__len__(), peps.nLm)) else: ob['mx'] = np.zeros((para['beta'].__len__(), peps.nTensor)) ob['mz'] = np.zeros((para['beta'].__len__(), peps.nTensor)) ob['eb'] = np.zeros((para['beta'].__len__(), peps.nLm)) ob['e_site'] = np.zeros((para['beta'].__len__(), )) if para['state_type'] is 'pure': for n_tau in range(0, para['tau'].__len__()): gate_t = hm.hamiltonian2gate_tensors(h, para['tau'][n_tau], 'exp') eb0 = np.ones((peps.nLm, )) eb = np.zeros((peps.nLm, )) for t in range(1, round(para['beta']/para['tau'][n_tau]) + 1): for n_lm in range(0, peps.nLm): peps.evolve_once_tensor_and_lm(gate_t[0], gate_t[1], n_lm) if para['so_time'] == 0: peps.super_orthogonalization(n_lm) else: peps.super_orthogonalization('all', it_time=para['so_time']) # if is_debug: # peps.check_super_orthogonality() if t % para['dt_ob'] == 0: rho2 = peps.rho_two_body_simple('all') for nr in range(0, peps.nLm): eb[nr] = rho2[nr].reshape(1, -1).dot(h.reshape(-1, 1)) if para['if_print']: print('For tau = %g, t = %g: ' % (para['tau'][n_tau], t) + 'bond energy = ' + str(eb)) err = np.linalg.norm(eb0 - eb) if err < para['tol']: ob['eb'][n_tau, :] = eb.copy() rho1 = peps.rho_one_body_simple('all') for nr in range(0, peps.nTensor): ob['mx'][n_tau, nr] = rho1[nr].reshape(1, -1).dot(op['sx'].reshape(-1, 1)) ob['mz'][n_tau, nr] = rho1[nr].reshape(1, -1).dot(op['sz'].reshape(-1, 1)) if para['if_print']: print('Converged with error = %g' % err) break else: eb0 = eb.copy() elif para['state_type'] is 'mixed': gate_t = hm.hamiltonian2gate_tensors(h, para['tau'], 'exp') beta_now = 0 t_ob = 0 for t in range(0, int(1e-6 + para['beta'][-1]/para['tau'])): for n_lm in range(0, peps.nLm): peps.evolve_once_tensor_and_lm(gate_t[0], gate_t[1], n_lm) if para['so_time'] == 0: peps.super_orthogonalization(n_lm) else: peps.super_orthogonalization('all', it_time=para['so_time']) # if is_debug: # peps.check_super_orthogonality() beta_now += para['tau'] if abs(para['beta'][t_ob] - beta_now) < 1e-8: rho2 = peps.rho_two_body_simple('all') for nr in range(0, peps.nLm): ob['eb'][t_ob, nr] = rho2[nr].reshape(1, -1).dot(h.reshape(-1, 1)) ob['e_site'][t_ob] = np.sum(ob['eb'][t_ob, :]) / 2 if para['if_print']: print('For beta = %g: ' % beta_now + 'energy per site = ' + str(ob['e_site'][t_ob])) rho1 = peps.rho_one_body_simple('all') for nr in range(0, peps.nTensor): ob['mx'][t_ob, nr] = rho1[nr].reshape(1, -1).dot(op['sx'].reshape(-1, 1)) ob['mz'][t_ob, nr] = rho1[nr].reshape(1, -1).dot(op['sz'].reshape(-1, 1)) t_ob += 1 para['data_exp'] = 'HoneycombSO_' + para['state_type'] + '_j(%g,%g)_h(%g,%g)_chi%d' % \ (para['jxy'], para['jz'], para['hx'], para['hz'], para['chi']) save(para['data_path'], para['data_exp'], [peps, para, ob], ['peps', 'para', 'ob'])