def prepare_bath_hamilts(para, inputs=None): # inputs = (bath, ob0, hamilt) print('Starting iDMRG for the entanglement bath') bath_data = opath.join(para['bath_path'], para['bath_exp']) if inputs is None: if para['if_load_bath'] and opath.isfile(bath_data): print('Bath data found. Load the bath.') bath, ob0, hamilt = load_pr(bath_data, ['A', 'ob0', 'hamilt']) else: print('Bath data not found. Calculate bath by iDMRG.') hamilt = hamiltonian_heisenberg(para['spin'], para['jxy'], para['jxy'], para['jz'], para['hx'] / 2, para['hz'] / 2) bath, ob0 = dmrg_infinite_size(para, hamilt=hamilt)[:2] save_pr(para['bath_path'], para['bath_exp'], [bath, ob0, hamilt], ['A', 'ob0', 'hamilt']) else: bath, ob0, hamilt = inputs if (bath.is_symme_env is True) and (bath.dmrg_type is 'mpo'): bath.env[1] = bath.env[0] print('Preparing the physical-bath Hamiltonians') qes = QES_1D(para['d'], para['chi'], para['d'] * para['d'], para['l_phys'], para['tau'], spin=para['spin']) if bath.dmrg_type is 'mpo': qes.obtain_physical_gate_tensors(hamilt) qes.obtain_bath_h(bath.env, 'both') else: qes.obtain_bath_h_by_effective_ops_1d( bath.bath_op_onsite, bath.effective_ops, bath.hamilt_index) hamilts = [hamilt] + qes.hamilt_bath return hamilts, bath, ob0
from TensorBasicModule import open_mps_product_state_spin_up lattice = 'square' para_dmrg = Pm.generate_parameters_dmrg(lattice) para_dmrg['spin'] = 'half' para_dmrg['bound_cond'] = 'open' para_dmrg['chi'] = 128 para_dmrg['square_width'] = 3 # width of the square lattice para_dmrg['square_height'] = 3 # height of the square lattice para_dmrg['jxy'] = 1 para_dmrg['jz'] = 1 para_dmrg['hx'] = 0 para_dmrg['hz'] = 0 para_dmrg['project_path'] = '.' para_dmrg['data_path'] = 'data/HeisenbergSquare' print_dict(para_dmrg) para_dmrg = Pm.make_consistent_parameter_dmrg(para_dmrg) ob, a, info, para = dmrg_finite_size(para_dmrg) print('Energy per site = ' + str(ob['e_per_site'])) save_pr(para['data_path'], para['data_exp'] + '.pr', (ob, a, info, para), ('ob', 'a', 'info', 'para')) # if path.isfile(path.join(para_dmrg['data_path'], para_dmrg['data_exp'] + '.pr')): # print('Load existing data ...') # a, ob = load_pr(path.join(para_dmrg['data_path'], para_dmrg['data_exp'] + '.pr'), ['a', 'ob']) # else: # ob, a, info, para = dmrg_finite_size(para_dmrg) # save_pr(para['data_path'], para['data_exp'] + '.pr', (ob, a, info, para), # ('ob', 'a', 'info', 'para'))
def load_and_save_tensor_list(path, exp='.*pr'): files = search_file(path, exp) for x in files: a = load_pr(x, 'a') save_pr('./', x, [a.mps], ['tensor_list'])