def build_initial_state(size, states, filling, mode='random', seed=None): warnings.warn( "Deprecated `build_initial_state`: Use `tenpy.networks.mps.InitialStateBuilder` instead.", category=FutureWarning, stacklevel=2) from tenpy.networks import mps return mps.build_initial_state(size, states, filling, mode, seed)
def random_list(length,upfilling,dnfilling): """this function generates random occupations for an initial state of the requested length with densities of upfilling, dnfilling for the up and down spins, respectively A corresponding product state MPS is returned.""" uplist = build_initial_state(size=length,states=(0,1),filling=(1-upfilling,upfilling)) dnlist = build_initial_state(size=length,states=(0,1),filling=(1-dnfilling,dnfilling)) prod=[] for i in range(length): if (uplist[i]==0 and dnlist[i]==0): prod.append("empty") elif (uplist[i]==1 and dnlist[i]==0): prod.append("up") elif (uplist[i]==0 and dnlist[i]==1): prod.append("down") elif (uplist[i]==1 and dnlist[i]==1): prod.append("full") return prod
def dmrg_wrapper(model_par, sim_par, run_par, args, psi=None, sim_filename=None, reload_sim=False): """Run DMRG ("Walk this way..."). Args: model_par (dict): Model parameters args (Namespace): All command line options psi (MPS, optional): Initial state. If None, random state is iinitialized based on model_par and args. Returns: psi (MPS): Ground state out (dict): DMRG output num_ini (array): Density profile for the initial state M (model): model """ print("chi's in use:", sim_par['CHI_LIST']) print("minimum no. of sweeps:", sim_par['MIN_STEPS']) print('dmrg_wrapper has bc={}'.format(model_par['bc_MPS'])) # Check if there is already a data file from a finished run try: with open('fh_dmrg_' + sim_par['identifier'] + '.dat', 'rb') as f: a = pickle.load(f) if data['out']['shelve_flag']: print("Simulation was shelved. Restarting soon.") else: print("Finished data file found. Skipping.") print('Check for {skip:True}') return None, { 'skip': True }, None, None, None # Not very clean but haven't found anything better except IOError: print("No data file found. Starting new sim.") pass if reload_sim: with open(sim_filename + '.sim', 'rb') as f: save_sim = pickle.load(f) sim_par[ 'STARTING_ENV_FROM_PSI'] = 0 # Make sure to use old environments. sim_par['CHI_LIST'] = { 0: max(sim_par['CHI_LIST'].values()) } # Assume saved sim had reached max chi. sim_par['MIN_STEPS'] = 20 sim_par['LP'] = save_sim['LP'] sim_par['RP'] = save_sim['RP'] psi = save_sim['psi'] M = save_sim['M'] num_ini = save_sim['num_ini'] initial_state = save_sim['initial_state'] else: M = mod.HofstadterFermions(model_par) initial_state = build_initial_state( M.lat.N_sites, (0, 1), (1 - run_par['filling'], run_par['filling']), mode='random', seed=args.seed) if psi == None: print("Generating new psi.") #L = model_par['Lx'] * model_par['Ly'] # upfilling, dnfilling = get_filling(run_par, L) # prod = random_list(L, upfilling, dnfilling) psi = MPS.from_product_state(M.lat.mps_sites(), initial_state, bc=model_par['bc_MPS']) else: print("Using user-specified psi.") num_ini = psi.expectation_value('N') print('Initial density profile:', num_ini) t0 = time.time() print("Starting DMRG...") out = dmrg.run(psi, M, sim_par) print("DMRG took {} seconds.".format(time.time() - t0)) out['time'] = time.time() - t0 # sim = simulation.simulation(psi, M) # sim.dmrg_par = sim_par # sim.ground_state() # out = sim.sim_stats[-1] # if out['shelve_flag']: # DMRG did not end before time ran out; save sim to disk # save_sim = { # 'LP': out['LP'], # 'RP': out['RP'], # 'psi': psi, # 'M': M, # 'num_ini': num_ini, # 'initial_state': initial_state, # 'model_par': model_par, # 'sim_par': sim_par, # } # with open('fh_dmrg_' + identifier + '.sim', 'wb') as f: # pickle.dump(save_sim, f) out['skip'] = False return psi, out, num_ini, M, initial_state