Beispiel #1
0
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
Beispiel #2
0
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'))
Beispiel #3
0
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'])